快速上手
<dependency>
<groupId>org.apache.pdfbox</groupId>
<artifactId>pdfbox</artifactId>
<version>3.0.6</version>
<scope>compile</scope>
</dependency>
使用
public static void main(String[] args) throws FileNotFoundException {
FileInputStream fileInputStream = new FileInputStream("./报告.pdf");
String text = PDFUtil.pdfToString(fileInputStream);
System.out.println(text);
}
工具
import org.apache.pdfbox.Loader;
import org.apache.pdfbox.io.RandomAccessReadBuffer;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.text.PDFTextStripper;
import java.io.IOException;
import java.io.InputStream;
import java.io.UncheckedIOException;
public class PDFUtil {
public static String pdfToString(InputStream inputStream) {
try {
// 缺点:容易撑爆内存 import org.apache.pdfbox.io.IOUtils;
// byte[] byteArray = IOUtils.toByteArray(inputStream);
// 解决了内存问题
RandomAccessReadBuffer readBuffer = new RandomAccessReadBuffer(inputStream);
// 加载PDF文档
try (PDDocument document = Loader.loadPDF(readBuffer)) {
// 创建一个PDFTextStripper实例来提取文本
PDFTextStripper pdfStripper = new PDFTextStripper();
pdfStripper.setSortByPosition(true); // 按页面位置排序,文本更自然
pdfStripper.setStartPage(1);
pdfStripper.setEndPage(document.getNumberOfPages());
// 从PDF文档中提取文本
return pdfStripper.getText(document);
}
} catch (IOException e) {
throw new UncheckedIOException("PDF text extraction failed", e);
}
}
}