pdfbox:。。。在此字体中不可用';s编码

pdfbox:。。。在此字体中不可用';s编码,pdf,fonts,pdfbox,Pdf,Fonts,Pdfbox,我在使用pdfbox 2.0.2从以前阅读的文档()的元素编写pdf文档时遇到问题。一切正常,除了在PDPageContentStream上调用showText时,我以前使用out.setFont(textState.getFont(),textState.getFontSize())(请参阅信息日志)设置字体,并且字体为ComicSansMS或ArialBlacktextState是以前读取的文档的状态(克隆自)。用Helvetica或Times Roman书写文本效果很好 INFORMATI

我在使用pdfbox 2.0.2从以前阅读的文档()的元素编写pdf文档时遇到问题。一切正常,除了在PDPageContentStream上调用
showText
时,我以前使用
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)
有什么建议吗

谢谢,
尤尔根;那个字体不支持编码

问题的原因是Comic Sans子集字体确实有一个“post”(postscript)表,但其glyphNames表为空。即,您的字体没有字形名称。对于A-Z,A-Z的名称类似于这些字符;对于“(”字形名称为“parenleft”。由于缺少这些名称,PDFBox会根据字形ID为“90”(而不是“w”)为PDTrueType.readEncodingFromFont()第二部分中的“w”创建伪名称

但是,在编码时,PDFBox使用Adobe Glyphlist,因为该字体没有编码条目。如果您使用PDFDebugger查看其他字体,例如R18,您会发现“encoding:WinAnsienceODing”:

显然,您正在做的是创建一个只包含文本的新页面。另一种方法是分析内容流并简单地删除所有绘制文本以外内容的标记。首先,请查看源代码下载中的RemoveAllText示例,下载PDF 32000规范,然后查看“运算符摘要”部分,请注意删除的内容。例如,“Do”用于绘制图像和XObject表单,它们也是内容流

请看这里:


两种解决方案都是错误的,第一种解决方案只是从脚底下提取所有图像,第二种解决方案是一个良好的开端,但不注意检查参数是否为图像。

请显示关键代码并链接到示例源PDF以允许再现您的问题。1.不,我不是这样做的;这只是一个简单的问题所以你说没有办法产生一个(新的)PDFBox使用此字体的pdf页面-即使源文档中提供/嵌入了此字体,至少用于显示包含字符的字形?3.如果是,您能否告诉我们一种编程方式,以检查源文档中使用的字体是否可用于编码和/或(重新)加载并使用此类字体(Arial Black和Comis Sans MS至少在大多数Windows安装中都可用)?2.不容易。我考虑过更改PDFBox,甚至尝试过一点,但这演变成了比想象多得多的工作。即使这样,在某些情况下也会失败,例如,对于连字,PDF中的一个代码意味着多个unicode。而且你不能确定是否存在“unicode”有些PDF文件根本没有。另一种解决方案是使用原始命令,但这也会变得棘手,有些代码有2个字节而不是1个。3.您可以尝试调用字体上的getEncoding()(如果该类型可用),然后检查contains(代码)或getName(int代码)。您可以将truetype字体与
PDType0Font.load()一起使用
但当然,这只有在unicode可用的情况下(在您的解决方案中)才会起作用。非常感谢Tilman!除了您的建议之外,我还查看了org.apache.fontbox,并对如何进行有了很好的了解。干杯,Juergen。我在哪里可以找到
PDFDebugger
工具?