【问题标题】:Mispositioned textboxes in Reading doc, pdf files using Apache POI and Apache PDFBox使用 Apache POI 和 Apache PDFBox 阅读文档、pdf 文件时出现错误定位的文本框
【发布时间】:2012-07-10 20:39:42
【问题描述】:
我正在尝试读取和处理 Java 中的 .doc、.docx、.pdf 文件,方法是使用 Apache POI(用于 doc、docx)和 Apache PDFBox 将它们转换为单个字符串(用于 pdf)库。
在遇到文本框之前它工作正常。
如果格式如下:
第 1 段
文本框 1
第 2 段
文本框 2
第 3 段
那么输出应该是:
第 1 段文本框 1 第 2 段文本框 2 第 3 段
但我得到的输出是:
第 1 段 第 2 段 第 3 段 文本框 1 文本框 2
它似乎是在末尾添加文本框,而不是在它应该在的地方,即段落之间。这个问题在 doc 和 pdf 文件中都有。这意味着 POI 和 PDFBox 这两个库都出现了同样的问题。
读取 pdf 文件的代码是:
void pdf(字符串文件)抛出 IOException {
//初始化文件
文件 myFile = 新文件(文件);
PDDocument pdDoc = null;
尝试 {
//加载PDF
pdDoc = PDDocument.load(myFile);
//创建提取器
PDFTextStripper pdf = new PDFTextStripper();
//提取文本
输出 = pdf.getText(pdDoc);
}
最后 {
如果(pdDoc!= null)
//关闭文档
pdDoc.close();
}
}
doc文件的代码是:
无效文档(字符串文件)抛出 FileNotFoundException,IOException {
文件 myFile = null;
WordExtractor 提取器 = null ;
//初始化文件
我的文件 = 新文件(文件);
//创建文件输入流
FileInputStream fis=new FileInputStream(myFile.getAbsolutePath());
//打开文档
HWPFDocument 文档=新 HWPFDocument(fis);
//创建提取器
extractor = new WordExtractor(document);
//从文档中获取文本
输出 = extractor.getText();
}
【问题讨论】:
-
您可能会发现文本框被锚定到一个段落并且您无意中移动/丢失了锚点。如果您可以让 iText 为您提供有关文本框锚点的信息,那么也许您可以保留或重置它。
-
您是否有理由直接使用底层库?使用 Apache Tika 可能会简单得多,它会包装库并生成一致的文本
标签:
java
pdf
apache-poi
doc
pdfbox