Java 解析pdf内容

Java 解析pdf内容

最近遇到一个老师有点小需求,需要读取一些pdf的内容到数据库里面进行检索,因为一直都在合作所以找到了我。
百度了一下发现在java下解决pdf内容解析的办法也有不少,我选了apache的pdfbox来做pdf的内容解析工作,pdfbox官网
开发环境

spring boot

先看pom.xml


<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0modelVersion>

    <groupId>com.pdfgroupId>
    <artifactId>pdfartifactId>
    <version>0.0.1-SNAPSHOTversion>
    <packaging>jarpackaging>

    <name>pdfname>
    <description>Demo project for Spring Bootdescription>

    <parent>
        <groupId>org.springframework.bootgroupId>
        <artifactId>spring-boot-starter-parentartifactId>
        <version>1.5.8.RELEASEversion>
        <relativePath/> 
    parent>

    <properties>
        <project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8project.reporting.outputEncoding>
        <java.version>1.8java.version>
    properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-webartifactId>
        dependency>

        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-devtoolsartifactId>
            <scope>runtimescope>
        dependency>
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-testartifactId>
            <scope>testscope>
        dependency>

        <dependency>
            <groupId>org.apache.pdfboxgroupId>
            <artifactId>pdfboxartifactId>
            <version>2.0.4version>
        dependency>
        
        <dependency>
            <groupId>org.apache.pdfboxgroupId>
            <artifactId>fontboxartifactId>
            <version>2.0.8version>
        dependency>

    dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-maven-pluginartifactId>
            plugin>
        plugins>
    build>


project>

我做测试的是偶pdfbox最新版本为2.0.4现在可能有更新的版本,自己按照需要进行修改吧。
我这里做的测试是从pdf解析出文本数据,然后再将解析出来的文本数据保存到一个txt文本,贴代码

@Test
    public void pdfTest() {
        try {
            // 是否排序
            boolean sort = false;
            // 开始提取页数
            int startPage = 1;
            // 结束提取页数
            int endPage = Integer.MAX_VALUE;
            String content = null;
            PrintWriter writer = null;
            //pdf文本路径
            String path = "/home/jacky/upload-dir/test.pdf";
            //输出txt文本路径
            String target="/home/jacky/upload-dir/test.txt";
            PDDocument document = PDDocument.load(new File(path));
            PDFTextStripper pts = new PDFTextStripper();
            endPage = document.getNumberOfPages();
            System.out.println("Total Page: " + endPage);
            pts.setStartPage(startPage);
            pts.setEndPage(endPage);
            try {
                //content就是从pdf中解析出来的文本
                content = pts.getText(document);
                writer = new PrintWriter(new FileOutputStream(target));
                writer.write(content);// 写入文件内容
                writer.flush();
                writer.close();
            } catch (Exception e) {
                throw e;
            }finally {
                if (null != document)
                    document.close();
            }
            System.out.println("Get PDF Content ...");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

这样我们就完成了一个简单的解析pdf文本的测试,但是请注意我这里示例的pdf保存的是文本类型的内容而不是图片形式的文本内容。我这里只是简单的介绍了一下pdfbox读取文本格式的内容,官方的svn代码提供了很多的demo,所以可以checkout一下官方的示例代码

svn checkout http://svn.apache.org/repos/asf/pdfbox/trunk/examples

你可能感兴趣的:(java开发)