1. package com.exe.learn.demo.itextpdf;
  2.  
  3. import java.io.ByteArrayInputStream;
  4. import java.io.File;
  5. import java.io.FileInputStream;
  6. import java.io.FileNotFoundException;
  7. import java.io.FileOutputStream;
  8. import java.io.IOException;
  9. import java.io.StringWriter;
  10. import java.io.Writer;
  11. import java.nio.charset.Charset;
  12. import java.util.Map;
  13.  
  14. import org.xhtmlrenderer.pdf.ITextFontResolver;
  15. import org.xhtmlrenderer.pdf.ITextRenderer;
  16.  
  17. import com.itextpdf.text.Document;
  18. import com.itextpdf.text.DocumentException;
  19. import com.itextpdf.text.Font;
  20. import com.itextpdf.text.FontFactory;
  21. import com.itextpdf.text.Paragraph;
  22. import com.itextpdf.text.pdf.BaseFont;
  23. import com.itextpdf.text.pdf.PdfWriter;
  24. import com.itextpdf.tool.xml.XMLWorkerFontProvider;
  25. import com.itextpdf.tool.xml.XMLWorkerHelper;
  26.  
  27. import freemarker.template.Configuration;
  28. import freemarker.template.Template;
  29.  
  30. public class ITextPdfDemo {
  31.  
  32. private static final String DEST = "target/demo.pdf";
  33. private static final String FONT = "simhei.ttf";
  34. private static final String HTML = "template.html";
  35. private static final String FREEMARKET = "template_freemarker.html";
  36. private static final String PNG_PATH = "ukey4.png";
  37. private static final String FREEMARKETFS = "template_freemarker_fs.html";
  38.  
  39. private static Configuration freemarkerCfg = null;
  40.  
  41. static {
  42. freemarkerCfg =new Configuration();
  43. try {
  44. freemarkerCfg.setDirectoryForTemplateLoading(new File(getTemplateDir()));
  45. } catch (IOException e) {
  46. e.printStackTrace();
  47. }
  48. }
  49.  
  50. public static void main(String[] args) throws Exception {
  51.  
  52. //中文内容写入PDF
  53. //chnPdfWrite();
  54.  
  55. //使用HTML模板生成PDF
  56. // templateHtmlPdf();
  57.  
  58. //使用freemarket模板生成PDF
  59. /*Map<String,Object> data = new HashMap<String, Object>();
  60. data.put("name","黑道秋水");
  61. String content = ITextPdfDemo.freeMarkerRender(data, FREEMARKET);
  62. ITextPdfDemo.createPdf(content, DEST);*/
  63.  
  64. /*Map<String,Object> data = new HashMap();
  65. data.put("name","鬼彻");
  66. String content = ITextPdfDemo.freeMarkerRender(data, FREEMARKETFS);
  67. ITextPdfDemo.createPngPdf(content,DEST);*/
  68.  
  69. }
  70.  
  71. /**
  72. * 获取resources目录
  73. */
  74. private static String getTemplateDir() {
  75. int index = propertiesFilePath(FREEMARKET).substring(1).lastIndexOf("/");
  76. return propertiesFilePath(FREEMARKET).substring(1).substring(0, index + 1);
  77. }
  78.  
  79. /**
  80. * 填充freemarket数据
  81. */
  82. public static String freeMarkerRender(Map<String, Object> data, String htmlTmp) {
  83. Writer out = new StringWriter();
  84. try {
  85. // 获取模板,并设置编码方式
  86. Template template = freemarkerCfg.getTemplate(htmlTmp);
  87. template.setEncoding("UTF-8");
  88. // 合并数据模型与模板
  89. template.process(data, out);
  90. out.flush();
  91. return out.toString();
  92. } catch (Exception e) {
  93. e.printStackTrace();
  94. } finally {
  95. try {
  96. out.close();
  97. } catch (IOException ex) {
  98. ex.printStackTrace();
  99. }
  100. }
  101. return null;
  102. }
  103.  
  104. /**
  105. * 创建PDF文件
  106. */
  107. public static void createPdf(String content,String dest) throws IOException, DocumentException {
  108. Document document = new Document();
  109. PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(dest));
  110. document.open();
  111. XMLWorkerFontProvider fontImp = new XMLWorkerFontProvider(XMLWorkerFontProvider.DONTLOOKFORFONTS);
  112. fontImp.register(FONT);
  113. XMLWorkerHelper.getInstance().parseXHtml(writer, document,new ByteArrayInputStream(content.getBytes()), null, Charset.forName("UTF-8"), fontImp);
  114. document.close();
  115.  
  116. }
  117.  
  118. /**
  119. * 带有中文的内容写入PDF
  120. */
  121. private static void chnPdfWrite() throws FileNotFoundException, DocumentException {
  122. Document document = new Document();
  123. PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(DEST));
  124. document.open();
  125. Font f1 = FontFactory.getFont(FONT, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
  126. document.add(new Paragraph("ITextPdf demo, pdf中文示例", f1));
  127. document.close();
  128. writer.close();
  129. }
  130.  
  131. /**
  132. * 获取项目中的resources文件路径
  133. * @return
  134. */
  135. private static String propertiesFilePath(String fileName) {
  136. return ITextPdfDemo.class.getClassLoader().getResource(fileName).getPath();
  137. }
  138.  
  139. /**
  140. * 使用hmtl模板文件生成PDF
  141. */
  142. private static void templateHtmlPdf() throws FileNotFoundException, IOException, DocumentException {
  143. Document document = new Document();
  144. PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(DEST));
  145. document.open();
  146. XMLWorkerFontProvider fontImp = new XMLWorkerFontProvider(XMLWorkerFontProvider.DONTLOOKFORFONTS);
  147. fontImp.register(FONT);
  148. XMLWorkerHelper.getInstance().parseXHtml(writer, document,new FileInputStream(propertiesFilePath(HTML)), null, Charset.forName("UTF-8"), fontImp);
  149. document.close();
  150. }
  151.  
  152. public static void createPngPdf(String content,String dest) throws IOException, DocumentException, com.lowagie.text.DocumentException {
  153. ITextRenderer render = new ITextRenderer();
  154. ITextFontResolver fontResolver = render.getFontResolver();
  155. fontResolver.addFont(FONT, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
  156. render.setDocumentFromString(content);
  157. render.getSharedContext().setBaseURL("file://" + propertiesFilePath(PNG_PATH).substring(1));
  158. render.layout();
  159. render.createPDF(new FileOutputStream(dest));
  160. }
  161.  
  162. }

<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.5.11</version>
</dependency>
<dependency>
<groupId>com.itextpdf.tool</groupId>
<artifactId>xmlworker</artifactId>
<version>5.5.11</version>
</dependency>
<!-- freemarket support itext -->
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.19</version>
</dependency>

<!-- itext insert pic -->
<dependency>
<groupId>org.xhtmlrenderer</groupId>
<artifactId>flying-saucer-pdf</artifactId>
<version>9.1.5</version>
</dependency>
<dependency>
<groupId>org.xhtmlrenderer</groupId>
<artifactId>flying-saucer-pdf-itext5</artifactId>
<version>9.1.5</version>
</dependency>

使用itext生成PDF示例:中文内容生成PDF、HTML方式生成PDF、freemarket方式生成PDF、PDF插入图片

IText PDF简单示例的更多相关文章

  1. .net Core 使用 iTextSharp 生成PDF 简单示例

    在 Nuget 中导入需要的插件: 实现的代码: 1 [HttpGet, Route("CreatePdf")] 2 public Response CreatePdf() 3 { ...

  2. Linux下的C Socket编程 -- server端的简单示例

    Linux下的C Socket编程(三) server端的简单示例 经过前面的client端的学习,我们已经知道了如何创建socket,所以接下来就是去绑定他到具体的一个端口上面去. 绑定socket ...

  3. C# 构建XML(简单示例)

    C# 构建XML的简单示例: var pars = new Dictionary<string, string> { {"url","https://www. ...

  4. 根据juery CSS点击一个标签弹出一个遮罩层的简单示例

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...

  5. ACEXML解析XML文件——简单示例程序

    掌握了ACMXML库解析XML文件的方法后,下面来实现一个比较完整的程序. 定义基本结构 xml文件格式如下 <?xml version="1.0"?> <roo ...

  6. demo工程的清单文件及activity中api代码简单示例

    第一步注册一个账户,并创建一个应用.获取app ID与 app Key. 第二步下载sdk 第三步新建工程,修改清单文件,导入相关的sdk文件及调用相应的api搞定. 3.1 修改清单文件,主要是加入 ...

  7. spring-servlet.xml简单示例

    spring-servlet.xml简单示例 某个项目中的spring-servlet.xml 记下来以后研究用 <!-- springMVC简单配置 --> <?xml versi ...

  8. SignalR 简单示例

    一.什么是 SignalR ASP.NET SignalR is a library for ASP.NET developers that simplifies the process of add ...

  9. Web API 简单示例

    一.RESTful和Web API Representational State Transfer (REST) is a software architecture style consisting ...

随机推荐

  1. 两个list 合并后去除掉重复removeAll()的,然后再随机获取最后list中的 几个值

    public static void test1(){ String s1="1,2,5,3,6,9"; String n1[]=s1.split(","); ...

  2. CMD批处理查看当前路径

    1.直接在CMD窗口查看 echo %cd% 2.建立批处理文件 @echo offecho 当前盘符:%~d0echo 当前盘符和路径:%~dp0echo 当前批处理全路径:%~f0echo 当前盘 ...

  3. vue定义组件

    1.定义组件 2.在App.vue里引入Home组件 home代码 <template> <div>home</div> </template> < ...

  4. webApp 页面布局

    1. 流式布局 概念:流式布局是页面元素宽度按照屏幕分辨率进行适配调整,但是整体布局不变. 设计方法:布局都是通过百分比来定义宽度,但是高度大都是用px固定的. 弊端: 虽然可以让各种屏幕适配,但是显 ...

  5. 【Pytest】python单元测试框架pytest简介

    1.Pytest介绍 pytest是python的一种单元测试框架,与python自带的unittest测试框架类似,但是比unittest框架使用起来更简洁,效率更高.根据pytest的官方网站介绍 ...

  6. python3爬虫开发与实战预览版

    https://germey.gitbooks.io/python3webspider/content/1.2.3-ChromeDriver%E7%9A%84%E5%AE%89%E8%A3%85.ht ...

  7. jsc2019_qualD Classified

    题目大意 给你一个有n个点的完全图 求一种方案是的给边染色后任何一点不能沿一种颜色的边走奇数条边回到这个点 要求颜色数最少 分析 考场上输出格式打错见祖宗... 我们每次找一个最大二分图将其染一个新颜 ...

  8. p4111 [HEOI2015]小Z的房间[简述矩阵树定理]

    分析 [1]无向图 图G的度数矩阵为D,邻接矩阵为A 我们定义这个图的Kirchhoff矩阵为D-A 这个矩阵的任意一个n-1阶主子式的行列式的绝对值就是这个图的生成树个数 [2]有向图 如果要求内向 ...

  9. 测开之路八十三:高级函数:map()和filter()

    # map(函数名,可迭代对象)# 给可迭代对象的每个值+5l = list(range(1, 21)) def add_number(x):    return x + 5 # 第一种方式print ...

  10. ElasticSearch2.2.0安装

    一.ElasticSearch2.2.0安装 1.下载ElasticSearch2.2.0安装包 https://download.elastic.co/elasticsearch/elasticse ...