我们正在进行信息提取的研究,并希望使用iText。
我们正在探索iText。根据我们所审查的文献,iText是使用的最佳工具。在iText中是否可能按行从pdf中提取文本?我已经阅读了StackOverflow上与我的问题相关的一个问题帖子,但它只能读取文本而不能提取它。能否有人帮助我解决这个问题?谢谢。
我们正在进行信息提取的研究,并希望使用iText。
我们正在探索iText。根据我们所审查的文献,iText是使用的最佳工具。在iText中是否可能按行从pdf中提取文本?我已经阅读了StackOverflow上与我的问题相关的一个问题帖子,但它只能读取文本而不能提取它。能否有人帮助我解决这个问题?谢谢。
就像Theodore所说的那样,您可以从PDF中提取文本,就像Chris指出的那样
只要它实际上是文本(而不是轮廓或位图)
最好的方法是购买Bruno Lowagie的书Itext in Action。在第二版的第15章中介绍了如何提取文本。
但是您可以查看他的网站以获取示例。http://itextpdf.com/examples/iia.php?id=279
然后,您可以解析它以创建一个纯文本文件。 以下是代码示例:
/*
* This class is part of the book "iText in Action - 2nd Edition"
* written by Bruno Lowagie (ISBN: 9781935182610)
* For more info, go to: http://itextpdf.com/examples/
* This example only works with the AGPL version of iText.
*/
package part4.chapter15;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintWriter;
import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.parser.PdfReaderContentParser;
import com.itextpdf.text.pdf.parser.SimpleTextExtractionStrategy;
import com.itextpdf.text.pdf.parser.TextExtractionStrategy;
public class ExtractPageContent {
/** The original PDF that will be parsed. */
public static final String PREFACE = "resources/pdfs/preface.pdf";
/** The resulting text file. */
public static final String RESULT = "results/part4/chapter15/preface.txt";
/**
* Parses a PDF to a plain text file.
* @param pdf the original PDF
* @param txt the resulting text
* @throws IOException
*/
public void parsePdf(String pdf, String txt) throws IOException {
PdfReader reader = new PdfReader(pdf);
PdfReaderContentParser parser = new PdfReaderContentParser(reader);
PrintWriter out = new PrintWriter(new FileOutputStream(txt));
TextExtractionStrategy strategy;
for (int i = 1; i <= reader.getNumberOfPages(); i++) {
strategy = parser.processContent(i, new SimpleTextExtractionStrategy());
out.println(strategy.getResultantText());
}
reader.close();
out.flush();
out.close();
}
/**
* Main method.
* @param args no arguments needed
* @throws IOException
*/
public static void main(String[] args) throws IOException {
new ExtractPageContent().parsePdf(PREFACE, RESULT);
}
}
注意许可证
此示例仅适用于iText的AGPL版本。
如果您查看其他示例,它将展示如何省略文本的某些部分或如何提取pdf的某些部分。
希望这有所帮助。
public static void main(String[] args) throws Exception {
try (var document = new PdfDocument(new PdfReader("your.pdf"))) {
var strategy = new SimpleTextExtractionStrategy();
for (int i = 1; i < document.getNumberOfPages(); i++) {
String text = PdfTextExtractor.getTextFromPage(document.getPage(i), strategy);
System.out.println(text);
}
}
}