如何从内容流中解码数据
How to decode data from Content Stream
我使用如下代码创建了一个 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.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
字符串并得到 שדג
?
这个答案写在评论@usr2564301 中。谢谢您的帮助!
您得到的数字不是 Unicode 字符,而是字体索引。 (检查字体是如何嵌入的!)PDF 中的文本并不特别关心 Unicode——它可能是也可能不是。优秀的 PDF 创建者添加 /ToUnicode table 来帮助解码,但它是可选的。
我使用如下代码创建了一个 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.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
字符串并得到 שדג
?
这个答案写在评论@usr2564301 中。谢谢您的帮助! 您得到的数字不是 Unicode 字符,而是字体索引。 (检查字体是如何嵌入的!)PDF 中的文本并不特别关心 Unicode——它可能是也可能不是。优秀的 PDF 创建者添加 /ToUnicode table 来帮助解码,但它是可选的。