實現(xiàn)word轉(zhuǎn)pdf,HTML轉(zhuǎn)pdf(探索篇)

筆者找依賴的jar包,找的好辛苦。
實現(xiàn)word轉(zhuǎn)pdf,HTML轉(zhuǎn)pdf(探索篇)

創(chuàng)新互聯(lián)建站主要從事成都網(wǎng)站建設(shè)、成都做網(wǎng)站、網(wǎng)頁設(shè)計、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)伊通,十多年網(wǎng)站建設(shè)經(jīng)驗,價格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):13518219792

ITextRenderer、
ITextFontResolver這兩個類依賴的jar包到底是哪個,還有怎么下載?苦苦糾結(jié)了3個小時。

實現(xiàn)word轉(zhuǎn)pdf,HTML轉(zhuǎn)pdf(探索篇)
終于找到你了!
記錄個網(wǎng)址:
http://www.java2s.com/Code/Jar/c/Downloadcorerendererr8pre2jar.htm
上測試代碼:

 /*
 * html轉(zhuǎn)圖片
 */
public static boolean convertHtmlToPdf(String inputFile, 
        String outputFile, String imagePath)
        throws Exception {

    OutputStream os = new FileOutputStream(outputFile);
    ITextRenderer renderer = new ITextRenderer();
    String url = new File(inputFile).toURI().toURL().toString();
    renderer.setDocument(url);
    // 解決中文支持問題
    ITextFontResolver fontResolver = renderer.getFontResolver();
    fontResolver.addFont("C:/Windows/Fonts/simsunb.ttf", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
    //解決圖片的相對路徑問題
    renderer.getSharedContext().setBaseURL("file:/" + imagePath);//D:/test
    renderer.layout();
    renderer.createPDF(os);
    os.flush();
    os.close();
    return true;
}

調(diào)用+走你!

這里筆者結(jié)合上一篇poi將word轉(zhuǎn)html,結(jié)合使用。
/**doc

  • 轉(zhuǎn)html
    */
    String tagPath = "D:\red_ant_file\20180915\image\";
    String sourcePath = "D:\red_ant_file\20180915\RedAnt的實驗作業(yè).doc";
    String outPath = "D:\red_ant_file\20180915\123.html";
    try {
    AllServiceIsHere.docToHtml(tagPath, sourcePath, outPath);
    } catch (Exception e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }

    String pdfPath = "D:\\red_ant_file\\20180915\\456.pdf";
    try {
        AllServiceIsHere.convertHtmlToPdf(outPath , pdfPath, tagPath);
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    【注意】
    (值得注意的地方是IText 根據(jù)html生成pdf文件的時候,會驗證html文件是否標(biāo)準(zhǔn),例如通過poi轉(zhuǎn)換的出來的html文件的一些標(biāo)簽會缺少標(biāo)簽閉合 ” / “ :
    否則,你會遇到
    Can't load the XML resource (using TRaX transformer). org.xml.sax.SAXParseException; lineNumber: 23; columnNumber: 3; 元素類型 "meta" 必須由匹配的結(jié)束標(biāo)記 "</meta>" 終止。

筆者嘗試,使用第三方 jar 包Jsoup, 直接調(diào)用 parse方法,筆者認(rèn)為html就標(biāo)準(zhǔn)啦!
這個坑,讓筆者苦惱了,1個小時。

為此,筆者不得不重寫,word轉(zhuǎn)html代碼:
再次記錄個網(wǎng)址:下載第三方 jar 包Jsoup使用
https://jsoup.org/download
上重寫word轉(zhuǎn)html代碼:

        // word 轉(zhuǎn) html
            public static void convert2Html(String fileName, String outPutFile) throws Exception {
                HWPFDocument wordDocument = new HWPFDocument(new FileInputStream(fileName));// WordToHtmlUtils.loadDoc(new
                // 兼容2007 以上版本
                WordToHtmlConverter wordToHtmlConverter = new WordToHtmlConverter(
                        DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument());
                wordToHtmlConverter.setPicturesManager(new PicturesManager() {
                    public String savePicture(byte[] content, PictureType pictureType, String suggestedName, float widthInches,
                            float heightInches) {
                        return "test/" + suggestedName;
                    }
                });
                wordToHtmlConverter.processDocument(wordDocument);
                // save pictures
                List pics = wordDocument.getPicturesTable().getAllPictures();
                if (pics != null) {
                    for (int i = 0; i < pics.size(); i++) {
                        Picture pic = (Picture) pics.get(i);
                        System.out.println();
                        try {
                            pic.writeImageContent(new FileOutputStream("D:/test/" + pic.suggestFullFileName()));
                        } catch (FileNotFoundException e) {
                            e.printStackTrace();
                        }
                    }
                }
                Document htmlDocument = wordToHtmlConverter.getDocument();
                ByteArrayOutputStream out = new ByteArrayOutputStream();
                DOMSource domSource = new DOMSource(htmlDocument);
                StreamResult streamResult = new StreamResult(out);
                TransformerFactory tf = TransformerFactory.newInstance();
                Transformer serializer = tf.newTransformer();
                serializer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
                serializer.setOutputProperty(OutputKeys.INDENT, "yes");
                serializer.setOutputProperty(OutputKeys.METHOD, "HTML");
                serializer.transform(domSource, streamResult);
                out.close();
                writeFile(new String(out.toByteArray()), outPutFile);
            }
                //輸出html文件 
                public static void writeFile(String content, String path) {
                        FileOutputStream fos = null; 
                        BufferedWriter bw = null;
                        org.jsoup.nodes.Document doc = Jsoup.parse(content);
                         content=doc.html();
                        try {
                                File file = new File(path);
                                fos = new FileOutputStream(file);
                                bw = new BufferedWriter(new OutputStreamWriter(fos,"UTF-8"));
                                bw.write(content);
                        } catch (FileNotFoundException fnfe) {
                                fnfe.printStackTrace();
                        } catch (IOException ioe) {
                                ioe.printStackTrace();
                        } finally {
                                try {
                                        if (bw != null)
                                                bw.close();
                                        if (fos != null)
                                                fos.close();
                                } catch (IOException ie) {
                                }
                        }
                }

準(zhǔn)備個文件,測試一下。

    String source = "D:\\red_ant_file\\20180915\\1303\\RedAnt的實驗作業(yè).doc";
                String out = "D:\\red_ant_file\\20180915\\1303\\789.html";
                try {
                    AllServiceIsHere.convert2Html(source, out);
                } catch (Exception e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }

word轉(zhuǎn)html,規(guī)范化代碼后的轉(zhuǎn)換結(jié)果。

實現(xiàn)word轉(zhuǎn)pdf,HTML轉(zhuǎn)pdf(探索篇)

接下來,html轉(zhuǎn)pdf

實現(xiàn)word轉(zhuǎn)pdf,HTML轉(zhuǎn)pdf(探索篇)

【后話】

雖然筆者,最終調(diào)試出來了。使用這種方法轉(zhuǎn)pdf。
但是使用中,會遇到各種各樣的奇葩坑!因此筆者在這里不推薦使用這種方法。
原因就是,html的規(guī)則也在變化之中,寫法也在變化之中。html轉(zhuǎn)pdf會在后續(xù)報各種各樣的標(biāo)簽錯誤。
筆者之所以粘出,這些代碼。完全是因為,筆者對自己的嘗試,有個明確的結(jié)果。亦或是,再優(yōu)化這些代碼,找到合適的解決辦法。

當(dāng)前題目:實現(xiàn)word轉(zhuǎn)pdf,HTML轉(zhuǎn)pdf(探索篇)
網(wǎng)頁網(wǎng)址:http://muchs.cn/article16/piepgg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信小程序、軟件開發(fā)營銷型網(wǎng)站建設(shè)、企業(yè)網(wǎng)站制作、建站公司外貿(mào)建站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

商城網(wǎng)站建設(shè)