0

下面是使用Java编写PDF的代码。

代码

public class PDFTest {    

    public static void main(String args[]) {
        Document document = new Document(PageSize.A4, 50, 50, 50, 50);       

        try {
            File file = new File("C://test//itext-test.pdf");
            FileOutputStream fileout = new FileOutputStream(file);            
            PdfWriter.getInstance(document, fileout);
            document.addAuthor("Me");
            document.addTitle("My iText Test");
            document.open();
            Chunk chunk = new Chunk("iText Test");
            Paragraph paragraph = new Paragraph();
            String test = "și";
            String test1 = "şi";
            if (test.equalsIgnoreCase(test1)) {
               // System.out.println("equal ignore case true");
                paragraph.add(test + " New Font equal with Old Font");
            } else {
              //  System.out.println("equal ignore case X true");
                paragraph.add(test1 + " New Font Not equal with Old Font");
            }
            paragraph.setAlignment(Element.ALIGN_CENTER);
            document.add(paragraph);          
            document.close();
        } catch (Exception e) {
            e.printStackTrace();
        } 
    }
}

当我使用罗马尼亚语进行测试时,我发现"ș"创建的 PDF 中缺少该语言。文档如下所示: 错误

非常感谢有关此问题的任何建议或参考链接。

**EDITED**
我使用了下面的 unicode 示例,输出仍然相同。"ș" 仍然失踪。

Code

static String RESULT = "C://test/itext-unicode4.pdf";
    static String FONT = "C://Users//PenangIT//Desktop//Arial Unicode.ttf";
    public static void main(String args[])
    {
        try
        {
            Document doc = new Document();
            PdfWriter.getInstance(doc, new FileOutputStream(RESULT));
            doc.open();
            BaseFont bf;
            bf = BaseFont.createFont(FONT,BaseFont.IDENTITY_H,BaseFont.EMBEDDED);
            doc.add(new Paragraph("Font : "+bf.getPostscriptFontName()+" with encoding: "+bf.getEncoding()));
            doc.add(new Paragraph(" TESTING "));
            doc.add(new Paragraph(" TESTING 1 și "));
            doc.add(new Paragraph(" TESTING 2 şi "));
            doc.add(Chunk.NEWLINE);
            doc.close();

        }
        catch(Exception ex)
        {            
        }

输出看起来像这样
在此处输入图像描述
编码也一样。"ș" 仍然失踪。

4

1 回答 1

1

请查看此 PDF:encoding_example.pdf (*)

它包含默认字体 Helvetica 中不存在的各种字符(这是您使用的默认字体,因为您没有定义任何其他字体)。

EncodingExample源代码中,我们使用具有特定编码的 arialbd.ttf,从而在 PDF 中使用简单的字体。在UnicodeExample源代码中,我们使用 IDENTITY_H 作为编码,导致在 PDF 中使用复合字体。

我已经修改了您的代码,因为我看到您不理解我的回答:

BaseFont bf = BaseFont.createFont(FONT,BaseFont.IDENTITY_H,BaseFont.EMBEDDED);
doc.add(new Paragraph(" TESTING 1 și ", new Font(bf, 12)));
doc.add(new Paragraph(" TESTING 2 \u015Fi ", new Font(bf, 12)));

你看得到差别吗?在您的代码中,您创建bf了 ,但您没有在任何地方使用该对象。

(* )注意:pdf.js 无法解释某些字形,因为 pdf.js 不支持具有特殊编码的简单字体;这些 glypgh 在 Adob​​e Reader 和 Chrome PDF 查看器中正确显示。如果您想安全,请使用复合字体,因为 pdf.js 可以正确呈现这些字形:unicode_example.pdf

于 2013-09-05T08:14:32.337 回答