- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在创建一个包含大表格的 PDF。在此表中,有一个可以用 HTML 填充的单元格。如果是,则 HTML 必须被解释为 HTML 而不是显示为常规文本。但是,当我这样做时,布局/样式变得杂乱无章,并且一些图片没有显示。 (在我给出的示例中,项目符号破折号被 9 替换。)
我使用 C# 编程并使用 iText7 创建 PDF。
在我的项目中,我有以下要显示的 HTML 代码。 HTML 代码看起来像这样的原因是因为它是 RTF 转换为 HTML:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="SautinSoft.RtfToHtml.dll">
<title>Untitled document</title>
<style type="text/css">
.st1{font-family:Arial;font-size:12pt;color:#000000;}
.list-marker1 li:before {
content: "\F02D\9";
width: 30px;
font-family: Symbol;
font-size: 11pt;
}
.st2{font-family:Calibri;font-size:11pt;color:#000000;}
</style>
</head>
<body>
<div>
<p style="margin:0pt 0pt 0pt 0pt;"><span class="st1"> </span></p>
<ul style="list-style-type:none; list-style-image:none; list-style- position:outside; margin-left:0px; padding-left:0px; text-indent:0px; margin-top:0px; margin-bottom:0px;" class="list-marker1">
<li value="1" style="margin-left:36pt;text-indent:-18pt;"><span class="st2">Dishwasher soap container consumption is adjusted</span></li></ul>
<ul style="list-style-type:none; list-style-image:none; list-style-position:outside; margin-left:0px; padding-left:0px; text-indent:0px; margin-top:0px; margin-bottom:0px;" class="list-marker1">
<li value="2" style="margin-left:36pt;text-indent:-18pt;"><span class="st2">Power UP ballast water treatmant unit, adjusted what necessary. GPS signal error still pending</span></li></ul>
<ul style="list-style-type:none; list-style-image:none; list-style-position:outside; margin-left:0px; padding-left:0px; text-indent:0px; margin-top:0px; margin-bottom:0px;" class="list-marker1">
<li value="3" style="margin-left:36pt;text-indent:-18pt;"><span class="st2">Installed new insect killer in galley</span></li></ul>
<ul style="list-style-type:none; list-style-image:none; list-style-position:outside; margin-left:0px; padding-left:0px; text-indent:0px; margin-top:0px; margin-bottom:0px;" class="list-marker1">
<li value="4" style="margin-left:36pt;text-indent:-18pt;"><span class="st2">Adjust securing and highest ladder position after its tilted to low trunnion position</span></li></ul>
<ul style="list-style-type:none; list-style-image:none; list-style-position:outside; margin-left:0px; padding-left:0px; text-indent:0px; margin-top:0px; margin-bottom:0px;" class="list-marker1">
<li value="5" style="margin-left:36pt;text-indent:-18pt;"><span class="st2">SW spooling device test is done and no isses </span></li></ul>
<ul style="list-style-type:none; list-style-image:none; list-style-position:outside; margin-left:0px; padding-left:0px; text-indent:0px; margin-top:0px; margin-bottom:0px;" class="list-marker1">
<li value="6" style="margin-left:36pt;text-indent:-18pt;"><span class="st2">Sewage unit dosage pump; make permanent installation + drawing update</span></li></ul>
<ul style="list-style-type:none; list-style-image:none; list-style-position:outside; margin-left:0px; padding-left:0px; text-indent:0px; margin-top:0px; margin-bottom:0px;" class="list-marker1">
<li value="7" style="margin-left:36pt;text-indent:-18pt;"><span class="st2">Intervention on DN203: installed tracker box on ICT request</span></li></ul>
<ul style="list-style-type:none; list-style-image:none; list-style-position:outside; margin-left:0px; padding-left:0px; text-indent:0px; margin-top:0px; margin-bottom:0px;" class="list-marker1">
<li value="8" style="margin-left:36pt;text-indent:-18pt;"><span class="st2">Installed tracker box on ICT request </span></li></ul>
<ul style="list-style-type:none; list-style-image:none; list-style-position:outside; margin-left:0px; padding-left:0px; text-indent:0px; margin-top:0px; margin-bottom:0px;" class="list-marker1">
<li value="9" style="margin-left:36pt;text-indent:-18pt;"><span class="st2">Regular greasing emotors according ship specific grease list</span></li></ul>
<ul style="list-style-type:none; list-style-image:none; list-style-position:outside; margin-left:0px; padding-left:0px; text-indent:0px; margin-top:0px; margin-bottom:0px;" class="list-marker1">
<li value="10" style="margin-left:36pt;text-indent:-18pt;"><span class="st2">Regular maintenance of portable tools</span></li></ul>
<ul style="list-style-type:none; list-style-image:none; list-style-position:outside; margin-left:0px; padding-left:0px; text-indent:0px; margin-top:0px; margin-bottom:0px;" class="list-marker1">
<li value="11" style="margin-left:36pt;text-indent:-18pt;"><span class="st2">Intervention on DN203 due to problem with SB M/E</span></li></ul>
<p style="margin:0pt 0pt 0pt 0pt;"><span class="st2"> </span></p>
<p style="margin:0pt 0pt 0pt 0pt;"><span class="st1"> </span></p>
</div>
</body>
</html>
当我将此文件另存为 HTML 文件并在浏览器中打开它时,您会得到以下结果(正确):Correct result (website)
但是,当我将它添加到 PDF 单元格时,我得到以下结果:Bad result (PDF)
如您所见,用于项目符号的破折号变成了 9。
我用来将 HTML 代码添加到 PDF 文件的代码如下:
private void AddCellToTable(table table, string HTMLContent) {
Cell newCell = new Cell();
foreach (var element in HtmlConverter.ConvertToElements(HTMLContent))
{
var test = (IBlockElement)element;
newCell.Add(test);
}
table.AddCell(newCell);
}
此代码类似于 https://itextpdf.com/en/resources/books/itext-7-converting-html-pdf-pdfhtml/chapter-1-hello-html-pdf 建议的代码(他们使用 java 而不是 C#)。
我想将项目符号显示为破折号,而不是这些 9。任何帮助或建议将不胜感激。
提前谢谢你。
最佳答案
首先,问题与布局(表格/单元格/等处理)无关 - 它仅与字体以及 iText 如何处理它们有关。
其次,问题在于 iText 使用的 PDF 标准符号字体与浏览器使用的字体不同。
第三,iText 没有正确处理 "\F02D\9"
(尤其是 "\9"部分)。
您可以做些什么来改进生成的 pdf?不要使用标准 PDF 的 Symbol 字体 - 请改用您自己的 Symbol 字体。
怎么做?
让我向您介绍FontProvider
类。
FontProvider
is responsible to handle the fonts which may be used while processing an html file. Its instance could be passed as a parameter ofConverterProperties
, otherwise it'd be created by iText. By default iText adds toFontProvider
all standard pdf fonts (FontProvider#addStandardPdfFonts
) and some free sans fonts (DefaultFontProvider#SHIPPED_FONT_NAMES
).
您想使用自己的 Symbol 字体:这意味着您应该阻止 iText 在转换过程中考虑标准 Symbol 字体。为此,请创建一个 DefaultFontProvider
实例,并将第一个构造函数的参数作为 false
传递。(!) 在 99% 的情况下,您希望在转换过程中考虑一些其他标准字体。所以请手动添加它们,如下所示:
provider.addFont(StandardFonts.TIMES_ROMAN);
// some other fonts to be added
现在将您自己的 Symbol
字体添加到此 FontProvider
实例,方法与我在上面的 Times 中所做的相同:
provider.addFont("C:\\Windows\\Fonts\\symbol.ttf", PdfEncodings.IDENTITY_H);
在此处使用 IDENTITY_H
很重要,因为在 Symbol 字体中“-”的 unicode 值是“F02D”。
第二个问题来了:默认情况下,iText 没有正确处理“\9”。至于这个,我不知道有什么直接的解决方案。可能,从您的 html 中删除它是最好的。
关于c# - 使用 iText7 创建新 PDF 时如何将 HTML 放入表格单元格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56543269/
iText 文档指出它只包含特定的字体子集,但从未说明它们是什么。有没有人知道 iText 中默认包含哪些字体? (我在网上搜索过,在任何地方都找不到这个字体列表!) 最佳答案 它可能指的是PDF S
我使用固定列宽创建了下表,如下所示, Table headerTable = new Table(new float[]{5,5,5}); headerTable.setWidthPercent(
我正在尝试使用 iText 缩放图像(在新的 PDF 文档上)以使其填充页面宽度而不拉伸(stretch),这样它可能需要几页。 我找到了很多解决方案,但它们都非常复杂,而且我真的不喜欢那样编码。到目
我正在使用 Flying Saucer/iText 生成报告。现在报告有一个条件,如果特定条件发生,报告应该移动到 pdf 的下一页,并在 PDF 上添加数据等等。 问候帕万 最佳答案 您必须使用 c
我正在使用 Flying Saucer/iText 生成报告。现在报告有一个条件,如果特定条件发生,报告应该移动到 pdf 的下一页,并在 PDF 上添加数据等等。 问候帕万 最佳答案 您必须使用 c
如何使用 iText 找到文档中的行的位置? 假设我有一个 PDF 文档中的表格,并且想要阅读其中的内容;我想找到细胞的确切位置。为了做到这一点,我想我可能会找到线条的交点。 最佳答案 我认为您使用
请找到下面的代码。 public class MakingFieldReadOnly implements PdfPCellEvent { /** The resulting PDF. */
在 iText 5 中有一个名为 getVerticalPosition() 的方法,它给出了下一个写入对象在页面上的位置。作为回答这个问题 How to find out the current c
抱歉,如果有类似我的帖子,但我是这个论坛的新手,我还没有找到它。 我有动态调整 TextField 大小取决于文本大小的问题。我填写现有的 PDF - 在 AcroForm 中填写字段: form.s
我正在使用 itext 生成 pdf。因此,当页面内容超出时,它会自动创建一个新页面。我想知道它是否创建了一个新页面。如果是,我想在页面顶部添加一些图像。 List paylist =new List
我的 有问题固定 表格左侧和右侧的边距。 我想删除该边距并使用没有边距或填充的所有工作表。我该怎么办? 我刚刚试过这个,但对我不起作用: cell.setPaddingLeft(0); cell.se
我有 2 行,我想对齐(证明)它们。 我有这个代码: Paragraph p=new Paragraph(ANC,fontFootData); p.setLeading(1, 1);
我有这样的场景。 我有一个生成 PDF 的应用程序,需要对其进行签名。 我们没有用于签署文档的证书,因为它们位于 HSM 中,而我们使用证书的唯一方法是使用 Web 服务。 此网络服务提供两个选项,发
我需要实现一个看起来像图片中的表格,列之间有空间。我试过: cell.setPaddingLeft(10); cell.setMarginLeft(10); extractio
我需要实现一个看起来像图片中的表格,列之间有空间。我试过: cell.setPaddingLeft(10); cell.setMarginLeft(10); extractio
我需要使用 Java 的 iText 库创建一个 PDF 文档。我还需要包括一些复选框,这些复选框根据某些类变量的值打开/关闭。我找到了一些关于交互式表单的示例,但我不需要这种复杂程度:只需将一些复选
我正在开发一个系统,我必须在其中将一些图像添加到现有的 PDF 文档中。 这适用于 iText 5.1.3,但由于某种原因,在包含扫描图像的 PDF 中,它不会添加任何图像。 这是 PDF Docum
我们正在研究信息提取,我们想使用iText。 我们正在探索 iText。根据我们查阅过的文献,iText 是最好的工具。是否可以从 iText 中每行的 pdf 中提取文本?我在与我的相关的 stac
我已经创建了一个带有一些文本字段的 pdf 文档。我可以使用 Adobe 阅读器填充这些文本字段并将这些值保存在该文件中。 我的问题是,我可以使用 iText 以编程方式执行此操作吗?如果可能,请
我正在使用 iText 5 表创建标签(如 Avery 标签)。标签元素的定位需要一些非常严格的公差,以便适合标签上的所有内容。我的问题是标签上有多个区域为 PdfPCells。我需要将文本放入这些区
我是一名优秀的程序员,十分优秀!