1、IText实现html2pdf,速度快,纠错能力差,支持中文(要求HTML使用unicode编码),但中支持一种中文字体,开源。

2、Flying Sauser实现html2pdf,纠错能力差,支持多种中文字体(部分样式不能识别),开源。

3、PD4ML实现html2pdf,速度快,纠错能力强,支持多种中文字体,商业。

(一)IText

测试案例:TestIText.Java

依赖jar包:iText-2.0.8.jar、iTextAsian.jar(支持中文)

下面只是一个小的测试案例,如果项目中使用到了该组件可以参考API完成项目组中相应的功能!

import java.io.FileOutputStream;

import java.io.FileReader;

import java.util.ArrayList;

import com.lowagie.text.Document;

import com.lowagie.text.Element;

import com.lowagie.text.Font;

import com.lowagie.text.PageSize;

import com.lowagie.text.Paragraph;

import com.lowagie.text.html.simpleparser.HTMLWorker;

import com.lowagie.text.html.simpleparser.StyleSheet;

import com.lowagie.text.pdf.BaseFont;

import com.lowagie.text.pdf.PdfWriter;

public class TestIText{

public static void main(String[] args) {

TestIText ih = new TestIText();

ih.htmlCodeComeFromFile("D://Test//iText.html", "D://Test//iText_1.pdf");

ih.htmlCodeComeString("Hello中文", "D://Test//iText_2.pdf");

}

public void htmlCodeComeFromFile(String filePath, String pdfPath) {

Document document = new Document();

try {

StyleSheet st = new StyleSheet();

st.loadTagStyle("body", "leading", "16,0");

PdfWriter.getInstance(document, new FileOutputStream(pdfPath));

document.open();

ArrayList p = HTMLWorker.parseToList(new FileReader(filePath), st);

for(int k = 0; k

document.add((Element)p.get(k));

}

document.close();

System.out.println("文档创建成功");

}catch(Exception e) {

e.printStackTrace();

}

}

public void htmlCodeComeString(String htmlCode, String pdfPath) {

Document doc = new Document(PageSize.A4);

try {

PdfWriter.getInstance(doc, new FileOutputStream(pdfPath));

doc.open();

// 解决中文问题

BaseFont bfChinese = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);

Font FontChinese = new Font(bfChinese, 12, Font.NORMAL);

Paragraph t = new Paragraph(htmlCode, FontChinese);

doc.add(t);

doc.close();

System.out.println("文档创建成功");

}catch(Exception e) {

e.printStackTrace();

}

}

}

(二)Flying Sauser

依赖jar包:iText-2.0.8.jar、iTextAsian.jar、core-renderer.jar

默认情况下,core-renderer.jar对中文是不能进行换行的,如果想解决换行问题可以去http://bettereveryday.javaeye.com/blog/611561下载一个jar包,该包对源代码做了稍加修改.

下面只是一个小的测试案例,如果项目中使用到了该组件可以参考API完成项目组中相应的功能!

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 = "D:/Test/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("html PUBLIC /"-//W3C//DTD XHTML 1.0 Transitional//EN/" /"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd/">");

html.append("").append("

")

.append("")

.append("

body {font-family: SimSun;}

-->")

.append("")

.append("

");

html.append("

支持中文!

");

html.append("");

renderer.setDocumentFromString(html.toString());

// 解决图片的相对路径问题

// renderer.getSharedContext().setBaseURL("file:/F:/teste/html/");

renderer.layout();

renderer.createPDF(os);

os.close();

}

}

(三)PD4ML

依赖jar包:pd4ml_demo.jar、pd4ml__css2.jar、fonts.jar

下面只是一个小的测试案例,如果项目中使用到了该组件可以参考API完成项目组中相应的功能!

import java.awt.Insets;

import java.io.File;

import java.io.FileOutputStream;

import java.io.StringReader;

import org.zefer.pd4ml.PD4Constants;

import org.zefer.pd4ml.PD4ML;

public class Converter {

public static void main(String[] args) throws Exception {

Converter converter = new Converter();

converter.generatePDF_2(new File("D:/Test/demo_ch_pd4ml_a.pdf"), "D:/Test/a.htm");

File pdfFile = new File("D:/Test/demo_ch_pd4ml.pdf");

StringBuffer html = new StringBuffer();

html.append("")

.append("

")

.append("")

.append("")

.append("

")

.append("")

.append("显示中文")

.append("")

.append("");

StringReader strReader = new StringReader(html.toString());

converter.generatePDF_1(pdfFile, strReader);

}

// 手动构造HTML代码

public void generatePDF_1(File outputPDFFile, StringReader strReader) throws Exception {

FileOutputStream fos = new FileOutputStream(outputPDFFile);

PD4ML pd4ml = new PD4ML();

pd4ml.setPageInsets(new Insets(20, 10, 10, 10));

pd4ml.setHtmlWidth(950);

pd4ml.setPageSize(pd4ml.changePageOrientation(PD4Constants.A4));

pd4ml.useTTF("java:fonts", true);

pd4ml.setDefaultTTFs("KaiTi_GB2312", "KaiTi_GB2312", "KaiTi_GB2312");

pd4ml.enableDebugInfo();

pd4ml.render(strReader, fos);

}

// HTML代码来自于HTML文件

public void generatePDF_2(File outputPDFFile, String inputHTMLFileName) throws Exception {

FileOutputStream fos = new FileOutputStream(outputPDFFile);

PD4ML pd4ml = new PD4ML();

pd4ml.setPageInsets(new Insets(20, 10, 10, 10));

pd4ml.setHtmlWidth(950);

pd4ml.setPageSize(pd4ml.changePageOrientation(PD4Constants.A4));

pd4ml.useTTF("java:fonts", true);

pd4ml.setDefaultTTFs("KaiTi_GB2312", "KaiTi_GB2312", "KaiTi_GB2312");

pd4ml.enableDebugInfo();

pd4ml.render("file:" + inputHTMLFileName, fos);

}

}

参考资料:

生成PDF文档的方案大致就这些了,希望能够给大家带来帮助!如果上面的三种方案都还不能满足项目组的需求哪就只有去买商业软件了。

转载自--http://blog.csdn.net/zdtwyjp/article/details/5769353#

html生成pdf java_Java实现HTML代码生成PDF文档相关推荐

  1. 使用OCR技术将扫描PDF转换为可编辑的Word文档。

    随着技术的发展,越来越多的文档以PDF格式存储和分享.不过,PDF文档通常是静态的,不能编辑.如果您需要编辑PDF文件中的文本,您可以使用光学字符识别(OCR)技术将PDF转换为可编辑的Word文档. ...

  2. 谈谈PDF如何快速转成Word文档

    谈谈PDF如何快速转成Word文档 不同的转换工具对纸质的图书十倍都有缺陷,有的仅能转换简单的文字,对图片表格无能为 力,有的转换生成的文件是乱起八糟的,无法使用.还在为PDF文件怎么转换成Word文 ...

  3. 如何翻译英文PDF?如何翻译英文word文档?

    如何翻译英文PDF?如何翻译英文word文档? 无论是写论文的学生,还是查阅需求文档的程序猿,都会接触各种英文的文档.大部分人的英语水平,在面对满是专业词汇的文献时想必都是一败涂地.现在市面上的一些翻 ...

  4. 前格式 直接将转换为当_如何将word转化为PDF格式?1分钟学会文档转换

    如何将word转化为PDF格式?不知道大家在学习和工作中有没有遇到过文件转换的问题,基本上所有的人在使用了各种数据文档后,都有为了文档格式转换而发愁的,因此这里重点给大家介绍一些文件转换的工具和方法, ...

  5. PDF应该怎么转换成Excel文档呢?

    在日常办公中,经常会遇到很多类型的文件,其中有Word.PDF.excel.PPT等.毕竟不同用途,准备不同的文件格式.这时就需要的格式在进行转换,有时候我们会遇到需要将pdf文件转换成excel格式 ...

  6. pdf编辑器如何缩放和平移文档

    很多人现在都比较熟悉PDF格式的文档,它是我们现在比较流行和常用的一种格式,想要快速有效的使用PDF格式文档,大家肯定都会利用一些软件的帮助,那么pdf编辑器如何缩放和平移文档?针对这个问题,小编就详 ...

  7. 【电脑办公软件】万彩办公大师教程丨PDF批量转SWF工具帮助文档

    PDF批量转SWF工具帮助文档 关于万彩办公大师的PDF批量转SWF工具 拖拽式添加文件,自定义单个PDF页面输出SWF或自动播放SWF,无损转换,批量操作.文件格式转换后可保持原有文档的版式.图片. ...

  8. pdf文件如何转换成word文档呢?

    在日常办公中经常会因为一些文件格式而头疼,比如说遇到PDF转换成Word格式的需求,毕竟PDF编辑起来很不方便.如果你想修改内容,你必须先把PDF转换成其他格式.比如word文档就是一个很好的选择,而 ...

  9. Java下使用Apache POI生成具有三级联动下拉列表的Excel文档

    使用Apache POI生成具有三级联动下拉列表的Excel文档: 具体效果图与代码如下文. 先上效果图: 开始贴代码,代码中部分测试数据不影响功能. 第一部分(核心业务处理): 此部分包含几个方面: ...

  10. Java使用POI生成饼状图导出到word文档(饼状图)

    本篇文章主要介绍,如何使用Apache POI组件生成饼状图导出到word文档中,具体步骤看下文. 一.实现效果 Java使用POI技术生成饼状图导出到word文档中,最终生成的饼状图如下所示: 二. ...

最新文章

  1. CentOs7中安装python3.7.6
  2. celery mysql flask_如何在Flask中创建Celery实例?
  3. windows 2008 server R2 版本概览
  4. IOS NSArray 倒序
  5. excel撤销工作表保护默认密码_我的表格我做主:Excel工作表不想被别人改动,设置一个密码保护...
  6. Oracle 存储过程入门
  7. HIBERNATE 持久化基础
  8. 类中匿名函数如何从 event 中去除
  9. 面试官:HTTPS 为什么是安全的?说一下他的底层实现原理?
  10. 查看目录是否为内存盘_CentOS系列002:挂载数据盘
  11. centos7 install virt-sysprep
  12. 如何利用webpack4.0搭建一个vue项目
  13. sicily 1002. Anti-prime Sequences
  14. wav音频文件格式解析【个人笔记】(自用)
  15. wifi信号增强android,WiFi信号增强大师
  16. word2019如何删除段落文字带颜色的背景
  17. apktool下载安装
  18. 【沐风老师】3DMAX一键生成圣诞树建模插件使用教程
  19. mysql varchar 单引号_char、varchar数据类型值在使用时可以要用单引号或双引号括起来。...
  20. websocket系列:基于netty-websocket-spring-boot-starter轻松实现高性能websocket

热门文章

  1. Java图形编程实验总结_java 图形用户界面编程实验报告.doc
  2. android 8.1官方刷机包,一加5T安卓8原生系统刷机包(安卓原生固件升级包V8.1.0)...
  3. ZPLII 指令参考
  4. 复杂网络作业四:第三题——随机图、小世界网络和真实网络的度分布
  5. 达梦数据库dm8使用心得
  6. 金仓数据库学习笔记(一)
  7. 金仓数据库KingbaseES数据库管理员指南--15.1. 管理视图
  8. 计算机科学期刊是a类还是b类,期刊的A类B类C类什么意思
  9. 声乐表演中肢体语言的功能及运用
  10. 把计算机怎么连接手机的网络助手在哪里,手机如何连接电脑上网