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;
    }

猜你喜欢

转载自blog.csdn.net/sinat_30075299/article/details/82528092