Java中使用phantomjs將HTML頁面轉為pdf
之前有個需求,將頁面轉為pdf,當時使用itext轉換,但是呢樣式與實際在瀏覽器中開啟的樣式存在差異。比如選擇項長得不一樣,CheckBox長得不一樣,這就不行,需求要跟瀏覽器開啟一模一樣,後經過多方面查詢,終於找到一個靠譜點的解決方案:使用phantomjs外掛。
首先下載 phantomjs 外掛:
這個外掛各個版本都有些小bug,我這裡使用的是1.9.7。 高版本存在問題是:table中跨列的單元格左側邊框不顯示。
低版本能顯示,但是也存在問題:table 中跨列的單元格的左側的單元格高度不正確,如下圖:(理論上左側三行高度應該平均分配)
使用phantomjs :
一、下載後,解壓到目錄,我這裡解壓到C盤:(根據專案需求,可放在專案中,然後獲取專案根目錄來取到檔案目錄)
二、建立一個js檔案:html2pdf.js,我這裡放在資料夾phantom下。
內容如下:
var page = require('webpage').create(); var system = require('system'); ////讀取命令列引數,也就是js檔案路徑。 if (system.args.length === 1) { console.log('Usage: loadspeed.js <some URL>'); //這行程式碼很重要。凡是結束必須呼叫。否則phantomjs不會停止 phantom.exit(); } page.settings.loadImages = true; //載入圖片 page.settings.resourceTimeout = 30000;//超過10秒放棄載入 //截圖設定, //page.viewportSize = { // width: 1000, // height: 3000 //}; var address = system.args[1]; page.open(address, function(status) { function checkReadyState() {//等待載入完成將頁面生成pdf setTimeout(function () { var readyState = page.evaluate(function () { return document.readyState; }); if ("complete" === readyState) { page.paperSize = { width:'297mm',height:'500mm',orientation: 'portrait',border: '1cm' }; var timestamp = Date.parse(new Date()); var pdfname = 'HT_'+timestamp + Math.floor(Math.random()*1000000); var outpathstr = "E:/POMFiles/HTPDF/"+pdfname+".pdf"; page.render(outpathstr); //page.render("c://test.png"); //console.log就是傳輸回去的內容。 console.log("生成成功"); console.log("$"+outpathstr+"$"); phantom.exit(); } else { checkReadyState(); } },1000); } checkReadyState(); });
三、Java中呼叫:
package com.eweaver.base.util; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; /** * 轉換html為pdf * * @author xiongfan * */ public class Html2pdf { public static String parseHtml2Pdf(String url) throws IOException { System.out.println(url); //執行phantomjs 生成js Runtime rt = Runtime.getRuntime(); Process p = rt.exec("C:\\phantom\\bin\\phantomjs.exe C:\\phantom\\html2pdf.js "+url); InputStream is = p.getInputStream(); BufferedReader br = new BufferedReader(new InputStreamReader(is)); StringBuffer sbf = new StringBuffer(); String tmp = ""; while ((tmp = br.readLine()) != null) { sbf.append(tmp); } String resultstr = sbf.toString(); String[] arr = resultstr.split("\\$"); String result = ""; for(String s : arr){ if(s.endsWith("pdf"))result = s; } return result; } }
呼叫 parseHtml2Pdf()方法,就可以將html頁面轉換為pdf了。路徑也可以定義。我這邊直接固定寫死了。
關於跨行的單元格左側行高不一致問題,我的解決方法是在頁面中加入js程式碼,自動為跨行所涉及到的tr計算行高,並賦值,這樣就解決了,程式碼就不貼了。
相關推薦
Java中使用phantomjs將HTML頁面轉為pdf
之前有個需求,將頁面轉為pdf,當時使用itext轉換,但是呢樣式與實際在瀏覽器中開啟的樣式存在差異。比如選擇項長得不一樣,CheckBox長得不一樣,這就不行,需求要跟瀏覽器開啟一模一樣,後經過多方面查詢,終於找到一個靠譜點的解決方案:使用phantomjs外掛。 首先下
使用iText 將html頁面轉PDF檔案(itext+freemarker)
1.匯入jar包(使用maven管理) <!--itext start--> <dependency> <groupId>com.lowagie&l
java使用pd4ml將html轉換成pdf
import java.awt.Insets; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileNotFoundException; import java.io.F
js實現html頁面轉為pdf下載
1、簡單描述 最近做了一個專案,我也是剛學js才幾個多月,對js不是很懂,但是我相信,只要肯學,總會進步的。專案裡面要實現把網頁的試題下載成pdf,所以我有個同事就實現了這個功能,然後我參考著他寫的程式碼就總結了一下。網頁渲染的過程中因伺服器效能和圖片的數量而定,圖片太多的
利用itext將html頁面轉成pdf(不模糊)
relative long ble wid ems map entity repl oat 1.maven項目進入依賴 <dependency> <groupId>org.xhtmlrenderer</groupId>
Oracle中存儲圖片的類型為BLOB類型,Java中如何將其讀取並轉為字符串?
ava 字節數組 object [] str string類 arch data mpi 一,讀取圖片轉為String類型: 需要使用Sun公司提供的Base64工具 String str = ((Map) list1.get(0)).get("EINVOICEFILE")
將HTML頁面自動儲存為PDF檔案並上傳的兩種方式(一)-前端(react)方式
一、業務場景 公司的樣本檢測報告以React頁面的形式生成,已調整為A4大小的樣式並已實現分頁,業務上需要將這個網頁生成PDF檔案,並上傳到伺服器,後續會將這個檔案傳送給客戶(這裡不考慮)。 二、原來的實現形式 瀏覽器原生方法:window.print()可以將網頁儲存為PDF檔案,由於檢測報告
java使用wkhtmltopdf將html或者URI連結生成PDF
最近專案有個需求,將客戶提供的URI連結轉化為PDF檔案,原本打算使用itext轉換的,發現使用itext轉化後的PDF格式和html差異過大。後來經同事介紹可以使用wkhtmltopdf對html或URI連結轉化為PDF,經過測試確實很強大,也比較簡單,但是要安裝wkhtmltopdf外掛。
前端和java後臺將HTML轉換成pdf
前端和java後臺將HTML轉換成pdf java後臺方式: private final static String DEST = "C:\\80afa41a3bfc474cbf1ac8b5bc1d.pdf"; //生成pdf的路徑 private final
java程式碼將word,excel轉為pdf
新建javaweb工程 下載aspouse-word-14.11.0-jdk16.jar包和aspose-cells-8.5.2.jar包並引入 word轉pdf的java函式 package webViewer; import java.io.*; import com.as
使用phantomJS將html轉為圖片
問題描述 近期寫稿專案碰到一個問題,由於文章會發布到不同裝置和平臺上,在前端展示的時候可能會與平臺本身的樣式發生覆蓋,導致表格樣式顯示不正常。短時間內想要做出一個適應所有環境的前端樣式不太現實。因為使用本地模板生成的表格不存在樣式問題,所以考慮將本地html模板中的<t
Linux中使用命令列方式呼叫openoffice服務將word檔案轉為PDF
Linux中使用命令列方式呼叫openoffice服務將word檔案轉為PDF 測試安裝之後的openoffice用命令將docx檔案轉換為PDF 需要一份python的指令碼程式,因為轉換需要通過py程式去呼叫api處理,將下面程式儲存到topdf.py檔案: #
iText – 使用Java將HTML轉換為PDF
iText “XML Worker”允許開發人員以一種程式設計師友好的方式將XML檔案轉換成PDF檔案。iText還可以將包含CSS樣式的HTML轉換為PDF格式的文件。 目標: 實現如何利用iText Java庫將HTML檔案轉換成PDF文件?
java中如何將office檔案轉成pdf或者圖片(親測有效)
前段時間做專案時,需要將word文件在瀏覽器中開啟,一般的在瀏覽器中開啟word都是直接提示下載的,找了好久都是些pageoffice等的收費外掛,小專案成本要儘量壓縮,所以就放棄了這種收費的外掛了。突然想到有些瀏覽器能直接開啟pdf或者圖片,手機端也需要顯示圖片,所以可以
JAVA常用API或程式設計工具001---ITEXT把html轉換成pdf的jar包,使用Java將HTML轉換為PDF
iText “XML Worker”允許開發人員以一種程式設計師友好的方式將XML檔案轉換成PDF檔案。iText還可以將包含CSS樣式的HTML轉換為PDF格式的文件。 目標: 實現如何利用iText Java庫將HTML檔案轉換成PDF文件? Environment &
Java將HTML轉化為PDF+獲得頁數+合併PDF
最近公司用到了HTML轉PDF的技術,這裡就把用到的方式和技術在這裡寫一下,方便他人和自己以後有需要時進行
將HTML頁面部分內容匯出為PDF
若前者小於後者說明不用分頁,直接新增圖片資料匯出,原始碼如下: if(contentHeight < pageHeight){ pdf.addImage(imgData, 'JPEG', 0, 0,pdfFormat[format][0],pdfFormat[format][
在Java中,將ExecutorService轉為守護程式
問題描述 我正在Java 1.6中使用一個ExecutoreService,簡單地開始 ExecutorService pool = Executors.newFixedThreadPool(THREADS). 當我的主執行緒完成(以及由執行緒池處理的所有任務)時
用js 將當前html頁面匯出pdf
引入的js <script src="./js/libs/jquery-2.0.2.js"></script> <script src="./js/exportpdf/jspdf.debug.js"></script>
JAVA使用wkhtmltopdf 將Html 匯出PDF
1.安裝wkhtmltopdf 根據自己的系統來選擇對應的安裝包 2.下載之後安裝,然後將其配置到環境變數中 3.做個小測試 命令:wkhtmltopdf 需要轉化為pdf的html地址 匯出位置 4.下面附上JAVA程式碼 主要工具類