我在使用 iText 阅读 pdf 内容时遇到问题。我已经测试了所有不同的技术。它们都适用于标准 pdf 文档,但我有一个 pdf 文档需要修改,但我无法获取内容。
本文档由 PD4ML 生成。它可以在 Acrobat reader 中阅读,但不能在 Open Office 中阅读。
例如使用命令
PdfReader reader = new PdfReader(src);
FileOutputStream out = new FileOutputStream(result);
out.write(reader.getPageContent(1));
Produces this output: q Q q 29.18088 102.1433 536.9282 675.0511 re W n /Cs1 cs 1 1 1 sc 29.18088 775.5042 m 574.5602 775.5042 l 574.5602 -2599.312 l 29.18088 -2599.312 lh f Q q 43.26609 761.4189 m 560.475 761.4189 l 560.475 -2572.832 l 43.26609 - 2572.832 lh W n 29.18088 102.1433 536.9282 675.0511 re W nq 24.78997 0 0 22.53634 51.71722 733.2485 cm /Im1 Do Q /Cs1 cs 0.2 0.2 0.2 sc /Cs1 CS 0.2 0.2 0.2 SC 0.5 w 2 J 2 Tr q 0.5634084 0 0 0.5634084 29.18088 711.2756 cm BT 20 0 0 20 40 0 Tm /G1 1 Tf [ <0033> 1 <004800550049> 1 <00520055005000440051004600480003> 1 <0044005100470003>
但是当我试图获取文本上下文时,有文本项,它们没有显示。就像文本格式不同一样。
这段代码:
PdfReader reader = new PdfReader(src);
PdfReaderContentParser parser = new PdfReaderContentParser(reader); PrintWriter out = new PrintWriter(new FileOutputStream(result)); TextExtractionStrategy strategy;
for (int i = 1; i <= reader.getNumberOfPages(); i++) {
strategy = parser.processContent(i, new SimpleTextExtractionStrategy());
out.println(strategy.getResultantText());
}
只是产生空间。与 TextLocationStrategy 相同。
命令 PdfContentReaderTool.listContentStream(new File(src), out);
产生 ==============第 1 页===================== - - - - - 字典 - - - - - - ( /Parent=字典类型:/Pages, /Contents=Stream, /Type=/Page, /Resources=Dictionary, /MediaBox=[0, 0, 595.29, 841.89]) 子字典 /Parent = (/Type=/Pages, /MediaBox=[0, 0, 595.29, 841.89], /Count=6, /Kids=[2 0 R, 14 0 R, 26 0 R, 30 0 R, 34 0 R, 38 0 R]) 子目录 /Resources = (/XObject=Dictionary, /ProcSet=[/PDF, /Text, /ImageB, /ImageC, /ImageI], /ColorSpace=Dictionary, /Font=Dictionary) 子字典 /XObject = (/Im1=Stream 类型:/ XObject) Subdictionary /ColorSpace = (/Cs1=[/ICCBased, 12 0 R]) Subdictionary /Font = (/G2=Dictionary of type: /Font, /G1=Dictionary of type: /Font) Subdictionary /G2 = (/ BaseFont=/HCNQGU+font000000001c036002, /DescendantFonts=[50 0 R], /Type=/Font, /Encoding=/Identity-H,/Subtype=/Type0, /ToUnicode=Stream) 子字典 /G1 = (/BaseFont=/HCZCBJ+font000000001c036002, /DescendantFonts=[43 0 R], /Type=/Font, /Encoding=/Identity-H, /Subtype= /Type0, /ToUnicode=Stream) - - - - - XObject 摘要 - - - - - - ------ /Im1 - subtype = /Image = 9148 bytes ------
- Content Stream - - - - - - q Q q 29.18088 102.1433 536.9282 675.0511 re W n /Cs1 cs 1 1 1 sc 29.18088 775.5042 m 574.5602 775.5042 l 574.5602 -2599.312 l 29.18088 -2599.312 lh f Q q 43.26609 761.4189 m 560.475 761.4189 l 560.475 - 2572.832 l 43.26609 -2572.832 lh W n 29.18088 102.1433 536.9282 675.0511 re W nq 24.78997 0 0 22.53634 51.71722 733.2485 cm /Im1 Do Q /Cs1 cs 0.2 0.2 0.2 sc /Cs1 CS 0.2 0.2 0.2 SC 0.5 w 2 J 2 Tr q 0.5634084 0 0 0.5634084 29.18088 711.2756 cm BT 20 0 0 20 40 0 Tm /G1 1
但是文本提取部分是空的。
知道为什么我看不懂文字吗?在获取文本之前,我还有什么可以做或测试的吗?
欢迎任何指针。
吉尔斯