特殊字符无法从pdf正确转换为文本

时间:2013-06-24 09:27:07

标签: 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转换为文本时遇到同样的问题。

1 个答案:

答案 0 :(得分:2)

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

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

我建议您使用OutputStreamWriter代替FileOutputStream,并指定UTF-8作为编码(因为它可以编码所有Unicode,并且通常得到很好的支持)。

您还应该在finally块中关闭作者,我可能会分开"阅读"部分来自"写作"部分。 (我也避免捕获Exception,但是进入异常处理的细节有点超出了这个答案。)