【发布时间】:2009-11-10 09:45:02
【问题描述】:
当我打开 PDF 文件并将内容写入文本文件时,文本文件中的内容会混乱。我认为这是因为编码。据我了解,JVM 将默认字符集设置为Cp1252(因为我在 Windows XP 上运行)。我更改了默认字符集但没有结果 (System.setProperty("file.encoding", "ISO-8859-1");)
- 我尝试使用 IText,但生成的内容缺少一些带有变音符号的字母
有什么想法吗?
【问题讨论】:
当我打开 PDF 文件并将内容写入文本文件时,文本文件中的内容会混乱。我认为这是因为编码。据我了解,JVM 将默认字符集设置为Cp1252(因为我在 Windows XP 上运行)。我更改了默认字符集但没有结果 (System.setProperty("file.encoding", "ISO-8859-1");)
有什么想法吗?
【问题讨论】:
iText 无法正确读取所有字母的原因可能是字体使用的编码。你可以像这样声明字体:
BaseFont bf = BaseFont.createFont(BaseFont.HELVETICA, BaseFont.CP1252, BaseFont.EMBEDDED);
BaseFont.CP1252 是使用的编码。请注意,某些字体不支持所有类型的编码。
【讨论】:
你可以试试JavaPDF。它有一个 API 供您完成这项工作。您可以从 PDFReader 类调用方法extractTextFromPage(int pageIndex)。
【讨论】:
使用 iText 辅助类 PdfTextExtractor 应该可以正常工作。只需在将文件写入磁盘时检查您是否使用了正确的编码:
OutputStreamWriter out = new OutputStreamWriter( new FileOutputStream(file),"ISO-8859-1") );
【讨论】:
iText 是一个从头开始创建 pdf 的 API,但是为了阅读和编辑现有文件,您可以查看以下链接 http://www.lowagie.com/iText/
【讨论】:
您必须使用专门的软件包。我使用的两个是 pdftotext (http://en.wikipedia.org/wiki/Pdftotext) 和 PDFBox (http://incubator.apache.org/pdfbox/)。即使有一个包,你也不能总是保证成功,因为一些 PDF 编写工具质量很差,生成的 PDF 也很差。
【讨论】:
我们的PDFTextStream 库提供对变音符号以及 Unicode 标准中定义的所有字符集(包括中文、日文和韩文字符,水平和垂直书写模式)的全面支持。您可能会发现它可以正确提取其他工具无法正确提取的那些变音符号。
在某些情况下,提取到文本的字符与由 Acrobat 等 PDF 阅读器显示时显示的字符不同 - 最常见的情况是使用基于图像的字体(显然不会直接转换为文本,并且需要 OCR 过程才能获得正确的重音字符)。
【讨论】:
PDF 是二进制文件,因此您不能将其作为文本文件读取。您将不得不寻找一些第三方库来阅读 PDF 内容。
【讨论】: