Apache PDF box開発ガイドのPDFドキュメント読み込み

10628 ワード

転載は出所を明記してください.http://blog.csdn.net/loongshawn/article/details/51542309
関連記事:
  • 『Apache PDFbox開発ガイドのPDFテキストコンテンツマイニング』
  • 『Apache PDF box開発ガイドのPDFドキュメント読み取り』
  • 1、紹介
    Apache PDF boxは、JavaベースのオープンソースでPDFドキュメント生成をサポートするツールライブラリです.新しいPDFドキュメントを作成したり、既存のPDFドキュメントを変更したり、PDFドキュメントから必要なコンテンツを抽出したりすることができます.Apache PDF Boxには、コマンドラインツールもいくつか含まれています.Apache PDFboxは2016年4月26日に最新の2.0.1版をリリースした.
    備考:このコードは2.0以上のバージョンに基づいて作成されています.
    公式サイトのアドレス:https://pdfbox.apache.org/index.html
    PDF Box 2.0.1 APIオンラインドキュメント:https://pdfbox.apache.org/docs/2.0.1/javadocs/
    2、特徴
    Apache PDF Boxには主に以下の特徴がある:PDF読み取り、作成、印刷、変換、検証、連結分割などの特徴.
    3、開発実戦
    3.1、シーン説明
  • 1、PDFテキストの内容を読み取り、サンプルでは健康診断報告テキストの内容を読み取ります.
  • 2、PDFドキュメントの画像を抽出します.ここでは、PDFの画像を単独のPDFとして保存するだけで、直接画像ファイルを出力する必要がある(しばらくは実現していない)場合は、私のコードを参考に拡張することができます.主にPDImageXObjectオブジェクトを処理します.

  • 3.2、必要なjarパッケージ
    pdfbox-2.0.1.JArダウンロードアドレス
    fontbox-2.0.1.JArダウンロードアドレス
    上記の2つのjarパッケージを次のようにライブラリに追加します:Apache PDFbox开发指南之PDF文档读取_第1张图片
    3.3、テキスト内容抽出
    3.3.1、テキスト内容抽出
    PdfReaderクラスを作成し、次の機能関数を記述します.
    package com.loongshaw;
    
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.InputStream;
    
    import org.apache.pdfbox.io.RandomAccessBuffer;
    import org.apache.pdfbox.pdfparser.PDFParser;
    import org.apache.pdfbox.pdmodel.PDDocument;
    import org.apache.pdfbox.text.PDFTextStripper;
    
    public class PdfReader {
    
        public static void main(String[] args){
    
            File pdfFile = new File("/Users/dddd/Downloads/0571888890423433356rrrr_182-93201510313223336-2.pdf");
            PDDocument document = null;
            try
            {
                //    :
                /**
                InputStream input = null;
                input = new FileInputStream( pdfFile );
                //   pdf   
                PDFParser parser = new PDFParser(new RandomAccessBuffer(input));
                parser.parse();
                document = parser.getPDDocument();
                **/
    
                //    :
                document=PDDocument.load(pdfFile);
    
                //     
                int pages = document.getNumberOfPages();
    
                //      
                PDFTextStripper stripper=new PDFTextStripper();
                //        
                stripper.setSortByPosition(true);
                stripper.setStartPage(1);
                stripper.setEndPage(pages);
                String content = stripper.getText(document);
                System.out.println(content);     
            }
            catch(Exception e)
            {
                System.out.println(e);
            }
    
        }
    
    }

    3.3.2、プロセス説明
    PDFファイルのロードには2つの方法があり、明らかな違いはなく、2つのコードが簡潔です.
    //    :         
            InputStream input = null;
            input = new FileInputStream( pdfFile );
            //   pdf   
            PDFParser parser = new PDFParser(new RandomAccessBuffer(input));
            parser.parse();
            document = parser.getPDDocument();
     //    :
            document=PDDocument.load(pdfFile);                  

    3.3.3、実行結果
    Apache PDFbox开发指南之PDF文档读取_第2张图片
    3.4、画像抽出(2016-12-02追加)
    3.3.1、画像抽出
    public static void readImage(){
    
            //    PDF
            File pdfFile = new File("/Users/xiaolong/Downloads/test.pdf");      
            //   PDF
            File pdfFile_out = new File("/Users/xiaolong/Downloads/testout.pdf");
    
            PDDocument document = null;  
            PDDocument document_out = null;  
            try {  
                document = PDDocument.load(pdfFile);  
                document_out = PDDocument.load(pdfFile_out);  
            } catch (IOException e) {  
                e.printStackTrace();
            }  
    
            int pages_size = document.getNumberOfPages();
    
            System.out.println("getAllPages==============="+pages_size);  
            int j=0;
    
            for(int i=0;i0);
                PDResources resources = page.getResources();  
                Iterable xobjects = resources.getXObjectNames();
    
                if (xobjects != null) {  
                    Iterator imageIter = xobjects.iterator();  
                    while (imageIter.hasNext()) {  
                        COSName key = (COSName) imageIter.next();  
                        if(resources.isImageXObject(key)){              
                            try {
                                PDImageXObject image = (PDImageXObject) resources.getXObject(key);
    
                                //    : PDF               PDF 。
                                PDPageContentStream contentStream = new PDPageContentStream(document_out,page1,AppendMode.APPEND,true);
    
                                float scale = 1f;
                                contentStream.drawImage(image, 20,20,image.getWidth()*scale,image.getHeight()*scale);
                                contentStream.close();
                                document_out.save("/Users/xiaolong/Downloads/123"+j+".pdf");
    
                                System.out.println(image.getSuffix() + ","+image.getHeight() +"," + image.getWidth());
    
                                /**
                                //    : PDF              。
                                File file = new File("/Users/xiaolong/Downloads/123"+j+".png");
                                FileOutputStream out = new FileOutputStream(file);
    
                                InputStream input = image.createInputStream();                   
    
                                int byteCount = 0;
                                byte[] bytes = new byte[1024];
    
                                while ((byteCount = input.read(bytes)) > 0)
                                {                       
                                    out.write(bytes,0,byteCount);       
                                }
    
                                out.close();
                                input.close();
                                **/
    
                            } catch (IOException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                            } 
                            //image count
                            j++;  
                        }                 
                    }  
                } 
            } 
    
            System.out.println(j);
        }  

    3.4.2、プロセス説明
    この方法では、ソースPDFの画像オブジェクトPDImageXObjectを取り出し、そのオブジェクトに関連する処理を行うことができます.このコードは、抽出された各画像オブジェクトを空白のPDFドキュメントに挿入することを実現します.
    説明が必要な点は、上記のコード注釈部分は、画像ファイルを直接生成したいという意味ですが、試してみるとファイル異常が見つかりました.そのため、皆さんはこのコードに基づいて新しいアイデアを持って試し続けることができます.
    3.4.3、実行結果
    Apache PDFbox开发指南之PDF文档读取_第3张图片ソースPDFファイルに19枚の画像が含まれています
    Apache PDFbox开发指南之PDF文档读取_第4张图片は、個別のピクチャのみを含む19個のPDFをそれぞれ生成する
    4、まとめ
    本文はApache PDFbox関連開発パッケージを利用してPDFテキストを読み取ることを紹介しただけで、その他の複雑な機能はまだ触れていないので、みんなが自分でオフラインで探求し、試してみる必要がある.