1. 程式人生 > >Java HTML匯出PDF (一)

Java HTML匯出PDF (一)

1、IText實現html2pdf,速度快,糾錯能力差,支援中文(要求HTML使用unicode編碼),但中支援一種中文字型,開源。

2、Flying Sauser實現html2pdf,糾錯能力差,支援多種中文字型(部分樣式不能識別),開源。

3、PD4ML實現html2pdf,速度快,糾錯能力強,支援多種中文字型,商業。

(一)IText

         測試案例:TestIText.java

         依賴jar包:iText-2.0.8.jar、iTextAsian.jar(支援中文)

         下面只是一個小的測試案例,如果專案中使用到了該元件可以參考API完成專案組中相應的功能!

  1. import java.io.FileOutputStream;  
  2. import java.io.FileReader;  
  3. import java.util.ArrayList;  
  4. import com.lowagie.text.Document;  
  5. import com.lowagie.text.Element;  
  6. import com.lowagie.text.Font;  
  7. import com.lowagie.text.PageSize;  
  8. import com.lowagie.text.Paragraph;  
  9. import com.lowagie.text.html.simpleparser.HTMLWorker;  
  10. import com.lowagie.text.html.simpleparser.StyleSheet;  
  11. import com.lowagie.text.pdf.BaseFont;  
  12. import com.lowagie.text.pdf.PdfWriter;  
  13. publicclass TestIText{  
  14.     publicstaticvoid main(String[] args) {  
  15.         TestIText ih = new TestIText();  
  16.         ih.htmlCodeComeFromFile("D://Test//iText.html"
    "D://Test//iText_1.pdf");  
  17.         ih.htmlCodeComeString("Hello中文""D://Test//iText_2.pdf");  
  18.     }  
  19.     publicvoid htmlCodeComeFromFile(String filePath, String pdfPath) {  
  20.         Document document = new Document();  
  21.         try {  
  22.             StyleSheet st = new StyleSheet();  
  23.             st.loadTagStyle("body""leading""16,0");  
  24.             PdfWriter.getInstance(document, new FileOutputStream(pdfPath));  
  25.             document.open();  
  26.             ArrayList p = HTMLWorker.parseToList(new FileReader(filePath), st);  
  27.             for(int k = 0; k < p.size(); ++k) {  
  28.                 document.add((Element)p.get(k));  
  29.             }  
  30.             document.close();  
  31.             System.out.println("文件建立成功");  
  32.         }catch(Exception e) {  
  33.             e.printStackTrace();  
  34.         }  
  35.     }  
  36.     publicvoid htmlCodeComeString(String htmlCode, String pdfPath) {  
  37.         Document doc = new Document(PageSize.A4);  
  38.         try {  
  39.             PdfWriter.getInstance(doc, new FileOutputStream(pdfPath));  
  40.             doc.open();  
  41.             // 解決中文問題
  42.             BaseFont bfChinese = BaseFont.createFont("STSong-Light""UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);  
  43.             Font FontChinese = new Font(bfChinese, 12, Font.NORMAL);  
  44.             Paragraph t = new Paragraph(htmlCode, FontChinese);  
  45.             doc.add(t);  
  46.             doc.close();  
  47.             System.out.println("文件建立成功");  
  48.         }catch(Exception e) {  
  49.             e.printStackTrace();  
  50.         }  
  51.     }  
  52. }  

 (二)Flying Sauser

         依賴jar包:iText-2.0.8.jar、iTextAsian.jar、core-renderer.jar

         預設情況下,core-renderer.jar對中文是不能進行換行的,如果想解決換行問題可以去http://bettereveryday.javaeye.com/blog/611561下載一個jar包,該包對原始碼做了稍加修改.

        下面只是一個小的測試案例,如果專案中使用到了該元件可以參考API完成專案組中相應的功能!

  1. import java.io.File;  
  2. import java.io.FileOutputStream;  
  3. import java.io.OutputStream;  
  4. import org.xhtmlrenderer.pdf.ITextFontResolver;  
  5. import org.xhtmlrenderer.pdf.ITextRenderer;  
  6. import com.lowagie.text.pdf.BaseFont;  
  7. publicclass TestFlyingSauser {  
  8.     publicstaticvoid main(String[] args) throws Exception {  
  9.         demo_1();  
  10.         demo_2();  
  11.     }  
  12.     // 不支援中文
  13.     publicstaticvoid demo_1() throws Exception {  
  14.         String inputFile = "D:/Test/flying.html";  
  15.         String url = new File(inputFile).toURI().toURL().toString();  
  16.         String outputFile = "D:/Test/flying.pdf";  
  17.         OutputStream os = new FileOutputStream(outputFile);  
  18.         ITextRenderer renderer = new ITextRenderer();  
  19.         renderer.setDocument(url);  
  20.         renderer.layout();  
  21.         renderer.createPDF(os);  
  22.         os.close();  
  23.     }  
  24.     // 支援中文
  25.     publicstaticvoid demo_2() throws Exception {  
  26.         String outputFile = "D:/Test/demo_3.pdf";  
  27.         OutputStream os = new FileOutputStream(outputFile);  
  28.         ITextRenderer renderer = new ITextRenderer();  
  29.         ITextFontResolver fontResolver = renderer.getFontResolver();  
  30.         fontResolver.addFont("C:/Windows/fonts/simsun.ttc", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);  
  31.         StringBuffer html = new StringBuffer();  
  32.         // DOCTYPE 必需寫否則類似於 這樣的字元解析會出現錯誤
  33.         html.append("<!DOCTYPE html PUBLIC /"-//W3C//DTD XHTML 1.0 Transitional//EN/" /"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd/">");
  34.         html.append("<html xmlns=/"http://www.w3.org/1999/xhtml/">").append("<head>")
  35.             .append("<meta http-equiv=/"Content-Type/" content=/"text/html; charset=UTF-8/" />")  
  36.             .append("<mce:style type=/"text/css/"><!--  
  37. body {font-family: SimSun;}  
  38. --></mce:style><style type=/"text/css/" mce_bogus="1">body {font-family: SimSun;}</style>")  
  39.             .append("</head>")  
  40.             .append("<body>");  
  41.         html.append("<div>支援中文!</div>");  
  42.         html.append("</body></html>");  
  43.         renderer.setDocumentFromString(html.toString());  
  44.         // 解決圖片的相對路徑問題
  45.         // renderer.getSharedContext().setBaseURL("file:/F:/teste/html/");
  46.         renderer.layout();  
  47.         renderer.createPDF(os);  
  48.         os.close();  
  49.     }  
  50. }  

(三)PD4ML

        依賴jar包:pd4ml_demo.jar、pd4ml__css2.jar、fonts.jar

       下面只是一個小的測試案例,如果專案中使用到了該元件可以參考API完成專案組中相應的功能!

  1. import java.awt.Insets;  
  2. import java.io.File;  
  3. import java.io.FileOutputStream;  
  4. import java.io.StringReader;  
  5. import org.zefer.pd4ml.PD4Constants;  
  6. import org.zefer.pd4ml.PD4ML;  
  7. publicclass Converter {  
  8.     publicstaticvoid main(String[] args) throws Exception {  
  9.         Converter converter = new Converter();  
  10.         converter.generatePDF_2(new File("D:/Test/demo_ch_pd4ml_a.pdf"), "D:/Test/a.htm");  
  11.         File pdfFile = new File("D:/Test/demo_ch_pd4ml.pdf");  
  12.         StringBuffer html = new StringBuffer();  
  13.         html.append("<html>")  
  14.             .append("<head>")  
  15.             .append("<meta http-equiv=/"Content-Type/" content=/"text/html; charset=UTF-8/" />")  
  16.             .append("</head>")  
  17.             .append("<body>")  
  18.             .append("<font face=/"KaiTi_GB2312/">")  
  19.             .append("<font color='red' size=22>顯示中文</font>")  
  20.             .append("</font>")  
  21.             .append("</body></html>");  
  22.         StringReader strReader = new StringReader(html.toString());  
  23.         converter.generatePDF_1(pdfFile, strReader);  
  24.     }  
  25.     // 手動構造HTML程式碼
  26.     publicvoid generatePDF_1(File outputPDFFile, StringReader strReader) throws Exception {  
  27.         FileOutputStream fos = new FileOutputStream(outputPDFFile);  
  28.         PD4ML pd4ml = new PD4ML();  
  29.         pd4ml.setPageInsets(new Insets(20101010));  
  30.         pd4ml.setHtmlWidth(950);  
  31.         pd4ml.setPageSize(pd4ml.changePageOrientation(PD4Constants.A4));  
  32.         pd4ml.useTTF("java:fonts"true);  
  33.         pd4ml.setDefaultTTFs("KaiTi_GB2312""KaiTi_GB2312""KaiTi_GB2312");  
  34.         pd4ml.enableDebugInfo();  
  35.         pd4ml.render(strReader, fos);  
  36.     }  
  37.     // HTML程式碼來自於HTML檔案
  38. 相關推薦

    Java HTML匯出PDF ()

    1、IText實現html2pdf,速度快,糾錯能力差,支援中文(要求HTML使用unicode編碼),但中支援一種中文字型,開源。 2、Flying Sauser實現html2pdf,糾錯能力差,支援多種中文字型(部分樣式不能識別),開源。 3、PD4ML

    JAVA使用wkhtmltopdf 將Html 匯出PDF

    1.安裝wkhtmltopdf  根據自己的系統來選擇對應的安裝包 2.下載之後安裝,然後將其配置到環境變數中 3.做個小測試 命令:wkhtmltopdf 需要轉化為pdf的html地址  匯出位置 4.下面附上JAVA程式碼 主要工具類

    html匯出pdf的四種方式

    將html頁面匯出為pdf檔案並列印,可以直接在windows下使用Ctrl + P,蘋果下⌘ + P。 如果需要用程式碼實現,可以考慮jsPDF、iText、wkhtmltopdf等方式。 以下是三種方式程式碼對比: 方式 優點 缺點 分頁 圖片 表

    html匯出pdf

    <!-- html轉PDF --> <dependency> <groupId>com.itextpdf</groupId> <artifactId>kernel</artifactId>

    java htmlpdf 中文亂碼

    網上關於 html生產pdf的java程式碼許多,我就不說了。主要是記錄一下亂碼問題的關鍵 1、html檔案必須是utf-8編碼格式的檔案。 2、程式碼中的獲取方式也是utf-8的格式。 3、其他的按照別人的教程編寫

    java html生成pdf的問題

    使用的springboot+thyemleft模板+xmlworker+itext+itext-asian 從第二行 TableRowElement 錯誤可以看出是因為模板生成的html頁面中table標籤有問題,結果一看,果然<div>

    Java htmlPDF

    在公司接到一個任務,需要有HTML和PDF兩套模板,進行功能實現。 於是我就到網上搜索資料,看看是否能夠html轉PDF。 果然搜到了很多案例,當然很多一樣的啦。 這裡我將處理demo時遇到的問題和解決方案都大概說下吧! 下面我下貼出demo: public static

    java htmlpdf手動分頁

    方法1:用com.lowagie 引用jar包: compile group:'org.xhtmlrenderer',name:'core-renderer',version:'R8' compile group:'com.lowagie',name:'itext',

    java匯出pdf的經歷

    近期由於工作需要,需要將html程式碼匯入到pdf中,經過了幾種pdf的方案對比後發現IText是最簡單和便捷的一種方式,於是乎採用了Itext。 PDF生成 第一步:匯入Maven依賴 <!--pdf生成工具類--> <dependency>

    java 實現html模板匯出pdf的方式

    最近在工作中遇到了一個很囧的事情。要把HTML頁面轉換成PDF或者tiff圖片等其他形式,目前tiff還是一頭霧水,如果各位大師有真的可行的想法(不要是別人那邊抄的,百度最近搜尋的質量嚴重的打擊了我對國貨的信心。)希望能夠告訴我,先謝了。 言歸正傳。所以,我就做了把H

    HTML TABLE 細邊框樣式 用HTML作為模板,JAVA匯出PDF相容table樣式

        在平時用css寫html table細邊框樣式時候,有很多種寫法,但是發現用JAVA匯出PDF,用HTML作為模板的時候,在轉換時出現樣式不相容問題,經過測試,以下樣式可以完美相容。     現整理如下: <style> table {

    JAVA ITEXT5 匯出PDF)表格匯出PDF

            前不久工作中遇到這樣的需求:點選列表資料要將頁面上展示的列表資料匯出為PDF檔案進行下載,如果將HTML頁面轉化為PDF檔案,這樣資料會匯出不全面,所以只能能後臺資料庫取出資料直接進行生成(不論全面與否均可利用iText5實現)。        利用開源的AP

    java導出pdf的經歷

    @override 輸出 artifact doc 403錯誤 rri bool china html 近期由於工作需要,需要將html代碼導入到pdf中,經過了幾種pdf的方案對比後發現IText是最簡單和便捷的一種方式,於是乎采用了Itext。 PDF生成 第一步:導入

    java匯出PDF無法實現換行

    問題:往文字域裡面填充資料的時候明明設定了換行,如程式碼: Map<String, Object> data = new HashMap<String, Object>(); AcroFields form = ps.getAcroFields(); String ss

    java spring maven pdf 匯出

    pdf表單模板 js : 渲染出動態的html ,其實就是一個a標籤 Visitor.operateFormatter = function(value, row, index) { //編輯 var editButton = '<button type="b

    PDF技術(四)-Java實現HtmlPDF檔案

    html轉換為pdf的關鍵技術是如何處理網頁中複雜的css樣式、以及中文亂碼處理。 各實現對比表 於Windows平臺進行測試:   基於IText 基於FlyingSaucer 基於WKHtmlToPdf

    java根據模板匯出pdf(動態增加模板頁數)

    這兩天碰到了一個根據模板匯出pdf的需求,研究了幾天以後,發現網上的資料不太齊全,主要是沒找到既根據模板匯出,又可以動態增加頁數的例子。只能通過各種資料結合來實現這個需求了(其實是懶得看iText英文文件,這個以後得改過來)。 下面先來說下pdf匯出主要的兩種方

    iText —— JAVAhtmlpdf

    1、index.html檔案內容如下 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.

    Java實現HtmlPDF

    專案上的客戶提出一個需求,把政務流程中的表單資料匯出成pdf或者圖片格式,用來作電子檔案材料。表單基於公司的電子政務構建平臺實現,在資料庫儲存的都是html格式,因此打算直接把表單html轉成pdf或者圖片。由於表單是已經寫好了html頁面,那我要做的就是能完美解析htm

    Java操作wkhtmltopdf實現HtmlPDF

    做java開發的都知道,java生成pdf大部分都是用itext,itext的確是java開源元件的第一選擇。不過itext也有侷限,就是要自己寫模版,系統中的表單數量有好幾百個,為每個表單做一個匯出