java - 特殊字符未正确从 pdf 转换为文本

标签 java pdfbox apache-tika pdf-conversion pdftotext

我有一组 pdf 文件,其中包含中欧字符,例如 č、Ď、Š 等。我想将它们转换为文本,我已经通过 Apache Tika 尝试了 pdftotextPDFBox 但其中一些总是无法正确转换。

奇怪的是,同一文本中的相同字符在某些地方转换正确,而在其他地方转换错误!一个例子是这个 pdf

对于 pdftotext,我使用以下选项:

pdftotext -nopgbrk -eol dos -enc UTF-8 070612.pdf

我的 Tika 代码如下所示:

          String newname = f.getCanonicalPath().replace(".pdf", ".txt");
          OutputStreamWriter print = new OutputStreamWriter (new FileOutputStream(newname), Charset.forName("UTF-16"));
          String    fileString = "path\to\myfiles\"
          try{

              is = new FileInputStream(f);

              ContentHandler contenthandler = new BodyContentHandler(10*1024*1024);
              Metadata metadata = new Metadata();
              PDFParser pdfparser = new PDFParser();

              pdfparser.parse(is, contenthandler, metadata, new ParseContext());
              String outputString = contenthandler.toString();

              outputString = outputString.replace("\n", "\r\n");
              System.err.println("Writing now file "+newname);
              print.write(outputString);

          }catch (Exception e) {
              e.printStackTrace();
            }
            finally {
               if (is != null) is.close();
               print.close();
            }

编辑:忘记提及,我在从 Acrobat Reader XI 转换为文本时也遇到了同样的问题。

最佳答案

除此之外,这段代码将使用平台默认编码:

PrintWriter print = new PrintWriter(newname);
print.print(outputString);
print.close();

我建议您使用 OutputStreamWriter 而不是包装 FileOutputStream,并指定 UTF-8 作为编码(因为它可以对所有 Unicode 进行编码,并且通常得到很好的支持) .

您还应该在finally block 中关闭编写器,并且我可能会将“读取”部分与“写入”部分分开。 (我也会避免捕获Exception,但是深入了解异常处理的细节有点超出了这个答案的范围。)

关于java - 特殊字符未正确从 pdf 转换为文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17272122/

相关文章:

java - 检查文档是否受密码保护

java - ActionBar 问题 : NPE

java - 如何在java中编辑PDF属性?

java - 根据文件名检测内容类型

java - 从 java 源创建 .jar 不起作用

java - 如何使用 PDFBOX api 提取文本是粗体还是斜体?

java - Apache Tika 检测返回不一致的结果

java - 在 Ant 中禁用 web.xml 验证

java - 使用 DateTime 描述生日

java - 通过按 JButton 运行外部 jar 文件