[pdfbox]pdfbox的使用

目录

概述

开发环境

pom.xml 依赖

实例

1.全文解析

1.1 一次获取整个文件的内容

1.2 分页获取文字的内容

1.3 分页获取文字和图片

 2.区域解析


概述

Apache PDFBox 是遵循Apache License v2.0的Java开源类库。用于操作PDF文档,可以创建新PDF文档,维护现有的PDF文档,或者从PDF文档中提取内容,支持生成加密的PDF文件,以及对PDF文件进行数字签名。Apache PDFBox同时提供了一个命令行操作工具。

Apache PDFBox 由pdfbox, fontbox 和xmpbox三个组件,在Maven groupId中都是 org.apache.pdfbox

 注意:

  1. Pdfbox的PDPage对象从0开始计数。
  2. PDFTextStripper. setStartPage()、PDFTextStripper .setEndPage()从1开始计数。

开发环境

最小的需求:

  1. Java 6
  2. commons-logging

支持在PDF文档中嵌入式图像文件,但是对某些格式的支持需要第三方库,这些库是根据与apache2.0许可证不兼容的条款分发的

pom.xml 依赖

<dependency>
  <groupId>org.apache.pdfbox</groupId>
  <artifactId>pdfbox</artifactId>
  <version>2.0.21</version>
</dependency>

 

实例

1.全文解析

当一个pdf中全是文字并且排列规整的时候,直接全文解析出来就好

1.1 一次获取整个文件的内容

import java.io.File;

import java.io.IOException;

import org.apache.pdfbox.pdmodel.*;

import org.apache.pdfbox.text.PDFTextStripper;



public class preProcess {



    public static void main(String[] args) throws IOException {

        

       String rootDir=System.getProperty("user.dir")+File.separator;

       String fileResources=rootDir+"resources"+File.separator;

       String fileStr=fileResources+"123.pdf";

       File file=new File(fileStr);

      

       PDDocument doc=new PDDocument().load(file);

       PDFTextStripper textStripper =new PDFTextStripper();



       String s=textStripper.getText(doc);

       System.out.println("总页数:"+doc.getNumberOfPages());

       System.out.println("输出内容:");

       System.out.println(s);

       doc.close();

    }



}



import java.io.File;

import java.io.IOException;

import org.apache.pdfbox.io.RandomAccessFile;

import org.apache.pdfbox.pdfparser.PDFParser;

import org.apache.pdfbox.pdmodel.*;

import org.apache.pdfbox.text.PDFTextStripper;

public class preProcess2 {



    public static void main(String[] args) throws IOException {

       String rootDir=System.getProperty("user.dir")+File.separator;

       String fileResources=rootDir+"resources"+File.separator;

       String fileStr=fileResources+"123.pdf";

        

       File file=new File(fileStr); 

       RandomAccessFile is = new RandomAccessFile(file, "r"); 

       PDFParser parser = new PDFParser(is);

       parser.parse();

       PDDocument doc = parser.getPDDocument(); 

       PDFTextStripper textStripper =new PDFTextStripper();

       String s=textStripper.getText(doc);

       System.out.println("总页数:"+doc.getNumberOfPages());

       System.out.println("输出内容:");

       System.out.println(s);

       doc.close();

    }

}

1.2 分页获取文字的内容

import java.io.File;

import java.io.IOException;

import org.apache.pdfbox.io.RandomAccessFile;

import org.apache.pdfbox.pdfparser.PDFParser;

import org.apache.pdfbox.pdmodel.*;

import org.apache.pdfbox.text.PDFTextStripper;

public class preProcess3 {



    public static void main(String[] args) throws IOException {

       String rootDir=System.getProperty("user.dir")+File.separator;

       String fileResources=rootDir+"resources"+File.separator;

       String fileStr=fileResources+"fenye.pdf";

        

       File file=new File(fileStr); 

       RandomAccessFile is = new RandomAccessFile(file, "r"); 

       PDFParser parser = new PDFParser(is);

       parser.parse();

       PDDocument doc = parser.getPDDocument(); 

       PDFTextStripper textStripper =new PDFTextStripper();

      

       for(int i=1;i<=doc.getNumberOfPages();i++)

        {

            textStripper.setStartPage(i);

            textStripper.setEndPage(i);

            textStripper.setSortByPosition(true);//一次输出多个页时,按顺序输出

            String s=textStripper.getText(doc);

              System.out.println("当前页:"+i);

              System.out.println("输出内容:");

              System.out.println(s);

        }

        

       doc.close();

    }

}

 

1.3 分页获取文字和图片

package com.zzj.nlp.PDFBox;

import java.io.File;

import java.io.IOException;

import java.util.Iterator;

import javax.imageio.ImageIO;

import org.apache.pdfbox.cos.COSName;

import org.apache.pdfbox.pdmodel.*;

import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject;

import org.apache.pdfbox.text.PDFTextStripper;

public class PDFBoxPreProcess2 {



    public static void main(String[] args) throws IOException {

       String rootDir=System.getProperty("user.dir")+File.separator;

       String fileResources=rootDir+"resources"+File.separator;

       String fileStr=fileResources+"fenye.pdf";

       File file=new File(fileStr); 

       PDDocument doc = PDDocument.load(file); 

       PDFTextStripper textStripper =new PDFTextStripper();

       for(int i=1;i<=doc.getNumberOfPages();i++){

           textStripper.setStartPage(i);

           textStripper.setEndPage(i);

           String s=textStripper.getText(doc);

           System.out.println("第 "+i+" 页 :"+s);

          

           //读取图片

           PDPage page=doc.getPage(i-1);

           PDResources resources = page.getResources();

           //获取页中的对象

           Iterable<COSName> xobjects =resources.getXObjectNames();

           if(xobjects!=null){

              Iterator<COSName> imageIter = xobjects.iterator(); 

              while(imageIter.hasNext()){

                  COSName cosName=imageIter.next();

                boolean isImageXObject=resources.isImageXObject(cosName);

                if(isImageXObject){

                //获取每页资源的图片

                PDImageXObject ixt=(PDImageXObject) resources.getXObject(cosName);

                File outputfile = new File("第 "+(i)+" 页"+cosName.getName()+".jpg");

                ImageIO.write(ixt.getImage(), "jpg", outputfile);

                 

              }

           }  

       }

       }

       doc.close();

    }

}

 

 2.区域解析

当文字排列不规整或者是一些表格类型的pdf的时候,就需要分区域单独去解析pdf

import java.awt.Rectangle;

import java.awt.geom.Rectangle2D;

import java.io.File;

import java.io.IOException;

import org.apache.pdfbox.pdmodel.*;

import org.apache.pdfbox.text.PDFTextStripperByArea;

public class PDFBoxPreProcess1 {



    public static void main(String[] args) throws IOException {

       String rootDir=System.getProperty("user.dir")+File.separator;

       String fileResources=rootDir+"resources"+File.separator;

       String fileStr=fileResources+"fenye.pdf";

        

       File file=new File(fileStr); 

       PDDocument doc = PDDocument.load(file); 

        

       这个四边形所在区域在 y轴向下为正,x轴向右为正。

       int x =100;

        int y =-200;

        int width =1000;

        int height =1000;

        PDFTextStripperByArea stripper = new PDFTextStripperByArea();

        stripper.setSortByPosition(true);

        // 划定区域

        Rectangle2D rect = new Rectangle(x, y, width, height);

        stripper.addRegion("area", rect);

        PDPage page = doc.getPage(1);

        stripper.extractRegions(page);

        // 获取区域的text

        String data = stripper.getTextForRegion("area");

        data = data.trim();

       System.out.println(data);

        

       doc.close();

    }

}

 

猜你喜欢

转载自blog.csdn.net/henku449141932/article/details/110957692
今日推荐