如何对内容流的数据进行解码

问题描述 投票:0回答:1

我创建了一个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,我得到了以下数据。enter image description here但我得到了一个意外的结果 Contents:stream 部特别 Tj 标签。我希望有如下的字符串 05E905D305D2 但我得到了 02b902a302a2. 我试着转换这个 hex 字符串转为正常字符串,我得到了以下结果。ʹʣʢ 但我希望那个字符串 שדג. 我做错了什么?热转换这个 02b902a302a2 弦而得 שדג?

pdf itext
1个回答
1
投票

这个答案写在评论里@usr2564301。谢谢你的帮助!你得到的数字不是Unicode字符,而是字体索引。(检查字体是如何嵌入的!)PDF中的文本并不特别关心Unicode--它可能是也可能不是这个。好的PDF创建者会添加一个ToUnicode表来帮助解码,但这是可选的。

© www.soinside.com 2019 - 2024. All rights reserved.