文档章节

html生成pdf

开源中国首席碉堡了
 开源中国首席碉堡了
发布于 2015/08/23 22:57
字数 605
阅读 93
收藏 0

1、  准备jar

commons-collections-3.2.1.jar

commons-lang-2.6.jar

core-renderer-chinese-1.0.0.jar

iText-2.0.8.jar

velocity-1.6.4.jar

2、  创建模板result.html

<!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">

<head>

<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />

<style type="text/css">

*{font-family: "STFangsong";}

</style>

</head>

<body>

文本内容

</body>

</html>

3、 准备字体D:\ STFANGSO.TTF

4、  调用工具类

5、 import java.io.BufferedOutputStream;

6、 import java.io.File;

7、 import java.io.FileOutputStream;

8、 import java.io.OutputStream;

9、 import java.io.StringWriter;

10、      import java.util.Map;

11、      import java.util.Properties;

12、      import org.apache.velocity.VelocityContext;

13、      import org.apache.velocity.app.Velocity;

14、      import org.apache.velocity.app.VelocityEngine;

15、      import org.xhtmlrenderer.pdf.ITextFontResolver;

16、      import org.xhtmlrenderer.pdf.ITextRenderer;

17、       

18、      import com.lowagie.text.pdf.BaseFont;

27、      public class PdfUtils{

28、       

29、          private static final String PDF = ".pdf";

30、          private static final String HTML = ".html";

31、       

32、          private static final VelocityEngine ENGINE = new VelocityEngine();

33、       

34、          static {

35、             Properties properties = new Properties();

36、             properties.put(Velocity.FILE_RESOURCE_LOADER_PATH, "D:\\");

37、             try {

38、                 ENGINE.init(properties);

39、             } catch (Exception e) {

40、                 // TODO Auto-generated catch block

41、                 e.printStackTrace();

42、             }

43、          }

44、       

45、          /**

46、           * 根据模板在指定目录中生成文件,模板放在类路径的"template/pdf/"

47、           *

48、           * @param fileName

49、           *            要生成文件名,不能为空,可不带后缀。

50、           * @param templatePath

51、           *            模板文件,不能为空,放在类路径下的"template/pdf/"中,可不带后缀。

52、           * @param model

53、           *            业务数据模型,可为空。

54、           * @return 生成的文件全路径

55、           *

56、           *         如果创建失败 ,则抛出业务异常

57、           */

58、          public static String create(String fileName, String templatePath,

59、                 Map<String, Object> model) {

60、             // 补齐后缀".html"

61、             if (!templatePath.endsWith(HTML)) {

62、                 templatePath = templatePath + HTML;

63、             }

64、             // 补齐后缀".pdf"

65、             if (!fileName.endsWith(PDF)) {

66、                 fileName = fileName + PDF;

67、             }

68、             // 构建保存文件夹

69、             String savePath = "D:\\";

70、             // 如果保存文件夹不存在,则创建

71、             File saveFile = new File(savePath);

72、             if (!saveFile.exists()) {

73、                 saveFile.mkdirs();

74、             }

75、             // 构建完整保存路径

76、             savePath = savePath + File.separator + fileName;

77、             // 如果文件已存在,则删除

78、             saveFile = new File(savePath);

79、             if (saveFile.exists()) {

80、                 boolean flag = saveFile.delete();

81、             }

82、             OutputStream os = null;

83、             try {

84、                 StringWriter sw = new StringWriter();

85、                 ENGINE.getTemplate(templatePath, "UTF-8").merge(

86、                        new VelocityContext(model), sw);

87、                 String html = sw.toString();

88、                 ITextRenderer renderer = new ITextRenderer();

89、                 renderer.setDocumentFromString(html);

90、                 // 解决中文汉字显示问题

92、                 ITextFontResolver fontResolver = renderer.getFontResolver();

93、                 String baseURL = getBaseURL();

96、                 fontResolver.addFont(baseURL + "STFANGSO.TTF" ,

97、                        BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);

98、                 // 解决图片加载问题

99、                 renderer.getSharedContext().setBaseURL(baseURL);

100、               renderer.layout();

101、               os = new BufferedOutputStream(new FileOutputStream(savePath));

102、               renderer.createPDF(os);

103、               os.flush();

104、           } catch (Exception e) {

105、           } finally {

106、               try {

107、                  if (os != null) {

108、                      os.close();

109、                  }

110、               } catch (Exception e) {

111、               }

112、           }

113、           System.out.println(savePath);

114、           return savePath;

115、        }

116、     

117、        private static String getBaseURL() {

118、           // 解决pdf图片问题,以绝对路径加载

119、           // 注意,直接部署war会导致运行时获取不到,必须改为部署解压后的文件夹。

120、           String warPath = "D:\\";

121、     

122、           return "D:\\";

123、        }

124、     

125、           }

© 著作权归作者所有

开源中国首席碉堡了
粉丝 3
博文 59
码字总数 21321
作品 0
阜阳
高级程序员
私信 提问
生成PDF的几种方式

1、后台生成PDF thinkphp利用MPDF插件 示例代码: public function pdf(){ //引入类库 Vendor('mpdf.mpdf'); //设置中文编码 $mpdf=new mPDF('zh-cn','A4', 0, '宋体', 0, 0); //html内容 $h......

无心低语
2017/06/07
0
0
最有效的php生成pdf文件的方法,html转pdf文件方法

之前有个客户需要把一些html页面生成pdf文件,然后我就找一些用php把html页面围成pdf文件的类。方法是可谓是找了很多很多,什么html2pdf,pdflib,FPDF这些都试过了,但是都没有达到我要的求。...

Deacyn
2014/08/13
650
0
PHP HTML 生成 PDF (转)

博客分类: Php / Mysql HTMLPHPFP脚本CSS 有时我们需要使用脚本动态的创建PDF文档,这里介绍一些免费的开源PHP脚本来生成PDF 的方法。 1.FPDF: PDF生成器 FPDF是一个纯粹的通过PHP类来生成P...

77970290
2012/05/24
3.6K
0
李星/doc-render

项目主页:http://git.oschina.net/lemonzone2010/doc-render 最近公司需要生成PDF,基于这个需求简单学习了下IText 和 flying saucer,对于这两个技术.我先简单介绍下: Flying Saucer和iText介...

李星
2015/07/04
0
0
【2010带你飞】如何使用JAVA代码压缩PDF文件?大牛进来一看

目前情况是我通过pdf模板实现了自动生成pdf文件,但是美中不足的是pdf生成后文件非常大,尝试过将pdf模板优化大小、压缩大小等等方式,但是批量生成pdf后文件依然很大(大约20M左右)。我将批...

2010带你飞
2018/07/02
1K
1

没有更多内容

加载失败,请刷新页面

加载更多

Excption与Error包结构,OOM 你遇到过哪些情况,SOF 你遇到过哪些情况

Throwable 是 Java 中所有错误与异常的超类,Throwable 包含两个子类,Error 与 Exception 。用于指示发生了异常情况。 Java 抛出的 Throwable 可以分成三种类型。 被检查异常(checked Exc...

Garphy
今天
6
0
计算机实现原理专题--二进制减法器(二)

在计算机实现原理专题--二进制减法器(一)中说明了基本原理,现准备说明如何来实现。 首先第一步255-b运算相当于对b进行按位取反,因此可将8个非门组成如下图的形式: 由于每次做减法时,我...

FAT_mt
昨天
6
0
好程序员大数据学习路线分享函数+map映射+元祖

好程序员大数据学习路线分享函数+map映射+元祖,大数据各个平台上的语言实现 hadoop 由java实现,2003年至今,三大块:数据处理,数据存储,数据计算 存储: hbase --> 数据成表 处理: hive --> 数...

好程序员官方
昨天
7
0
tabel 中含有复选框的列 数据理解

1、el-ui中实现某一列为复选框 实现多选非常简单: 手动添加一个el-table-column,设type属性为selction即可; 2、@selection-change事件:选项发生勾选状态变化时触发该事件 <el-table @sel...

everthing
昨天
6
0
【技术分享】TestFlight测试的流程文档

上架基本需求资料 1、苹果开发者账号(如还没账号先申请-苹果开发者账号申请教程) 2、开发好的APP 通过本篇教程,可以学习到ios证书申请和打包ipa上传到appstoreconnect.apple.com进行TestF...

qtb999
昨天
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部