java读取pdf文件的图片和文字内容

引用的jar包:

pdfbox-1.8.13.jar

fontbox-1.8.13.jar

 

    public static void main(String[] args) {
        PDFReader pdfReader1 = new PDFReader();
        pdfReader1.pdfReader("C:/Users/Administrator/Desktop/2017_PDF.pdf");
    }


    /**
     * 导出pdf中的图片(有问题)
     *  
     *
     * @param filename
     */
    public static void extractImage(String filename) {
        PdfReader reader = null;
        try {
            // 读取pdf文件
            reader = new PdfReader(filename);
            // 获得pdf文件的页数
            int sumPage = reader.getNumberOfPages();
            // 读取pdf文件中的每一页
            for (int i = 1; i <= sumPage; i++) {
                // 得到pdf每一页的字典对象
                PdfDictionary dictionary = reader.getPageN(i);
                // 通过RESOURCES得到对应的字典对象
                PdfDictionary res = (PdfDictionary) PdfReader
                        .getPdfObject(dictionary.get(PdfName.RESOURCES));
                // 得到XOBJECT图片对象
                PdfDictionary xobj = (PdfDictionary) PdfReader.getPdfObject(res.get(PdfName.XOBJECT));
                if (xobj != null) {
                    for (Iterator it = xobj.getKeys().iterator(); it.hasNext(); ) {
                        PdfObject obj = xobj.get((PdfName) it.next());
                        if (obj.isIndirect()) {
                            PdfDictionary tg = (PdfDictionary) PdfReader
                                    .getPdfObject(obj);
                            PdfName type = (PdfName) PdfReader.getPdfObject(tg
                                    .get(PdfName.SUBTYPE));
                            if (PdfName.IMAGE.equals(type)) {
                                PdfObject object = reader.getPdfObject(obj);
                                if (object.isStream()) {
                                    PRStream prstream = (PRStream) object;
                                    byte[] b;
                                    try {
                                        b = reader.getStreamBytes(prstream);
                                    } catch (UnsupportedPdfException e) {
                                        b = reader.getStreamBytesRaw(prstream);
                                    }
                                    FileOutputStream output = new FileOutputStream(String.format("d:/pdf/output%d.jpg", i));
                                    output.write(b);
                                    output.flush();
                                    output.close();
                                }
                            }
                        }
                    }
                }
            }


        } catch (IOException e) {
            e.printStackTrace();
        }
    }


    /**
     * 解析pdf文件
     *
     * @param fileName  pdf文件的路径
     */
    public String pdfReader(String fileName) {
        try {
            InputStream inputStream = new BufferedInputStream(new FileInputStream(new File(fileName)));
            // PDFParser parser = new PDFParser( inputStream );
            // parser.parse();
            PDDocument pdfDocument = PDDocument.load(inputStream);
            // PDDocument pdfDocument = parser.getPDDocument();
            StringWriter writer = new StringWriter();
            PDFTextStripper stripper = new PDFTextStripper();
            stripper.writeText(pdfDocument, writer);
            String contents = writer.getBuffer().toString();


            /*
             * PDDocumentInformation documentInformation =
             * pdfDocument.getDocumentInformation(); System.out.println("标题:" +
             * documentInformation.getTitle()); PDDocumentInformation info =
             * pdfDocument.getDocumentInformation(); System.out.println("标题:" +
             * info.getTitle()); System.out.println("主题:" + info.getSubject());
             * System.out.println("作者:" + info.getAuthor());
             * System.out.println("关键字:" + info.getKeywords());
             * System.out.println("应用程序:" + info.getCreator());
             * System.out.println("pdf 制作程序:" + info.getProducer());
             * System.out.println("作者:" + info.getTrapped());
             * System.out.println("创建时间:" + dateFormat(info.getCreationDate()));
             * System.out.println("修改时间:" +
             * dateFormat(info.getModificationDate()));
             */


            /** 文档页面信息 **/
            PDDocumentCatalog cata = pdfDocument.getDocumentCatalog();
            //文档文字内容
            String content = "";
            List pages = cata.getAllPages();
            int count = 1;
            for (int i = 0; i < pages.size(); i++) {
                PDPage page = (PDPage) pages.get(i);
                if (null != page) {
                    // 本页面文字内容
                    StringWriter sw = new StringWriter();
                    PDFTextStripper pst = new PDFTextStripper();
                    pst.setStartPage(i + 1);
                    pst.setEndPage(i + 1);
                    pst.writeText(pdfDocument, sw);
                    content += sw.getBuffer().toString();
                    // System.out.println(content);
                    // PDResources res = page.findResources();
                    // 获取页面图片信息
                    // Map imgs = res.getImages();
                    // if (null != imgs) {
                    // Set keySet = imgs.keySet();
                    // Iterator it = keySet.iterator();
                    // while (it.hasNext()) {
                    // Object obj = it.next();
                    // PDXObjectImage img = (PDXObjectImage) imgs.get(obj);
                    // img.write2file("D:/pdf/" + count);
                    // count++;
                    // }
                    // }
                }
            }
            return content;
        } catch (Exception e) {
            e.printStackTrace();
            return "";
        }
    }

 

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值