给定一个页面路径,先要求将此路径的内容直接转换为pdf文件。
解决思路:
1 使用Jsoup开源包(一个HTML解析器)解析给定路径(jsp文件)的Html内容(这个文件可以是不规则的html文件),得到规范化的html字符串。
2 使用flying sauser 开源包,处理得到的html字符串
3 使用iText打印成pdf
中文处理:
在html文件的style中添加:
body {
font-family: SimSun;
}
下面是一简单测试用例:
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.URL;
import org.jsoup.Jsoup;
import org.xhtmlrenderer.pdf.ITextFontResolver;
import org.xhtmlrenderer.pdf.ITextRenderer;
import com.lowagie.text.DocumentException;
import com.lowagie.text.pdf.BaseFont;
public class Test {
public static void main(String[] args) throws IOException, DocumentException {
String pagePath ="http://localhost:8080/clims/";
pagePath = pagePath+"lookReport.htm?ordermId=7801&userId=1";
URL url = new URL(pagePath);
String urlStr = new File(pagePath).toURI().toURL().toString();
System.out.println(urlStr);
// Document doc = XMLResource.load(new InputSource(url)).getDocument();
ITextRenderer renderer = new ITextRenderer();
//renderer.setDocument(doc,url);
// org.jsoup.nodes.Document jsoupDoc = Jsoup.parse(new File(pagePath), "UTF-8");
org.jsoup.nodes.Document jsoupDoc = Jsoup.parse(url, 10000000);
System.out.println(jsoupDoc.html());
String html = jsoupDoc.html();
html = html.replaceAll(" ", " ");
renderer.setDocumentFromString(html);
// 解决图片的相对路径问题
renderer.getSharedContext().setBaseURL("file:/D:/Eclipse3.5/workspace/Test/html/");
// 解决中文支持问题
ITextFontResolver fontResolver = renderer.getFontResolver();
fontResolver.addFont("C:/Windows/Fonts/SIMSUN.TTC", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
renderer.layout();
String outputFile = "firstdoc.pdf";
OutputStream os = new FileOutputStream(outputFile);
renderer.createPDF(os);
}
}