Java使用Freemarker和iText生成带有图片的PDF文件

需要在pdf中添加图片,前后端都需要配置代码

后端代码:修改内容字体以及显示的地方已经标注

OutputStream out=null;
        ByteArrayInputStream byteArrayInputStream=null;
        try{
            out = new FileOutputStream(PdfFactory.tempPath+billType+".pdf");
            DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
            ITextRenderer renderer = new ITextRenderer();
            byte[] bytes=htmlStr.getBytes("UTF-8");
            byteArrayInputStream=new ByteArrayInputStream(bytes);
            Document doc = builder.parse(byteArrayInputStream);
            renderer.setDocument(doc, null);
            org.xhtmlrenderer.pdf.ITextFontResolver fontResolver = renderer.getFontResolver();
            //设置字体样式和内容排版(仅内部的字体内容--IDENTITY_H,IDENTITY_V垂直)
            fontResolver.addFont(fontPath, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
            //设置打印的图片的前缀--解决图片的相对路径问题---注意:"file:/"必须存在
            renderer.getSharedContext().setBaseURL("file:/"+"需要打印的文件路径");
            renderer.layout();
            renderer.createPDF(out);// .createPDF(out);
            out.close();
        }catch (Exception e){
            e.printStackTrace();
        } finally {
            closeRes(byteArrayInputStream);
            closeRes(out);
        }

需要打印的文件路径前缀的路径最好设置为资源文件中的值,这样在上线后即便修改也无需重新部署。

前端(即ftl模板文件):

在需要加入图片的地方加入img标签:

<img  src="直接文件名.后缀"></img>
此处的src文件无需路径;该路径前面后端代码已设置完整;

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
使用FreemarkeriText可以方便地将HTML转换为PDF。下面是一个基本的示例: 1. 首先,您需要引入iTextfreemarker的依赖项。如果您使用的是Maven,可以添加以下依赖项到pom.xml文件中: ``` <dependency> <groupId>com.lowagie</groupId> <artifactId>itext</artifactId> <version>2.1.7</version> </dependency> <dependency> <groupId>org.freemarker</groupId> <artifactId>freemarker</artifactId> <version>2.3.31</version> </dependency> ``` 2. 创建Freemarker模板,例如: ``` <html> <head> <title>${title}</title> </head> <body> <h1>${heading}</h1> <p>${content}</p> </body> </html> ``` 3. 创建Java类来生成PDF文件。例如: ``` import java.io.*; import java.util.*; import com.lowagie.text.*; import com.lowagie.text.pdf.*; import freemarker.template.*; public class HtmlToPdf { public static void main(String[] args) throws Exception { // 创建数据模型 Map<String, Object> data = new HashMap<String, Object>(); data.put("title", "My PDF Document"); data.put("heading", "Hello World"); data.put("content", "This is my first PDF document."); // 创建Freemarker模板 Configuration cfg = new Configuration(Configuration.VERSION_2_3_31); cfg.setClassForTemplateLoading(HtmlToPdf.class, "/"); Template template = cfg.getTemplate("template.ftl"); // 将Freemarker模板渲染为HTML StringWriter writer = new StringWriter(); template.process(data, writer); String html = writer.toString(); // 创建PDF文档 Document document = new Document(); PdfWriter.getInstance(document, new FileOutputStream("output.pdf")); document.open(); // 将HTML转换为PDF InputStream is = new ByteArrayInputStream(html.getBytes()); XMLWorkerHelper.getInstance().parseXHtml(writer, document, is); // 关闭PDF文档 document.close(); } } ``` 这个示例将生成一个名为“output.pdf”的PDF文件,其中包含一个标题为“My PDF Document”的页面,以及一个标题为“Hello World”和内容为“This is my first PDF document.”的段落。 请注意,此示例仅是一个基本示例。您可以根据需要修改模板和Java代码以生成更复杂的PDF文件

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值