itext PDF 分页 并 解决PdfReader not opened with owner password
2016-06-11 13:17
666 查看
package com.xiuye.util; import java.io.BufferedOutputStream; import java.io.IOException; import javax.servlet.http.HttpServletResponse; import com.itextpdf.text.Document; import com.itextpdf.text.DocumentException; import com.itextpdf.text.pdf.PdfCopy; import com.itextpdf.text.pdf.PdfImportedPage; import com.itextpdf.text.pdf.PdfReader; import com.xiuye.logger.Logger; public class PdfOutputCustomPagesUtil { private static Logger log = Logger .getLogger(PdfOutputCustomPagesUtil.class); /** * split pdf for my bookstore * * @param pdfFilename * @param startPage * not equal 0 since 1 * @param os */ public static void partOfPdfOutputPages(String pdfFilename, int startPage, HttpServletResponse response) { int expectEndPage = 0; Document doc = null; PdfCopy pdfCopy = null; PdfReader reader = null; try { reader = new PdfReader(pdfFilename); /** * 解决Exception in thread "main" java.lang.IllegalArgumentException: * PdfReader not opened with owner password * * */ java.lang.reflect.Field f = reader.getClass().getDeclaredField( "encrypted"); f.setAccessible(true); f.set(reader, false); int totalPages = reader.getNumberOfPages(); log.info("文档总页数:" + totalPages + "页"); if (totalPages == 0) { return; } else if (totalPages > 0 && totalPages < 10) { expectEndPage = totalPages; } else if (totalPages >= 10 && totalPages <= 50) { expectEndPage = totalPages / 10; } else { expectEndPage = 50; } log.info("需要传送多少页:" + expectEndPage + "页"); doc = new Document(reader.getPageSize(1)); BufferedOutputStream bos = new BufferedOutputStream( response.getOutputStream()); pdfCopy = new PdfCopy(doc, bos); doc.open(); pdfCopy.open(); for (int i = startPage; i <= expectEndPage; i++) { doc.newPage(); PdfImportedPage page = pdfCopy.getImportedPage(reader, i); pdfCopy.addPage(page); pdfCopy.flush(); } } catch (IOException e) { e.printStackTrace(); } catch (DocumentException e) { e.printStackTrace(); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (NoSuchFieldException e) { e.printStackTrace(); } catch (SecurityException e) { e.printStackTrace(); } finally { if (doc != null && doc.isOpen()) { doc.close(); doc = null; } if (pdfCopy != null) { pdfCopy.close(); pdfCopy = null; } if (reader != null) { reader.close(); reader = null; } } } }
相关文章推荐
- Linux下修改Tomcat默认端口
- Centos接触 (六)在CentOS的中安装mysql可视化操作workbench
- opencv之头文件
- Centos接触 (五)在CentOS的汉化及ssh可能乱码解决
- linux内核中异步通信机制--信号处理机制
- MySQL高可用性之Keepalived+Mysql(双主热备)
- 聊聊Linux动态链接中的PLT和GOT(1)——何谓PLT与GOT
- 开机自启动nginx
- 定义自己的rm command
- 我的vim捣鼓之路
- linux下的C语言开发
- kylin cube测试时,报错:org.apache.hadoop.security.AccessControlException: Permission denied: user=root, access=WRITE, inode="/user":hdfs:supergroup:drwxr-xr-x
- Dockerfile实例,构建openresty+lua+filebeat镜像
- 将tomcat源码导入到Eclipse
- centos7+opencv3.1+libvlc
- Delete files or directories in bash shell
- Tomcat探秘(4):tomcat启动过程详述
- 01--tomcat初识
- 【Linux】教你一步一步在Redhat系统上开启Telnet服务
- 栈帧