以下是使用 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)
{
}
输出看起来像这样
编码也一样。 "ș"
仍然缺失。
答案 0 :(得分: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在Adobe Reader和Chrome PDF查看器中正确显示。如果您想要安全,请使用复合字体,因为pdf.js可以正确呈现这些字形:unicode_example.pdf