動態jsp頁面轉pdf項目示例

最近讓座一個pdf報告,需要用到jsp轉pdf,在網上找了好多文章看,但是都是講的雲裏霧裏,在這我給大家整理一下,希望能幫助到你。

首先我先貼出我的處理類:

package net.zkbc.mp.util;

import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.InputStreamReader;

import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;


import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;


import org.xhtmlrenderer.pdf.ITextFontResolver;
import org.xhtmlrenderer.pdf.ITextRenderer;




import com.lowagie.text.pdf.BaseFont;

import org.w3c.dom.Document;


/**
 * 對html的規範要求極高,例如:頁面中<mate></mate>必須閉合,必須: <br />
 * 
 * <pre>
 * <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 * "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html
 * xmlns="http://www.w3.org/1999/xhtml">
 * 
 * @author zsj
 *
 */
public class PdfUtil {
	public static void main(String[] args) throws Exception {
		System.out.println("開始了=====");
		htmlToPdf2("I:/pdf/11111.pdf","http://localhost:8081/Print/index2.html");
		System.out.println("結束了=====");
		//htmlToPdf("/data/fs/sinspector/BJ20150522001.pdf","http://localhost:8080/Print/index2.html");
		//htmlToPdf("/data/fs/sinspector/BJ20150522001.pdf","http://localhost:8080/Print/index2.html");
	}
	
	
	public static String getUrlContent(String uri){
		StringBuffer data=new StringBuffer();
		try {  
            //建立連接  
            URL url = new URL(uri);  
            HttpURLConnection httpUrlConn = (HttpURLConnection) url.openConnection();  
            httpUrlConn.setDoInput(true);  
            httpUrlConn.setRequestMethod("GET");  
            httpUrlConn.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");
            //獲取輸入流  
            InputStream input = httpUrlConn.getInputStream();
            //將字節輸入流轉換爲字符輸入流
            InputStreamReader read = new InputStreamReader(input, "utf-8");
            //爲字符輸入流添加緩衝
            BufferedReader br = new BufferedReader(read);  
            // 讀取返回結果  
            String s=null;
            while((s=br.readLine())!=null)  {
                System.out.println(s);
                data.append(s);
            }  
            // 釋放資源  
            br.close();  
            read.close();  
            input.close();  
            httpUrlConn.disconnect();  
        } catch (Exception e) {
            e.printStackTrace();
        }
		return data.toString();
	}

	/**
	 * 把URL轉換爲PDF
	 * 
	 * @param outputFile
	 *            , 示例:/data/fs/inspector/BJ20150522001.pdf
	 * @param url
	 *            ,示例:html 頁面
	 * @return
	 * @throws Exception
	 */
	public static boolean htmlToPdf(String outputFile, String url)throws Exception {
		File outFile = new File(outputFile);
		if (!outFile.exists()) {
			outFile.getParentFile().mkdirs();
		}
		
		
		OutputStream os = new FileOutputStream(outputFile);
		//url樣例 這是通過ajax傳遞過來的 我這個項目沒有配置ssh 所以就給了一個樣例
	//	url = "<?xml version='1.0' encoding='UTF-8'?><html xmlns='http://www.w3.org/1999/xhtml'><head><title>頁面打印</title><style media= 'print' > @page{size:297mm 210mm;}; .page { page-break-after: always; } </style>  <style type='text/css'> .tab td {  border-bottom: 1 solid #000000;  border-left: 1 solid #000000;  border-right: 0 solid #ffffff;  border-top: 0 solid #ffffff;  }  .tab {  border-color: #000000 #000000 #000000 #000000;  border-style: solid;  border-top-width: 2px;  border-right-width: 2px;   border-bottom-width: 1px;  border-left-width: 1px;  }    .hr {  font-family: '宋體';  font-size: 9pt;  }   </style>  </head>   <body bgcolor='white' style='font-family:SimSun; height:100%;' screen_capture_injected='true' ryt11773='1'>   <table cellspacing='0' cellpadding='0' width='100%' align='center' >  <tr>  <td align='center' colspan='3' style='font-size: 24px'>  <b id ='pdf_text'>報告印章申請表</b>  </td>  </tr>   <tr>  <td align='left' >子賬戶:600117332664</td> <td align='left'  >戶名:王樹</td> <td align='center'  >起始日期:20170607</td>  </tr>   <tr> <td align='left' colspan='2' >開戶行:深圳農商行 </td> <td align='center' >終止日期:20170607 </td> </tr>   <tr>   <td colspan='3'> <table class='tab' cellSpacing='0' cellPadding='0' width='100%' border='1' >  <tr align='center' height='23'>  <td width='10%' height='23' colspan='3'>子賬戶:000117332670</td> <td width='10%' colspan='4' >幣種:000117332670</td> <td width='10%' colspan='4' >產品類型:個人人民幣</td>   </tr>   <tr align='center' height='23'>  <td width='5%' height='23'>交易日期</td>  <td width='5%'>摘要</td>  <td width='12%'>借方交易金額</td>  <td width='12%'>貸方交易金額</td>   <td width='12%'>賬戶餘額</td> <td width='12%'>對方戶名</td>  <td width='12%'>對方行號</td>  <td width='7%'>憑證類型</td>  <td width='8%'>憑證號碼</td>  <td width='10%'>交易機構</td>  <td width='10%'>備註</td> </tr>  <tr style='font-size: 13px' align='center' height='23'>  <td align='center'>20160101</td>  <td align='center' style='font-family:SimHei '>自助匯款</td>  <td  align='right' id ='pdf_text2' > 22.00</td>  <td align='right' >213123123.00</td>   <td align='right'>490000000.00</td>   <td align='center'>足足</td>  <td align='center' >中國工商銀行</td>  <td align='center'>存摺</td>  <td align='center'></td>  <td align='center'>00003</td> <td align='center'>拿去花</td> </tr>   <tr style='font-size: 13px' align='center' height='23'>  <td align='center'>20160101</td>  <td align='center' style='font-family:SimHei '>自助匯款</td>  <td  align='right' id ='pdf_text2' > 22.00</td>  <td align='right' >213123123.00</td>   <td align='right'>490000000.00</td>   <td align='center'>足足</td>  <td align='center' >中國工商銀行</td>  <td align='center'>存摺</td>  <td align='center'></td>  <td align='center'>00003</td> <td align='center'>拿去花</td> </tr>   <tr style='font-size: 13px' align='center' height='23'>  <td align='center'>20160101</td>  <td align='center' style='font-family:SimHei '>自助匯款</td>  <td  align='right' id ='pdf_text2' > 22.00</td>  <td align='right' >213123123.00</td>   <td align='right'>490000000.00</td>   <td align='center'>足足</td>  <td align='center' >中國工商銀行</td>  <td align='center'>存摺</td>  <td align='center'></td>  <td align='center'>00003</td> <td align='center'>拿去花</td> </tr>   <tr style='font-size: 13px' align='center' height='23'>  <td align='center'>20160101</td>  <td align='center' style='font-family:SimHei '>自助匯款</td>  <td  align='right' id ='pdf_text2' > 22.00</td>  <td align='right' >213123123.00</td>   <td align='right'>490000000.00</td>   <td align='center'>足足</td>  <td align='center' >中國工商銀行</td>  <td align='center'>存摺</td>  <td align='center'></td>  <td align='center'>00003</td> <td align='center'>拿去花</td> </tr>   <tr style='font-size: 13px' align='center' height='23'>  <td align='center'>20160101</td>  <td align='center' style='font-family:SimHei '>自助匯款</td>  <td  align='right' id ='pdf_text2' > 22.00</td>  <td align='right' >213123123.00</td>   <td align='right'>490000000.00</td>   <td align='center'>足足</td>  <td align='center' >中國工商銀行</td>  <td align='center'>存摺</td>  <td align='center'></td>  <td align='center'>00003</td> <td align='center'>拿去花</td> </tr>   <tr style='font-size: 13px' align='center' height='23'>  <td align='center'>20160101</td>  <td align='center' style='font-family:SimHei '>自助匯款</td>  <td  align='right' id ='pdf_text2' > 22.00</td>  <td align='right' >213123123.00</td>   <td align='right'>490000000.00</td>   <td align='center'>足足</td>  <td align='center' >中國工商銀行</td>  <td align='center'>存摺</td>  <td align='center'></td>  <td align='center'>00003</td> <td align='center'>拿去花</td> </tr>   <tr style='font-size: 13px' align='center' height='23'>  <td align='center'>20160101</td>  <td align='center' style='font-family:SimHei '>自助匯款</td>  <td  align='right' id ='pdf_text2' > 22.00</td>  <td align='right' >213123123.00</td>   <td align='right'>490000000.00</td>   <td align='center'>足足</td>  <td align='center' >中國工商銀行</td>  <td align='center'>存摺</td>  <td align='center'></td>  <td align='center'>00003</td> <td align='center'>拿去花</td> </tr>   <tr style='font-size: 13px' align='center' height='23'>  <td align='center'>20160101</td>  <td align='center' style='font-family:SimHei '>自助匯款</td>  <td  align='right' id ='pdf_text2' > 22.00</td>  <td align='right' >213123123.00</td>   <td align='right'>490000000.00</td>   <td align='center'>足足</td>  <td align='center' >中國工商銀行</td>  <td align='center'>存摺</td>  <td align='center'></td>  <td align='center'>00003</td> <td align='center'>拿去花</td> </tr>   <tr style='font-size: 13px' align='center' height='23'>  <td align='center'>20160101</td>  <td align='center' style='font-family:SimHei '>自助匯款</td>  <td  align='right' id ='pdf_text2' > 22.00</td>  <td align='right' >213123123.00</td>   <td align='right'>490000000.00</td>   <td align='center'>足足</td>  <td align='center' >中國工商銀行</td>  <td align='center'>存摺</td>  <td align='center'></td>  <td align='center'>00003</td> <td align='center'>拿去花</td> </tr>   <tr style='font-size: 13px' align='center' height='23'>  <td align='center'>20160101</td>  <td align='center' style='font-family:SimHei '>自助匯款</td>  <td  align='right' id ='pdf_text2' > 22.00</td>  <td align='right' >213123123.00</td>   <td align='right'>490000000.00</td>   <td align='center'>足足</td>  <td align='center' >中國工商銀行</td>  <td align='center'>存摺</td>  <td align='center'></td>  <td align='center'>00003</td> <td align='center'>拿去花</td> </tr>   <tr style='font-size: 13px' align='center' height='23'>  <td align='center'>20160101</td>  <td align='center' style='font-family:SimHei '>自助匯款</td>  <td  align='right' id ='pdf_text2' > 22.00</td>  <td align='right' >213123123.00</td>   <td align='right'>490000000.00</td>   <td align='center'>足足</td>  <td align='center' >中國工商銀行</td>  <td align='center'>存摺</td>  <td align='center'></td>  <td align='center'>00003</td> <td align='center'>拿去花</td> </tr>      </table>   </td>  </tr>  </table>   </body></html>";
		DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
		String content=getUrlContent(url);
		System.out.println("content===:"+content);
		Document doc = builder.parse(new ByteArrayInputStream(url.getBytes("utf-8")));
		
		//Document document = new Document(PageSize.A4, 50, 50, 50, 50);
		ITextRenderer renderer = new ITextRenderer();
		
		renderer.setDocument(doc, null);
		
		//renderer.setDocument(url);
		String fontPath = PdfUtil.class.getClassLoader().getResource("").toString().replaceAll("file:/", "")+ "simsun.ttc";
		System.out.println(fontPath);
	
		
		// 解決中文支持問題
		ITextFontResolver fontResolver = renderer.getFontResolver();
		fontResolver.addFont(fontPath, BaseFont.IDENTITY_H,BaseFont.NOT_EMBEDDED);
		renderer.layout();
		renderer.createPDF(os);
		os.flush();
		os.close();
		
		
		System.out.println("文件轉換成功");
		return true;
	}	
	
	/**
	 * 把URL轉換爲PDF
	 * 
	 * @param outputFile
	 *            , 示例:/data/fs/inspector/BJ20150522001.pdf
	 * @param url
	 *            ,示例:http :xxxx
	 * @return
	 * @throws Exception
	 */
	public static boolean htmlToPdf2(String outputFile, String url)
			throws Exception {
		File outFile = new File(outputFile);
		if (!outFile.exists()) {
			outFile.getParentFile().mkdirs();
		}
		OutputStream os = new FileOutputStream(outputFile);
		ITextRenderer renderer = new ITextRenderer();

		renderer.setDocument(url);
		String fontPath = PdfUtil.class.getClassLoader().getResource("").toString().replaceAll("file:/", "")+ "simsun.ttc";
		System.out.println(fontPath);
		// 解決中文支持問題
		ITextFontResolver fontResolver = renderer.getFontResolver();
		fontResolver.addFont(fontPath, BaseFont.IDENTITY_H,BaseFont.NOT_EMBEDDED);
		renderer.layout();
		renderer.createPDF(os);
		os.flush();
		os.close();
		System.out.println("文件轉換成功");
		return true;
	}
		
	
}

期次是頁面:

<html>
<head>
<title>頁面打印</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<style type='text/css'>
.tab td {
	border-bottom: 1 solid #000000;
	border-left: 1 solid #000000;
	border-right: 0 solid #ffffff;
	border-top: 0 solid #ffffff;
}

.tab {
	border-color: #000000 #000000 #000000 #000000;
	border-style: solid;
	border-top-width: 2px;
	border-right-width: 2px;
	border-bottom-width: 1px;
	border-left-width: 1px;
}

.hr {
	font-family: '宋體';
	font-size: 9pt;
}
</style>
</head>
<body bgcolor='white' style='font-family:SimSun; height:100%;'
	screen_capture_injected='true' ryt11773='1'>
	<table cellspacing='0' cellpadding='0' width='100%' align='center'>
		<tr>
			<td align='center' colspan='3' style='font-size: 24px'><b
				id='pdf_text'>報告印章申請表</b></td>
		</tr>
		<tr>
			<td align='left'>子賬戶:600117332664</td>
			<td align='left'>戶名:王樹</td>
			<td align='center'>起始日期:20170607</td>
		</tr>
		<tr>
			<td align='left' colspan='2'>開戶行:深圳農商行</td>
			<td align='center'>終止日期:20170607</td>
		</tr>
		<tr>
			<td colspan='3'>
				<table class='tab' cellSpacing='0' cellPadding='0' width='100%'
					border='1'>
					<tr align='center' height='23'>
						<td width='10%' height='23' colspan='3'>子賬戶:000117332670</td>
						<td width='10%' colspan='4'>幣種:000117332670</td>
						<td width='10%' colspan='4'>產品類型:個人人民幣</td>
					</tr>
					<tr align='center' height='23'>
						<td width='5%' height='23'>交易日期</td>
						<td width='5%'>摘要</td>
						<td width='12%'>借方交易金額</td>
						<td width='12%'>貸方交易金額</td>
						<td width='12%'>賬戶餘額</td>
						<td width='12%'>對方戶名</td>
						<td width='12%'>對方行號</td>
						<td width='7%'>憑證類型</td>
						<td width='8%'>憑證號碼</td>
						<td width='10%'>交易機構</td>
						<td width='10%'>備註</td>
					</tr>
					<tr style='font-size: 13px' align='center' height='23'>
						<td align='center'>20160101</td>
						<td align='center' style='font-family:SimHei '>自助匯款</td>
						<td align='right' id='pdf_text2'>22.00</td>
						<td align='right'>213123123.00</td>
						<td align='right'>490000000.00</td>
						<td align='center'>足足</td>
						<td align='center'>中國工商銀行</td>
						<td align='center'>存摺</td>
						<td align='center'></td>
						<td align='center'>00003</td>
						<td align='center'>拿去花</td>
					</tr>
					<tr style='font-size: 13px' align='center' height='23'>
						<td align='center'>20160101</td>
						<td align='center' style='font-family:SimHei '>自助匯款</td>
						<td align='right' id='pdf_text2'>22.00</td>
						<td align='right'>213123123.00</td>
						<td align='right'>490000000.00</td>
						<td align='center'>足足</td>
						<td align='center'>中國工商銀行</td>
						<td align='center'>存摺</td>
						<td align='center'></td>
						<td align='center'>00003</td>
						<td align='center'>拿去花</td>
					</tr>
					<tr style='font-size: 13px' align='center' height='23'>
						<td align='center'>20160101</td>
						<td align='center' style='font-family:SimHei '>自助匯款</td>
						<td align='right' id='pdf_text2'>22.00</td>
						<td align='right'>213123123.00</td>
						<td align='right'>490000000.00</td>
						<td align='center'>足足</td>
						<td align='center'>中國工商銀行</td>
						<td align='center'>存摺</td>
						<td align='center'></td>
						<td align='center'>00003</td>
						<td align='center'>拿去花</td>
					</tr>
					<tr style='font-size: 13px' align='center' height='23'>
						<td align='center'>20160101</td>
						<td align='center' style='font-family:SimHei '>自助匯款</td>
						<td align='right' id='pdf_text2'>22.00</td>
						<td align='right'>213123123.00</td>
						<td align='right'>490000000.00</td>
						<td align='center'>足足</td>
						<td align='center'>中國工商銀行</td>
						<td align='center'>存摺</td>
						<td align='center'></td>
						<td align='center'>00003</td>
						<td align='center'>拿去花</td>
					</tr>
					<tr style='font-size: 13px' align='center' height='23'>
						<td align='center'>20160101</td>
						<td align='center' style='font-family:SimHei '>自助匯款</td>
						<td align='right' id='pdf_text2'>22.00</td>
						<td align='right'>213123123.00</td>
						<td align='right'>490000000.00</td>
						<td align='center'>足足</td>
						<td align='center'>中國工商銀行</td>
						<td align='center'>存摺</td>
						<td align='center'></td>
						<td align='center'>00003</td>
						<td align='center'>拿去花</td>
					</tr>
					<tr style='font-size: 13px' align='center' height='23'>
						<td align='center'>20160101</td>
						<td align='center' style='font-family:SimHei '>自助匯款</td>
						<td align='right' id='pdf_text2'>22.00</td>
						<td align='right'>213123123.00</td>
						<td align='right'>490000000.00</td>
						<td align='center'>足足</td>
						<td align='center'>中國工商銀行</td>
						<td align='center'>存摺</td>
						<td align='center'></td>
						<td align='center'>00003</td>
						<td align='center'>拿去花</td>
					</tr>
					<tr style='font-size: 13px' align='center' height='23'>
						<td align='center'>20160101</td>
						<td align='center' style='font-family:SimHei '>自助匯款</td>
						<td align='right' id='pdf_text2'>22.00</td>
						<td align='right'>213123123.00</td>
						<td align='right'>490000000.00</td>
						<td align='center'>足足</td>
						<td align='center'>中國工商銀行</td>
						<td align='center'>存摺</td>
						<td align='center'></td>
						<td align='center'>00003</td>
						<td align='center'>拿去花</td>
					</tr>
					<tr style='font-size: 13px' align='center' height='23'>
						<td align='center'>20160101</td>
						<td align='center' style='font-family:SimHei '>自助匯款</td>
						<td align='right' id='pdf_text2'>22.00</td>
						<td align='right'>213123123.00</td>
						<td align='right'>490000000.00</td>
						<td align='center'>足足</td>
						<td align='center'>中國工商銀行</td>
						<td align='center'>存摺</td>
						<td align='center'></td>
						<td align='center'>00003</td>
						<td align='center'>拿去花</td>
					</tr>
					<tr style='font-size: 13px' align='center' height='23'>
						<td align='center'>20160101</td>
						<td align='center' style='font-family:SimHei '>自助匯款</td>
						<td align='right' id='pdf_text2'>22.00</td>
						<td align='right'>213123123.00</td>
						<td align='right'>490000000.00</td>
						<td align='center'>足足</td>
						<td align='center'>中國工商銀行</td>
						<td align='center'>存摺</td>
						<td align='center'></td>
						<td align='center'>00003</td>
						<td align='center'>拿去花</td>
					</tr>
					<tr style='font-size: 13px' align='center' height='23'>
						<td align='center'>20160101</td>
						<td align='center' style='font-family:SimHei '>自助匯款</td>
						<td align='right' id='pdf_text2'>22.00</td>
						<td align='right'>213123123.00</td>
						<td align='right'>490000000.00</td>
						<td align='center'>足足</td>
						<td align='center'>中國工商銀行</td>
						<td align='center'>存摺</td>
						<td align='center'></td>
						<td align='center'>00003</td>
						<td align='center'>拿去花</td>
					</tr>
					<tr style='font-size: 13px' align='center' height='23'>
						<td align='center'>20160101</td>
						<td align='center' style='font-family:SimHei '>自助匯款</td>
						<td align='right' id='pdf_text2'>22.00</td>
						<td align='right'>213123123.00</td>
						<td align='right'>490000000.00</td>
						<td align='center'>足足</td>
						<td align='center'>中國工商銀行</td>
						<td align='center'>存摺</td>
						<td align='center'></td>
						<td align='center'>00003</td>
						<td align='center'>拿去花</td>
					</tr>
				</table></td>
		</tr>
	</table>
</body>
</html>

運行效果:


pdf類容截圖:


好了效果和代碼貼出來了,現在來說一下注意事項:

1.首先這裏面需要jar包和一箇中文處理的字符包,這些都在項目中可以找到,我會將項目上傳到我的資源中

資源地址:https://download.csdn.net/download/huxiangen/10467823

2.注意頁面中的body標籤中的屬性,很重要,很重要,很重要。重要的事情說三遍!!!!

好了大概就這麼多,有需要探討的可以給我評論,我看見了會及時給你們回覆。

發佈了63 篇原創文章 · 獲贊 189 · 訪問量 19萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章