经验分享之使用pdfbox截取pdf(java)
来源:互联网 发布:linux terminal 字体 编辑:程序博客网 时间:2024/06/05 07:39
背景:最近总是和PDF打交道,学习到很多内容,其中从PDF中截取某几页内容很是打动我的心啊,下面介绍一下这块内容。我使用的是PDFbox2.0.3。
一、简单介绍
Apache PDFbox是一个开源的、基于Java的、支持PDF文档生成的工具库,它可以用于创建新的PDF文档,修改现有的PDF文档,还可以从PDF文档中提取所需的内容。Apache PDFBox还包含了数个命令行工具。
Apache PDFbox的最新版本是2.0.5。
https://pdfbox.apache.org/
二、需求分析
我使用的测试文件是双页的PDF文件,于是,有了一个需求就是截取颜色相同的内容(我这里用相同的颜色代表同一篇文章。),截图如下:
三、功能实现
引入PDFBox的jar包:
java代码:
/** * 根据起始页和文章页数截取PDF-何丽杰-2017-04-12 * pdfFilePath:PDF文件的全路径 * depositPath:新生成PDF的全路径 * totalPage:PDF文件的总页数 * pgStartPos:PDF文件的起始位置,L左边,R右边 * startPage:文章的起始页 * pageNum:文章的页数 */ @Override public boolean generateSubPdf(String pdfFilePath,String depositPath,int totalPage,String pgStartPos,int startPage, int pageNum) { boolean flag; flag=false; int stopPage = startPage + pageNum - 1; //处理结束页 String pgStopPos=null; if(stopPage % 2 == 0){ pgStopPos="L"; }else if(stopPage % 2 == 1){ pgStopPos="R"; } //处理起始页 if (startPage == 1) { startPage = 1; stopPage = 1; } else if (startPage == totalPage) { startPage = (startPage + 2) / 2; stopPage = startPage; } else { if (startPage % 2 == 1) { startPage = (startPage + 1) / 2; } else if (startPage % 2 == 0) { startPage = (startPage + 2) / 2; } if( stopPage % 2 == 1){ stopPage = (stopPage + 1) / 2; }else if(stopPage % 2 == 0){ stopPage = (stopPage + 2) / 2; } } //处理总页数 int pageCount = (totalPage+2)/2; //截取PDF try { PDDocument helloDocument = PDDocument.load(new File(pdfFilePath)); PDPageTree pdpt=helloDocument.getDocumentCatalog().getPages(); Iterator<PDPage> it=pdpt.iterator(); PDDocument doc = null; doc = new PDDocument(); int i=1; PDPage pdp; for(;it.hasNext();){ if(i<=stopPage&&i>=startPage){ pdp=(org.apache.pdfbox.pdmodel.PDPage) it.next(); PDRectangle r=pdp.getCropBox(); if(startPage == 1 || startPage == pageCount){ }else{ if(pageNum == 1){ if(pgStartPos.equals("R")){ r.setLowerLeftX(r.getUpperRightX()/2); r.setLowerLeftY(0); } if(pgStartPos.equals("L")){ r.setUpperRightX(r.getUpperRightX()/2); r.setUpperRightY(r.getUpperRightY()); } }else{ if(i == startPage){ if(pgStartPos.equals("R")){ r.setLowerLeftX(r.getUpperRightX()/2); r.setLowerLeftY(0); } }else if(i == stopPage){ if(pgStopPos.equals("L")){ r.setUpperRightX(r.getUpperRightX()/2); r.setUpperRightY(r.getUpperRightY()); } } } } pdp.setCropBox(r); doc.addPage(pdp); }else{ it.next(); } i++; } doc.save(depositPath); doc.close(); } catch (Exception e) { e.printStackTrace(); } return flag; } @Test public void dotest(){ //String pdfFilePath,String depositPath,int totalPage,String pgStartPos,int startPage, int pageNum String pdfFilePath="C:\\Users\\丽杰\\Desktop\\测试文件.pdf"; String depositPath="D:\\test.pdf"; generateSubPdf(pdfFilePath,depositPath,12,"R",3,3); }
四、效果
五:学习心得
1、在不断的实践中学习到更多的内容
2、自己接触的知识面还是有点窄,多多经历,多多积累
3、办法总比困难多,况且很多困难别人已经解决了,自己引用过来就可以了
0 0
- 经验分享之使用pdfbox截取pdf(java)
- java操作pdf>>>pdfBox使用体验
- java使用pdfbox把PDF转成html
- PDF转换技巧之如何使用PDF转换器经验分享
- 【JAVA】PDFBOX解析PDF
- JAVA使用pdfbox将pdf转换成图片
- Java 使用 pdfbox 读取 PDF文件中的文本
- 使用PDFBox解析PDF文档
- 使用PDFBox解析pdf文件
- 使用PDFBox处理PDF文档
- 使用PDFBox处理PDF文档
- 使用PDFBox处理PDF文档
- 使用PDFBox处理PDF文档
- 使用PDFBox解析PDF内容
- 使用PDFBox处理PDF文档
- 使用PDFBox处理PDF文档
- 使用PDFBox处理PDF文档
- 使用PDFBox处理PDF文档
- servlet监听完成统计在线人数,显示在线人员列表(附源码)
- Flex tree 展开任意想展开的节点
- bookStore案例第一篇【部署开发环境、解决分类模块】
- JSON解析-开源jsoncpp---动态链接库生成
- Servlet(11)HttpServletResponse、HttpServletRequest详解及中文乱码处理
- 经验分享之使用pdfbox截取pdf(java)
- NPM小结
- Flex中利用flexpaper查看文件
- springmvc实体类类型转换
- python基础教程学习笔记 第二章 列表和元组
- mysql 远程连接
- easyui datagrid pagination 自定义分页
- HDU 1358 Period (next跳表找最小循环节)KMP
- Qt5中文显示