繁体   English   中英

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

[英]Set encoding when converting text file to pdf using 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 (这是你使用Unicode时需要的“编码”)创建一个BaseFont对象。
  2. 您使用标准的Type 1字体Courier,这是一种不知道如何渲染é,è,à...以及从未嵌入的字体的字体。 如上所述,在这种情况下, BaseFont.EMBEDDED参数将被忽略!
  3. 您不要将此字体与具有实际内容的对象一起使用。 将实际内容放入使用默认字体“Helvetica”创建的Paragraph中,该字体不知道如何渲染é,è,à...

要解决此问题,您需要使用适当的字体创建Paragraph 不是标准的1型字体,而是像courier.ttf 您还需要使用适当的编码: BaseFont.IDENTITY_H

读者和编写者都应该设置为使用UTF-8字符集编码来正确读/写UTF-8字符。 例如,

input = new BufferedReader(new InputStreamReader(args[0], "UTF-8"));

@AmiraGL,

Bruno Lowagie提出的解决方案纠正了这一点( p:dataExporter PDF导出不显示欧元(€)符号 )我的问题。 也许这也解决了你的问题。

要解决此问题,您需要使用适当的字体创建段落。 这不是标准的1型字体,而是像courier.ttf。 您还需要使用适当的编码:BaseFont.IDENTITY_H。 -Bruno Lowagie

BaseFont courier = BaseFont.createFont(BaseFont.COURIER, BaseFont.CP1252, BaseFont.EMBEDDED);
Font cellFont = new Font(courier, 12, Font.NORMAL);

解决方案: https//stackoverflow.com/a/21259711/3557631

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM