java - 使用itext将文本文件转换为pdf时设置编码

标签 java itext

我正在努力让 itext 正确输出我的 UTF-8 编码文本,事实上输入文件包含 ° 和拉丁字母 (é,è,à...) 等符号。

但我没有找到解决方案这是我正在使用的代码:

BufferedReader input = null;
Document output = null;
System.out.println("Convert text file to pdf");
System.out.println("input  : " + args[0]);
System.out.println("output : " + args[1]);
try {
  // text file to convert to pdf as args[0]
  input = 
    new BufferedReader (new FileReader(args[0]));
  // letter 8.5x11
  //    see com.lowagie.text.PageSize for a complete list of page-size constants.
  output = new Document(PageSize.LETTER, 40, 40, 40, 40);
  // pdf file as args[1]
  PdfWriter.getInstance(output, new FileOutputStream (args[1]));

  output.open();
  output.addAuthor("RealHowTo");
  output.addSubject(args[0]);
  output.addTitle(args[0]);

  BaseFont courier = BaseFont.createFont(BaseFont.COURIER, BaseFont.CP1252, BaseFont.EMBEDDED);
  Font font = new Font(courier, 12, Font.NORMAL);
  Chunk chunk = new Chunk("",font);
  output.add(chunk); 

  String line = "";
  while(null != (line = input.readLine())) {
    System.out.println(line);
    Paragraph p = new Paragraph(line);
    p.setAlignment(Element.ALIGN_JUSTIFIED);
    output.add(p);
  }
  System.out.println("Done.");
  output.close();
  input.close();
  System.exit(0);
}
catch (Exception e) {
  e.printStackTrace();
  System.exit(1);
}
}

任何想法将不胜感激。

最佳答案

当我查看您的代码时,我发现了很多奇怪的地方。

  1. 您说您需要 UTF-8,但是您使用 BaseFont.CP1252 而不是 BaseFont.IDENTITY_H 创建了一个 BaseFont 对象(这是使用 Unicode 时所需的“编码”)。
  2. 您使用标准的 Type 1 字体 Courier,这是一种不知道如何呈现 é,è,à... 的字体,也是一种从不嵌入的字体。如文档所述,在这种情况下将忽略 BaseFont.EMBEDDED 参数!
  3. 不要将此字体用于具有实际内容的对象。实际内容放入使用默认字体“Helvetica”创建的 Paragraph 中,该字体不知道如何呈现 é,è,à...

要解决这个问题,您需要使用适当的字体创建 Paragraph。这不是标准的 type 1 字体,而是类似于 courier.ttf 的字体。您还需要使用适当的编码:BaseFont.IDENTITY_H

关于java - 使用itext将文本文件转换为pdf时设置编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21254628/

相关文章:

java - 使用 a-z 输入进行循环

2个应用程序之间的Java通信

java - 在 Apache Spark SQL 中对多行进行操作

java - 如何使用 JPA 持久保存到 mysqlDB 后获取自动生成的 ID

java - PDFBox 或 IText 文档?

java - iText PDF 连接失败 - InvalidPDFException

pdf - 如何在 iText 中更改呈现的 PDF 文档中的字体大小?

java - 如何从适配器回收器 View 传递/获取值复选框到另一个 Activity

java - 无法提取 NotoSansCJKsc-adobe reader 中的常规字体错误?

java - 如何在 Java 中自动填写 PDF 表单