2012-07-11 138 views
0

我想通过使用Apache POI(对于doc来将它们转换为单个字符串来阅读和处理.doc,.docx,.pdf文件,docx)和Apache PDFBox(用于pdf)库。
它工作正常,直到它遇到文本框。 如果格式是这样的:

段落1个
文本框1
第2段
文本框2
第3段

然后输出应为:
第1文本框1第2段文本框2第3段
但我得到的输出为:
第1款第2款第3款文本框1个文本框2

似乎在最后,而不是在这个地方要添加文本框的地方翔即,在段落之间。这个问题在doc和pdf文件的情况下都是如此。这意味着图书馆,POI和PDFBox都会带来同样的问题。

阅读PDF文件中的代码为:
在使用Apache POI和Apache PDF阅读器阅读文档,pdf文件中的错位文本框

 

    void pdf(String file) throws IOException { 
     //Initialise file 
     File myFile = new File(file); 
     PDDocument pdDoc = null; 
     try { 
      //Load PDF 
      pdDoc = PDDocument.load(myFile); 
      //Create extractor 
      PDFTextStripper pdf = new PDFTextStripper(); 
      //Extract text 
      output = pdf.getText(pdDoc); 
     } 
     finally { 
      if(pdDoc != null) 
       //Close document 
       pdDoc.close(); 
     } 
    } 

并为doc文件的代码为:

 

    void doc(String file) throws FileNotFoundException, IOException { 
     File myFile = null; 
     WordExtractor extractor = null ; 
     //initialise file 
     myFile = new File(file); 
     //create file input stream 
     FileInputStream fis=new FileInputStream(myFile.getAbsolutePath()); 
     //open document 
     HWPFDocument document=new HWPFDocument(fis); 
     //create extractor 
     extractor = new WordExtractor(document); 
     //get text from document 
     output = extractor.getText(); 
    } 

+0

您可能会发现文本框被锚定到一个段落,并且您无意中移动/丢失锚点。如果您可以让iText向您提供有关文本框锚点的信息,那么也许您可以保留或重置它。 – 2012-07-30 04:28:31

+0

你有直接使用底层库的原因吗?使用[Apache Tika](http://tika.apache.org)可能会简单得多,它包装库并生成一致的文本 – Gagravarr 2015-01-05 13:14:25

回答

0

对于PDFBox的做到这一点: pdf.setSortByPosition(真);