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完成專案組中相應的功能!
- import java.io.FileOutputStream;
- import java.io.FileReader;
- import java.util.ArrayList;
- import com.lowagie.text.Document;
- import com.lowagie.text.Element;
- import com.lowagie.text.Font;
- import com.lowagie.text.PageSize;
- import com.lowagie.text.Paragraph;
-
import com.lowagie.text.html.simpleparser.HTMLWorker;
- import com.lowagie.text.html.simpleparser.StyleSheet;
- import com.lowagie.text.pdf.BaseFont;
- import com.lowagie.text.pdf.PdfWriter;
- publicclass TestIText{
- publicstaticvoid main(String[] args) {
- TestIText ih = new TestIText();
-
ih.htmlCodeComeFromFile("D://Test//iText.html"
- ih.htmlCodeComeString("Hello中文", "D://Test//iText_2.pdf");
- }
- publicvoid htmlCodeComeFromFile(String filePath, String pdfPath) {
- Document document = new Document();
- try {
- StyleSheet st = new StyleSheet();
- st.loadTagStyle("body", "leading", "16,0");
- PdfWriter.getInstance(document, new FileOutputStream(pdfPath));
- document.open();
- ArrayList p = HTMLWorker.parseToList(new FileReader(filePath), st);
- for(int k = 0; k < p.size(); ++k) {
- document.add((Element)p.get(k));
- }
- document.close();
- System.out.println("文件建立成功");
- }catch(Exception e) {
- e.printStackTrace();
- }
- }
- publicvoid htmlCodeComeString(String htmlCode, String pdfPath) {
- Document doc = new Document(PageSize.A4);
- try {
- PdfWriter.getInstance(doc, new FileOutputStream(pdfPath));
- doc.open();
- // 解決中文問題
- BaseFont bfChinese = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
- Font FontChinese = new Font(bfChinese, 12, Font.NORMAL);
- Paragraph t = new Paragraph(htmlCode, FontChinese);
- doc.add(t);
- doc.close();
- System.out.println("文件建立成功");
- }catch(Exception e) {
- e.printStackTrace();
- }
- }
- }
(二)Flying Sauser
依賴jar包:iText-2.0.8.jar、iTextAsian.jar、core-renderer.jar
預設情況下,core-renderer.jar對中文是不能進行換行的,如果想解決換行問題可以去http://bettereveryday.javaeye.com/blog/611561下載一個jar包,該包對原始碼做了稍加修改.
下面只是一個小的測試案例,如果專案中使用到了該元件可以參考API完成專案組中相應的功能!
- import java.io.File;
- import java.io.FileOutputStream;
- import java.io.OutputStream;
- import org.xhtmlrenderer.pdf.ITextFontResolver;
- import org.xhtmlrenderer.pdf.ITextRenderer;
- import com.lowagie.text.pdf.BaseFont;
- publicclass TestFlyingSauser {
- publicstaticvoid main(String[] args) throws Exception {
- demo_1();
- demo_2();
- }
- // 不支援中文
- publicstaticvoid demo_1() throws Exception {
- String inputFile = "D:/Test/flying.html";
- String url = new File(inputFile).toURI().toURL().toString();
- String outputFile = "D:/Test/flying.pdf";
- OutputStream os = new FileOutputStream(outputFile);
- ITextRenderer renderer = new ITextRenderer();
- renderer.setDocument(url);
- renderer.layout();
- renderer.createPDF(os);
- os.close();
- }
- // 支援中文
- publicstaticvoid demo_2() throws Exception {
- String outputFile = "D:/Test/demo_3.pdf";
- OutputStream os = new FileOutputStream(outputFile);
- ITextRenderer renderer = new ITextRenderer();
- ITextFontResolver fontResolver = renderer.getFontResolver();
- fontResolver.addFont("C:/Windows/fonts/simsun.ttc", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
- StringBuffer html = new StringBuffer();
- // DOCTYPE 必需寫否則類似於 這樣的字元解析會出現錯誤
- html.append("<!DOCTYPE html PUBLIC /"-//W3C//DTD XHTML 1.0 Transitional//EN/" /"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd/">");
- html.append("<html xmlns=/"http://www.w3.org/1999/xhtml/">").append("<head>")
- .append("<meta http-equiv=/"Content-Type/" content=/"text/html; charset=UTF-8/" />")
- .append("<mce:style type=/"text/css/"><!--
- body {font-family: SimSun;}
- --></mce:style><style type=/"text/css/" mce_bogus="1">body {font-family: SimSun;}</style>")
- .append("</head>")
- .append("<body>");
- html.append("<div>支援中文!</div>");
- html.append("</body></html>");
- renderer.setDocumentFromString(html.toString());
- // 解決圖片的相對路徑問題
- // renderer.getSharedContext().setBaseURL("file:/F:/teste/html/");
- renderer.layout();
- renderer.createPDF(os);
- os.close();
- }
- }
(三)PD4ML
依賴jar包:pd4ml_demo.jar、pd4ml__css2.jar、fonts.jar
下面只是一個小的測試案例,如果專案中使用到了該元件可以參考API完成專案組中相應的功能!
- import java.awt.Insets;
- import java.io.File;
- import java.io.FileOutputStream;
- import java.io.StringReader;
- import org.zefer.pd4ml.PD4Constants;
- import org.zefer.pd4ml.PD4ML;
- publicclass Converter {
- publicstaticvoid main(String[] args) throws Exception {
- Converter converter = new Converter();
- converter.generatePDF_2(new File("D:/Test/demo_ch_pd4ml_a.pdf"), "D:/Test/a.htm");
- File pdfFile = new File("D:/Test/demo_ch_pd4ml.pdf");
- StringBuffer html = new StringBuffer();
- html.append("<html>")
- .append("<head>")
- .append("<meta http-equiv=/"Content-Type/" content=/"text/html; charset=UTF-8/" />")
- .append("</head>")
- .append("<body>")
- .append("<font face=/"KaiTi_GB2312/">")
- .append("<font color='red' size=22>顯示中文</font>")
- .append("</font>")
- .append("</body></html>");
- StringReader strReader = new StringReader(html.toString());
- converter.generatePDF_1(pdfFile, strReader);
- }
- // 手動構造HTML程式碼
- publicvoid generatePDF_1(File outputPDFFile, StringReader strReader) throws Exception {
- FileOutputStream fos = new FileOutputStream(outputPDFFile);
- PD4ML pd4ml = new PD4ML();
- pd4ml.setPageInsets(new Insets(20, 10, 10, 10));
- pd4ml.setHtmlWidth(950);
- pd4ml.setPageSize(pd4ml.changePageOrientation(PD4Constants.A4));
- pd4ml.useTTF("java:fonts", true);
- pd4ml.setDefaultTTFs("KaiTi_GB2312", "KaiTi_GB2312", "KaiTi_GB2312");
- pd4ml.enableDebugInfo();
- pd4ml.render(strReader, fos);
- }
- // HTML程式碼來自於HTML檔案
-
相關推薦
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 html轉pdf 中文亂碼
網上關於 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 html轉PDF
在公司接到一個任務,需要有HTML和PDF兩套模板,進行功能實現。 於是我就到網上搜索資料,看看是否能夠html轉PDF。 果然搜到了很多案例,當然很多一樣的啦。 這裡我將處理demo時遇到的問題和解決方案都大概說下吧! 下面我下貼出demo: public static
java html轉pdf手動分頁
方法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實現Html轉PDF檔案
html轉換為pdf的關鍵技術是如何處理網頁中複雜的css樣式、以及中文亂碼處理。 各實現對比表 於Windows平臺進行測試: 基於IText 基於FlyingSaucer 基於WKHtmlToPdf
java根據模板匯出pdf(動態增加模板頁數)
這兩天碰到了一個根據模板匯出pdf的需求,研究了幾天以後,發現網上的資料不太齊全,主要是沒找到既根據模板匯出,又可以動態增加頁數的例子。只能通過各種資料結合來實現這個需求了(其實是懶得看iText英文文件,這個以後得改過來)。 下面先來說下pdf匯出主要的兩種方
iText —— JAVA將html轉pdf
1、index.html檔案內容如下 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.
Java實現Html轉PDF
專案上的客戶提出一個需求,把政務流程中的表單資料匯出成pdf或者圖片格式,用來作電子檔案材料。表單基於公司的電子政務構建平臺實現,在資料庫儲存的都是html格式,因此打算直接把表單html轉成pdf或者圖片。由於表單是已經寫好了html頁面,那我要做的就是能完美解析htm
Java操作wkhtmltopdf實現Html轉PDF
做java開發的都知道,java生成pdf大部分都是用itext,itext的確是java開源元件的第一選擇。不過itext也有侷限,就是要自己寫模版,系統中的表單數量有好幾百個,為每個表單做一個匯出