Pdf 如何从内容流中解码数据
我使用如下代码创建了一个pdf文档:Pdf 如何从内容流中解码数据,pdf,itext,Pdf,Itext,我使用如下代码创建了一个pdf文档: // The text parameter equels 'שדג' it is Hebrew. unicode equivalent is '\u05E9\u05D3\u05D2' private static void createSimplePdf(String filename, String text) throws Exception { final String path = RunItextApp.class.getReso
// The text parameter equels 'שדג' it is Hebrew. unicode equivalent is '\u05E9\u05D3\u05D2'
private static void createSimplePdf(String filename, String text) throws Exception {
final String path = RunItextApp.class.getResource("/Arial.ttf").getPath();
final PdfFont font = PdfFontFactory.createFont(path, PdfEncodings.IDENTITY_H);
Style hebrewStyle = new Style()
.setBaseDirection(BaseDirection.RIGHT_TO_LEFT)
.setFontSize(14)
.setFont(font);
final PdfWriter pdfWriter = new PdfWriter(filename);
final PdfDocument pdfDocument = new PdfDocument(pdfWriter);
final Document pdf = new Document(pdfDocument);
pdf.add(
new Paragraph(text)
.setFontScript(Character.UnicodeScript.HEBREW)
.addStyle(hebrewStyle)
);
pdf.close();
System.out.println("The document '" + filename + "' has been created.");
}
之后,我尝试使用pdfbox
util打开此文档,得到了以下数据:但是我在
Contents:stream
部分得到了一个意想不到的结果,尤其是Tj
标记。我希望字符串如下所示05E905D305D2
,但我得到了02b902a302a2
。我试图将这个hex
字符串转换为普通字符串,结果如下:
我错了什么?转换此02b902a302a2
字符串并获取。谢谢你的帮助!
您得到的数字不是Unicode字符,而是字体索引。(检查字体是如何嵌入的!)PDF中的文本并不特别关注Unicode,可能是,也可能不是。好的PDF创建者会添加一个/ToUnicode表来帮助解码,但这是可选的。您得到的数字不是Unicode字符,而是字体索引。(检查字体是如何嵌入的!)PDF中的文本并不特别关注Unicode,可能是,也可能不是。优秀的PDF创建者添加了一个/ToUnicode
表来帮助解码,但这是可选的。为什么要使用PDFBox标签?@usr2564301感谢您的帮助!我找到了/ToUnicode
部分。@tilmahausherr,因为他们使用的是Pdfbox的PDF语法浏览器(我不知道正式名称)。也许他们不知道iText还有一个名为RUPS的PDF语法浏览器:仅从屏幕截图来看,基本功能是一样的,但RUPS有更多的功能。但我有偏见。:)很高兴提及usr2564301最初在对您的问题的评论中写道。@mkl我同意您的看法。我试图找到如何添加评论作为答案,但找不到。只有版主才能在评论中转换答案,反之亦然。你可以简单地要求另一条评论中的人重新发布评论作为答案。或者你可以创建一个答案并引用作者参考的原始内容,就像你现在所做的一样。我的评论只指出了一个可能的原因(和解决方案)。如果您添加了更改代码的确切方式,这将是一个更好的答案。