手把手教你使用 Java 在线生成 pdf 文档

本文介绍如何使用Java的iText库在线生成PDF文档,包括添加依赖、简单及复杂实现示例,以及变量替换方法。通过案例展示了从HTML转换为PDF的过程,适合初学者和进阶开发者学习。
摘要由CSDN通过智能技术生成

一、介绍

在实际的业务开发的时候,研发人员往往会碰到很多这样的一些场景,需要提供相关的电子凭证信息给用户,例如网银/支付宝/微信购物支付的电子发票、订单的库存打印单、各种电子签署合同等等,以方便用户查看、打印或者下载。

例如下图的电子发票!

熟悉这块业务的童鞋,一定特别清楚,目前最常用的解决方案是:把相关的数据信息,通过一些技术手段生成对应的 PDF 文件,然后返回给用户,以便预览、下载或者打印。

不太熟悉这项技术的童鞋,也不用着急,今天我们一起来详细了解一下在线生成 PDF 文件的技术实现手段!

二、案例实现

在介绍这个代码实践之前,我们先来了解一下这个第三方库: iText ,对,没错,它就是我们今天的主角。

iText 是著名的开放源码站点 sourceforge 一个项目,是用于生成 PDF 文档的一个 java 类库,通过 iText 不仅可以生成 PDF 或 rtf 的文档,而且还可以将 XML 、 Html 文件转化为 PDF 文件。

iText 目前有两套版本,分别是 iText5 和 iText7 。 iText5 应该是网上用的比较多的一个版本。 iText5 因为是很多开发者参与贡献代码,因此在一些规范和设计上存在不合理的地方。 iText7 是后来官方针对 iText5 的重构,两个版本差别还是挺大的。不过在实际使用中,一般用到的都比较简单的 API,所以不用特别拘泥于使用哪个版本。

2.1、添加 iText 依赖包

在使用它之前,我们先引人相关的依赖包!

<dependencies>
    <!-- pdf:start -->
    <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>
    <!-- 支持中文 -->
    <dependency>
        <groupId>com.itextpdf</groupId>
        <artifactId>itext-asian</artifactId>
        <version>5.2.0</version>
    </dependency>
    <!-- 支持css样式渲染 -->
    <dependency>
        <groupId>org.xhtmlrenderer</groupId>
        <artifactId>flying-saucer-pdf-itext5</artifactId>
        <version>9.1.16</version>
    </dependency>
    <!-- 转换html为标准xhtml包 -->
    <dependency>
        <groupId>net.sf.jtidy</groupId>
        <artifactId>jtidy</artifactId>
        <version>r938</version>
    </dependency>
    <!-- pdf:end -->    
</dependencies>

2.2、简单实现

老规矩,我们先来一个 hello world ,代码如下:

public class CreatePDFMainTest {

    public static void main(String[] args) throws Exception {
        Document document = new Document(PageSize.A4);
        //第二步,创建Writer实例
        PdfWriter.getInstance(document, new FileOutputStream("hello.pdf"));
        //创建中文字体
        BaseFont bfchinese = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
        Font fontChinese = new Font(bfchinese, 12, Font.NORMAL);
        /
  • 3
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值