Java 读取 PDF

64 阅读1分钟

快速上手

<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);
        }
    }

}