IText PDF简单示例
package com.exe.learn.demo.itextpdf; import java.io.ByteArrayInputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.StringWriter; import java.io.Writer; import java.nio.charset.Charset; import java.util.Map; import org.xhtmlrenderer.pdf.ITextFontResolver; import org.xhtmlrenderer.pdf.ITextRenderer; import com.itextpdf.text.Document; import com.itextpdf.text.DocumentException; import com.itextpdf.text.Font; import com.itextpdf.text.FontFactory; import com.itextpdf.text.Paragraph; import com.itextpdf.text.pdf.BaseFont; import com.itextpdf.text.pdf.PdfWriter; import com.itextpdf.tool.xml.XMLWorkerFontProvider; import com.itextpdf.tool.xml.XMLWorkerHelper; import freemarker.template.Configuration; import freemarker.template.Template; public class ITextPdfDemo { private static final String DEST = "target/demo.pdf"; private static final String FONT = "simhei.ttf"; private static final String HTML = "template.html"; private static final String FREEMARKET = "template_freemarker.html"; private static final String PNG_PATH = "ukey4.png"; private static final String FREEMARKETFS = "template_freemarker_fs.html"; private static Configuration freemarkerCfg = null; static { freemarkerCfg =new Configuration(); try { freemarkerCfg.setDirectoryForTemplateLoading(new File(getTemplateDir())); } catch (IOException e) { e.printStackTrace(); } } public static void main(String[] args) throws Exception { //中文内容写入PDF //chnPdfWrite(); //使用HTML模板生成PDF // templateHtmlPdf(); //使用freemarket模板生成PDF /*Map<String,Object> data = new HashMap<String, Object>(); data.put("name","黑道秋水"); String content = ITextPdfDemo.freeMarkerRender(data, FREEMARKET); ITextPdfDemo.createPdf(content, DEST);*/ /*Map<String,Object> data = new HashMap(); data.put("name","鬼彻"); String content = ITextPdfDemo.freeMarkerRender(data, FREEMARKETFS); ITextPdfDemo.createPngPdf(content,DEST);*/ } /** * 获取resources目录 */ private static String getTemplateDir() { int index = propertiesFilePath(FREEMARKET).substring(1).lastIndexOf("/"); return propertiesFilePath(FREEMARKET).substring(1).substring(0, index + 1); } /** * 填充freemarket数据 */ public static String freeMarkerRender(Map<String, Object> data, String htmlTmp) { Writer out = new StringWriter(); try { // 获取模板,并设置编码方式 Template template = freemarkerCfg.getTemplate(htmlTmp); template.setEncoding("UTF-8"); // 合并数据模型与模板 template.process(data, out); out.flush(); return out.toString(); } catch (Exception e) { e.printStackTrace(); } finally { try { out.close(); } catch (IOException ex) { ex.printStackTrace(); } } return null; } /** * 创建PDF文件 */ public static void createPdf(String content,String dest) throws IOException, DocumentException { Document document = new Document(); PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(dest)); document.open(); XMLWorkerFontProvider fontImp = new XMLWorkerFontProvider(XMLWorkerFontProvider.DONTLOOKFORFONTS); fontImp.register(FONT); XMLWorkerHelper.getInstance().parseXHtml(writer, document,new ByteArrayInputStream(content.getBytes()), null, Charset.forName("UTF-8"), fontImp); document.close(); } /** * 带有中文的内容写入PDF */ private static void chnPdfWrite() throws FileNotFoundException, DocumentException { Document document = new Document(); PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(DEST)); document.open(); Font f1 = FontFactory.getFont(FONT, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED); document.add(new Paragraph("ITextPdf demo, pdf中文示例", f1)); document.close(); writer.close(); } /** * 获取项目中的resources文件路径 * @return */ private static String propertiesFilePath(String fileName) { return ITextPdfDemo.class.getClassLoader().getResource(fileName).getPath(); } /** * 使用hmtl模板文件生成PDF */ private static void templateHtmlPdf() throws FileNotFoundException, IOException, DocumentException { Document document = new Document(); PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(DEST)); document.open(); XMLWorkerFontProvider fontImp = new XMLWorkerFontProvider(XMLWorkerFontProvider.DONTLOOKFORFONTS); fontImp.register(FONT); XMLWorkerHelper.getInstance().parseXHtml(writer, document,new FileInputStream(propertiesFilePath(HTML)), null, Charset.forName("UTF-8"), fontImp); document.close(); } public static void createPngPdf(String content,String dest) throws IOException, DocumentException, com.lowagie.text.DocumentException { ITextRenderer render = new ITextRenderer(); ITextFontResolver fontResolver = render.getFontResolver(); fontResolver.addFont(FONT, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED); render.setDocumentFromString(content); render.getSharedContext().setBaseURL("file://" + propertiesFilePath(PNG_PATH).substring(1)); render.layout(); render.createPDF(new FileOutputStream(dest)); } }
<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插入图片
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?