1. 程式人生 > >pdf 生成

pdf 生成

pom配置

        <dependency>
            <groupId>org.freemarker</groupId>
            <artifactId>freemarker</artifactId>
            <version>2.3.20</version>
        </dependency>
        <dependency>
            <groupId>org.xhtmlrenderer</groupId
>
<artifactId>flying-saucer-pdf</artifactId> <version>9.0.9</version> </dependency>

處理邏輯

    /**
     * 使用freemarker得到html內容
     * @param ftlPath
     * @param ftlName
     * @param o
     * @return
     * @throws ParseException
     * @throws
IOException * @throws TemplateException */
private String getPdfContent(String ftlPath, String ftlName, Object o) throws TemplateException, IOException { String html = null; Template tpl = getTemplate(ftlName,ftlPath); tpl.setEncoding("UTF-8"); StringWriter writer = new
StringWriter(); tpl.process(o, writer); writer.flush(); html = writer.toString(); return html; } /** * 生成PDF * @param path * @param html * @param out * @throws DocumentException * @throws IOException */ private void generatePDF(String path, String html, OutputStream out) throws DocumentException, IOException{ ITextRenderer render = new ITextRenderer(); //新增字型,以支援中文 render.getFontResolver().addFont(path + "/ARIALUNI.TTF", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED); render.getFontResolver().addFont(path + "/SIMSUN.TTC", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED); render.setDocumentFromString(html); //把路徑中的反斜槓轉成正斜槓 path = path.replaceAll("\\\\", "/"); //html中如果有圖片,圖片的路徑則使用這裡設定的路徑的相對路徑,這個是作為根路徑 render.getSharedContext().setBaseURL("file:/"+path+"/"); render.layout(); render.createPDF(out); render.finishPDF(); render = null; } /** * 生成PDF * @param path * @param html * @param out * @throws DocumentException * @throws IOException */ private void generatePDF(String contextPath, String html, OutputStream out) throws DocumentException, IOException{ String ftlPath = contextPath + "WEB-INF" + File.separator + "template" + File.separator + "order" + File.separator + "ftl"; ITextRenderer render = new ITextRenderer(); //新增字型,以支援中文 render.getFontResolver().addFont(ftlPath + "/msyh.ttf", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED); //html中如果有圖片,圖片的路徑則使用這裡設定的路徑的相對路徑,這個是作為根路徑 File f = new File(contextPath + "static"); URL base = f.toURI().toURL(); html = html.replaceAll("&(?!amp;)", "&amp;"); render.setDocumentFromString(html,base.toString()); render.layout(); render.createPDF(out); render.finishPDF(); render = null; }