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;
public class TestFlyingSauser
{
public static void main( String[] args ) throws Exception
{
// demo_1();
demo_2();
}
// 不支持中文
public static void 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();
}
// 支持中文
public static void demo_2() throws Exception {
String outputFile = "G:/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("<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();
}}
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Document;
import org.xhtmlrenderer.pdf.ITextFontResolver;
import org.xhtmlrenderer.pdf.ITextRenderer;
public class HTML2PDF {
/**
* 调用方式 htmlToPDF(response.getOutputStream(), htmlstr, "C:/WINDOWS/Fonts/simfang.ttf", "FangSong_GB2312", "GB2312", "http://xxxx/dtd/xhtml1-transitional.dtd");
*
* 相关图片必须使用绝对路径才能显示 如果要下载生成的文件,在此方法上方加上:
* response.setHeader("Content-disposition",
* "attachment;filename=英文文件名.pdf");
*
* @param 参数
* @param OutputStream out 输出流
* @param String htmlcode html代码。
*
* @param String fontName 字体名称 如:FangSong_GB2312
* @param String fontpath windows 字体路径 如:C:/WINDOWS/Fonts/simfang.ttf
* @param String encoding 编码 如:GB2312。
* @param String htmlDTDURL 如:http://xxxx/xhtml1-transitional.dtd
* version 2009.03.05
*/
public void htmlToPDF(OutputStream out, String htmlcode, String fontpath,
String
fontName, String encoding, String htmlDTDURL) throws Exception {
DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
ByteArrayOutputStream bos = new ByteArrayOutputStream();
Transformer transformer = TransformerFactory.newInstance()
.newTransformer();
ITextRenderer renderer = new ITextRenderer();
ITextFontResolver resolver = renderer.getFontResolver();
InputStream intream = null;
Document doc = null;
Document doc2 = null;
try {
htmlcode = this.filterHeader(htmlcode,
encoding, fontName, htmlDTDURL);
intream = new ByteArrayInputStream(htmlcode.getBytes(encoding));
doc = (Document) builder.parse(intream);
transformer.setOutputProperty("encoding", encoding);
new DOMSource(doc);
transformer.transform(new DOMSource(doc), new StreamResult(bos));
intream = new ByteArrayInputStream(bos.toString().getBytes());
doc2 = (Document) builder.parse(intream);
resolver.addFont(fontpath, BaseFont.IDENTITY_H,
BaseFont.NOT_EMBEDDED);
renderer.setDocument(doc2, null);
renderer.layout();
renderer.createPDF(out, true);
out.flush();
out.close();
} catch (Exception ex) {
throw new Exception(ex.getMessage());
}
}
/**
*文件头
*/
private String filterHeader(String htmlcode, String encoding,String fontName,String htmlDTDURL) {
htmlcode="<table style=\"font-family:FangSong_GB2312\" width=\"100%\" height=\"100%\" border=\"0\"><tr><td>"+htmlcode+"</td></tr></table>";
htmlcode="<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \""+htmlDTDURL+"\" >\n"+htmlcode;
htmlcode = "<?xml version=\"1.0\" encoding=\"" + encoding + "\" ?>\n"
+ htmlcode;
return htmlcode;
}
}
分享到:
相关推荐
java实现html转pdf,包含后端代码,html测试页面,pom依赖,jar包,如页面过于复杂需调整页面,有些样式itextpdf不支持,请寻找其它样式替换。
该包包含后端代码,转换控件,测试文件,正式项目应用表现正常,注意不能转换水印、印章这类特殊类型,且行且珍惜。
Java把HTML转PDF,项目导入eclipse直接可以跑。可以作为HTML转PDF参考
java html转pdf图片不显示 Java实现Html转PDF
支持word、excel、ppt、wps、txt等多种格式转pdf、并支持pdf转word。个人感觉非常好用。
全面支持DOC, DOCX, OOXML, RTF HTML, OpenDocument, PDF, EPUB, XPS, SWF 相互转换 ,word转pdf已做测试很好用!
java实现html转pdf,包括解决base64图片以及中文不显示问题
将html文件转换成pdf文件,并在指定位置添加印章图片
java实现HTML转PDF语言支持,解决乱码问题,把这个文件上传到云服务器上面去。
Java实现HTML转PDF的解决方案.docx
实现思路: 1、通过URL获取当前HMTL页面的内容: URL urls = new URL(url); String urlsource = getURLSource(urls); 2、从后台获取数据库内容,内容是JSon格式保存的,把先JSon格式内容转化成Map //获取Map值 ...
java程序html转pdf源码 ,导入可直接运行,转化包括一些比较复杂的都可以转化
java测试工具html转pdf
java使用itext实现pdf文件下载小案例,通过系统路径下载,和通过浏览器下载
1.使用java代码调用压缩包内wkhtmltopdf.exe。 2.写入对应url及其其他参数 3.调用代码即可生成,亲测有效好用 4.内附示例代码
用java实现html文件转pdf文件 使用pd4ml 无水印 pd4m有点:对html文档格式要求低。 缺点:对某些css元素支持能力有限,比如css:thin 适用于样式简单的html转换
java后端实现html转pdf的工具类,pd4ml最新3100pro支持中文版本的jar包,无水印的,包括pd4ml.jar、fonts.jar和sc_css2.jar
而目前开源的组件中,Itext的确是一个First Choice,如果各位单纯是做把图片转成PDF或者自己写了Velocity或者FreeMarker模板生成了HTML是非常推荐直接用Itext来进行的。而如果,大家像我这样已经有前人写好了HTML...