pdfbox 2.0.2在从先前阅读的文档(https://www.dropbox.com/s/ttxiv0dq3abh5kj/Test.pdf?dl=0)的元素中编写pdf文档时出现问题。一切正常,除非当我调用showTextPDPageContentStream时,我以前曾用它设置字体out.setFont(textState.getFont(), textState.getFontSize())(请参阅信息日志),并且字体是ComicSansMS或ArialBlack。textState是先前读取文档的状态(从其克隆)。用Helvetica或Times-Roman编写文本效果很好。
INFORMATION: set font PDTrueTypeFont RXNQOL+ComicSansMS,Bold/18.0 embedded
SEVERE: error writing <w>U+0077 is not available in this font's encoding: built-in (TTF)
Run Code Online (Sandbox Code Playgroud)
我想这个问题可能是由于字体名称中缺少连字符或空格引起的,但不知道如何解决此问题。
这是完整的代码
INFORMATION: set font PDTrueTypeFont RXNQOL+ComicSansMS,Bold/18.0 embedded
SEVERE: error writing <w>U+0077 is not available in this font's encoding: built-in (TTF)
Run Code Online (Sandbox Code Playgroud)
有什么建议么?
谢谢,于尔根
tl;dr: 该字体不支持编码。
问题的原因是您的 Comic Sans 子集字体确实有一个“post”(postscript)表,但其 glyphNames 表为空。即您的字体没有字形名称。对于AZ,az,名字就像这些字符;对于“(”,字形名称为“parenleft”。由于缺少这些名称,PDFBox 根据字形 ID 创建伪名称,例如 PDTrueType.readEncodingFromFont( 的第二部分中的“w”为“90”(而不是“w”)) )。
但是,在编码时,PDFBox 使用 Adobe Glyphlist,因为该字体没有编码条目。如果您使用 PDFDebugger 查看其他字体,例如 R18,您会发现“Encoding: WinAnsiEncoding”:
您显然正在做的是创建一个仅包含文本的新页面。另一种方法是分析内容流并简单地删除所有绘制与文本不同的内容的标记。首先,查看源代码下载中的RemoveAllText示例,然后下载PDF 32000规范,并查看“操作员摘要”部分,并小心删除的内容。例如,“Do”既用于绘制图像,又用于绘制 XObject 表单,它们也是内容流。
请参阅此处: 如何从 PDF 文件中删除所有图像/绘图并仅在 Java 中保留文本?
两种解决方案都是错误的,第一个解决方案只是从脚下拉出所有图像,第二个解决方案是一个好的开始,但没有注意检查参数是否是图像。
| 归档时间: |
|
| 查看次数: |
5345 次 |
| 最近记录: |