不少项目都须要将系统中的数据生成经常使用的办公软件中,例如:world,excel,pdf等。这其中最经常使用的就是开源项目Apache POI和操做PDF的IText。其中IText的html、css解析度不够,因而有人作了一个flying-seucar对Itext进行了增强。css
a)MAVA下载
html
<dependency> <groupId>org.xhtmlrenderer</groupId> <artifactId>flying-saucer-core</artifactId> <version>9.0.8</version> </dependency> <dependency> <groupId>org.xhtmlrenderer</groupId> <artifactId>flying-saucer-pdf-itext5</artifactId> <version>9.0.8</version> </dependency> <dependency> <groupId>com.itextpdf</groupId> <artifactId>itextpdf</artifactId> <version>5.5.8</version> </dependency>
b)相关依赖
java
org.xhtmlrenderer.pdf.ITextRenderer:主要渲染类。spring
org.xhtmlrenderer.pdf.PDFEncryption:密码服务器
org.xhtmlrenderer.pdf.ITextFontResolver:字体app
//在使用中:格式要求很严格。 private final static String CONTENTFILE = "D:\\project\\test\\111.txt";// 元数数据 private final static String PDFOUT = "D:\\project\\test\\my.pdf";// PDF输出 private final static String TTLPATH = "D:\\project\\test\\simsun.ttc";// 字体文件 @Test public void TestPdfOne() throws Exception { // 生成渲染器 ITextRenderer renderer = new ITextRenderer(); // 字体 ITextFontResolver font = renderer.getFontResolver(); /** * @see 字体的相关设�?<字体这块不熟、你们仍是本身多测试�?> * @see path 字体文件路径 * @see encoding 编码 * @see embeded :内前 */ font.addFont(TTLPATH, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED); // 加载内容 renderer.setDocumentFromString("你好我是命令");// string //renderer.setDocument(new File(CONTENTFILE));//文件 //renderer.setDocument("http://www.baidu.com");// URL // 版本 renderer.setPDFVersion('1'); // 加密 renderer.setPDFEncryption(TestPdf.getPdfEncryption()); // 存储 renderer.createPDF(new FileOutputStream(PDFOUT)); } /** * @see 加密 * @return */ public static PDFEncryption getPdfEncryption() { /** * 操做级别 * PdfWriter.ALLOW_PRINTING :打印 * PdfWriter.ALLOW_COPY :复制 * PdfWriter.ALLOW_FILL_IN :全部 */ /** * 加密类型: * STANDARD_ENCRYPTION_40 = 0; * STANDARD_ENCRYPTION_128 = 1; */ return new PDFEncryption("1231".getBytes(), "1231".getBytes(), PdfWriter.ALLOW_PRINTING, 1); }
//1.这里和springMVC的结合 //2.这种方法不会在服务器生成PDF文件 //3.利用页面生成的PDF,最接近平时所用的PDF排版 @RequestMapping(value = "/user/downprotocal/{investId}") public void downProtocal(HttpServletRequest request, HttpServletResponse response, @PathVariable int investId) { try { Bid bid = this.bidService.getBidByInvestId(investId); if (null != bid) { // 中文需转义 response.setHeader("Content-disposition", "attachment;filename=" + bid.getSerialNumber() + ".pdf"); response.setContentType("application/pdf"); OutputStream os = response.getOutputStream(); ITextRenderer renderer = new ITextRenderer(); // 指定模板地址 System.out.println(MyUriUtil.getUri(request) + "user/getpdf/" + investId); //服务器PDF页面的链接 renderer.setDocument(MyUriUtil.getUri(request) + "pdftemp/" + investId); ITextFontResolver fontResolver = renderer.getFontResolver(); // 字体 fontResolver.addFont( request.getServletContext().getRealPath("/") + "WEB-INF\\fonts\\simsun.ttc", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED); renderer.layout(); renderer.createPDF(os); os.close(); // fontResolver.addFont("C:/Windows/Fonts/simhei.ttf", // BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED); // fontResolver.addFont("C:/Windows/Fonts/simkai.ttf", // BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED); } else { response.sendRedirect(request.getContextPath() + "/user/loadprotocal"); } } catch (IOException | DocumentException e) { LOGGER.error(MyTimeUtil.getYYMMDDTimeString() + "[PDF错误]", e); } } //pdf页面 @RequestMapping(value = "/pdftemp/{investId}") public String pdfTemp(HttpServletRequest request, @PathVariable int investId) { try { /** * 数据处理的文件 */ } catch (Exception e) { LOGGER.error("[协议加载]", e); } return "pdf/protocal"; }