1. 程式人生 > >前端和java後臺將HTML轉換成pdf

前端和java後臺將HTML轉換成pdf

前端和java後臺將HTML轉換成pdf


java後臺方式:

private final static String DEST = "C:\\80afa41a3bfc474cbf1ac8b5bc1d.pdf";	//生成pdf的路徑
	private final static String SRC = "D:\\3b33a68bbf52417aac48687937352464.html";	//html檔案路徑
	public static final String FONT = "/font/NotoSansCJKsc-Regular.otf";	//本地字型路徑(百度下載)
public static void main(String[] args) { try { HtmlToPdf html = new HtmlToPdf(); html.tomPdf(SRC, DEST); } catch (Exception e) { e.printStackTrace(); } } /** * HTML轉換成pdf * @param html html檔案路徑 * @param DEST 生成pdf的路徑 * @throws Exception */ public static void tomPdf(String html,
String DEST) throws Exception { ConverterProperties props = new ConverterProperties(); DefaultFontProvider defaultFontProvider = new DefaultFontProvider(false, false, false); defaultFontProvider.addFont(FONT); props.setFontProvider(defaultFontProvider); PdfWriter writer = new PdfWriter(DEST
); PdfDocument pdf = new PdfDocument(writer); pdf.setDefaultPageSize(new PageSize(595.0F, 842.0F)); Document document = HtmlConverter.convertToDocument(new FileInputStream(html), pdf, props); document.close(); pdf.close(); }
<!--將html轉換成pdf-->
        <dependency>
            <groupId>com.itextpdf</groupId>
            <artifactId>html2pdf</artifactId>
            <version>2.0.2</version>
        </dependency>
        <dependency>
            <groupId>com.itextpdf</groupId>
            <artifactId>font-asian</artifactId>
            <version>7.1.2</version>
        </dependency>
        <dependency>
            <groupId>com.itextpdf</groupId>
            <artifactId>barcodes</artifactId>
            <version>7.1.2</version>
        </dependency>

前端方式:(不推薦)
理由:解析度並不高,且預設不支援分頁

<script src="http://code.jquery.com/jquery-1.4.1.min.js"></script>
<script src="https://cdn.bootcss.com/html2canvas/0.5.0-beta4/html2canvas.js"></script>
<script src="https://cdn.bootcss.com/jspdf/1.3.4/jspdf.debug.js"></script>
$(function () {
	  //唯一需要修改的地方,將需要轉換的部分新增id屬性export_content
	  var target = document.getElementById("export_content");
	  
	  target.style.background = "#FFFFFF";
	  html2canvas(target, {
		onrendered:function(canvas) {
			var contentWidth = canvas.width;
			var contentHeight = canvas.height;

			//一頁pdf顯示html頁面生成的canvas高度;
			var pageHeight = contentWidth / 592.28 * 841.89;
			//未生成pdf的html頁面高度
			var leftHeight = contentHeight;
			//頁面偏移
			var position = 0;
			//a4紙的尺寸[595.28,841.89],html頁面生成的canvas在pdf中圖片的寬高
			var imgWidth = 595.28;
			var imgHeight = 592.28/contentWidth * contentHeight;

			var pageData = canvas.toDataURL('image/jpeg', 1.0);

			var pdf = new jsPDF('', 'pt', 'a4');

			//有兩個高度需要區分,一個是html頁面的實際高度,和生成pdf的頁面高度(841.89)
			//當內容未超過pdf一頁顯示的範圍,無需分頁
			if (leftHeight < pageHeight) {
			pdf.addImage(pageData, 'JPEG', 0, 0, imgWidth, imgHeight );
			} else {
				while(leftHeight > 0) {
					pdf.addImage(pageData, 'JPEG', 0, position, imgWidth, imgHeight)
					leftHeight -= pageHeight;
					position -= 841.89;
					//避免新增空白頁
					if(leftHeight > 0) {
					  pdf.addPage();
					}
				}
			}

			pdf.save("content.pdf");
		}
	  })
	})