麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學院 > 開發設計 > 正文

HTML轉PDF

2019-11-14 14:51:30
字體:
來源:轉載
供稿:網友

Maven依賴

<dependency>    <groupId>com.itextpdf</groupId>    <artifactId>itextpdf</artifactId>    <version>5.5.7</version></dependency><dependency>    <groupId>com.itextpdf.tool</groupId>    <artifactId>xmlworker</artifactId>    <version>5.5.7</version></dependency>

類圖及API

類圖

IHtml2PdfService

HTML轉PDF的服務接口

write (htmlContent: java.lang.String, os: java.io.OutputStream): void

將指定的html轉換成pdf內容后,寫到指定的輸出流。

Html2PdfServiceImpl

HTML轉PDF的服務實現類

write (htmlContent: java.lang.String, os: java.io.OutputStream): void

實現:將指定的html轉換成pdf內容后,寫到指定的輸出流。

getIntaceHtml (htmlContent: String): String

私有方法,用于獲取完整的html文檔;如果傳入的只是html片斷,需要使用模板將其完整化。

doWrite (htmlContent: String, os: OutputStream): void

私有方法,將完整的html文檔轉換成pdf之后,寫到指定的輸出流。

代碼

IHtml2PdfService

package cn.ljl.javaweb.demo.ckeditor.service;public interface IHtml2PdfService {    /** html完整內容的前綴標識 */    public static final String INTACT_FLAG = "<html>";        /**     * html模板,當待轉換的html只是片斷時,需將其插入到模板的body內.     */    public static final String TEMPLATE_HTML =             "<html>" +            "    <head>" +            "        <style type='text/CSS'>body {font-family: SimSun;}</style>" +            "    </head>" +            "    <body>" +            "        ${content}" +            "    </body>" +            "</html>";        /** 將指定的html內容轉化成pdf文檔之后,寫入到指定的輸出流. */    public void write(java.lang.String htmlContent, java.io.OutputStream os);    }

Html2PdfServiceImpl

package cn.ljl.javaweb.demo.ckeditor.service;import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.nio.charset.Charset;import com.itextpdf.text.DocumentException;public class Html2PdfServiceImpl implements IHtml2PdfService {    @Override    public void write(String htmlContent, OutputStream os) {        if (htmlContent == null || htmlContent.length() == 0)            return;        if (os == null)            return;        htmlContent = getIntaceHtml(htmlContent);        doWrite(htmlContent, os);    }        /**     * 根據提供的html內容,獲取完整的html內容.<br>     * @param htmlContent     * @return     */    PRivate String getIntaceHtml(String htmlContent) {        boolean intact = htmlContent.trim().toLowerCase()                .startsWith(INTACT_FLAG);        if (!intact) {            htmlContent = TEMPLATE_HTML.replaceFirst("//$//{content//}", htmlContent);        }        return htmlContent;    }        /**     * 實施寫操作.<br>     * @param htmlContent     * @param os     */    private void doWrite(String htmlContent, OutputStream os) {        InputStream is = new ByteArrayInputStream(htmlContent.getBytes());        com.itextpdf.text.Document document = new com.itextpdf.text.Document();        com.itextpdf.text.pdf.PdfWriter writer = null;        try {            writer = com.itextpdf.text.pdf.PdfWriter                    .getInstance(document, os);            document.open();                        com.itextpdf.tool.xml.XMLWorkerHelper.getInstance().parseXHtml(writer,                    document, is, Charset.forName("gbk"));        } catch (DocumentException e) {            e.printStackTrace();        } catch (IOException e) {            e.printStackTrace();        }                writer.flush();        // SINOBEST HTML2PDF 如果我們調用writer.close(),可能無法正常的生成pdf,甚至會遇到        // Exception:The page 1 was requested but the document has only 0 pages.        // writer.close();        document.close();    }}

可能遇到的問題

1. 中文字符顯示問題

如果是完整的html文檔,需要使用css為整個文檔設置一個默認的字體,如IHtml2PdfService的模板中的代碼片段:

<style type='text/css'>body {font-family: SimSun;}</style>

2. 部分內容空白

可能是html文檔使用了服務器中沒有的字體。比如html文檔的某個div,設置了仿宋字體,而機器上又沒有安裝,那么轉換成pdf的時候,對應的內容是空白。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 蜜桃久久一区二区三区 | 性猛交ⅹxxx乱巴西 在线播放中文 | 成码无人av片在线观看网站 | 福利免费在线观看 | 免费午夜网站 | 操穴视频 | xnxx 美女19 | 国产韩国精品一区二区三区久久 | 国产a一级片| 午夜精品视频免费观看 | 日韩在线激情 | 欧美淫交 | 亚洲免费观看视频 | 国产午夜亚洲精品午夜鲁丝片 | 婷婷一区二区三区 | 久久九九热re6这里有精品 | 免费国产网站 | 日韩视频在线一区二区三区 | 国产成人高潮免费观看精品 | 亚洲自拍第一 | 国产精品一品二区三区四区18 | 九九视频精品在线观看 | 欧美成人精品一区二区 | 色诱亚洲精品久久久久久 | 视频一区二区三区在线播放 | 久草在线最新 | 久久久一区二区三区四区 | 看免费一级毛片 | 久久久久久久久成人 | 在线免费av观看 | 中午字幕无线码一区2020 | 手机国产乱子伦精品视频 | 国产成年人视频 | 久久久久国产一区二区三区不卡 | 国产在线a | 免费毛片观看 | 欧产日产国产精品乱噜噜 | 日本成人一区二区 | 视频毛片| 精品国产乱码久久久久久丨区2区 | 91小视频在线观看免费版高清 |