Java用itext7实现支持富文本生成PDF

1、效果图:

 

(具体一些细节和布局还需要调整) 

技术点:elementUI+WangEditor+SpringBoot+IText7+

2、pom:

<!-- pdf:start -->
  <properties>
    <maven.compiler.source>8</maven.compiler.source>
    <maven.compiler.target>8</maven.compiler.target>
    <itext.version>7.1.11</itext.version>
  </properties>
  <dependencies>
    <!-- itext7 -->
    <dependency>
      <groupId>com.itextpdf</groupId>
      <artifactId>kernel</artifactId>
      <version>${itext.version}</version>
    </dependency>
    <dependency>
      <groupId>com.itextpdf</groupId>
      <artifactId>io</artifactId>
      <version>${itext.version}</version>
    </dependency>
    <dependency>
      <groupId>com.itextpdf</groupId>
      <artifactId>layout</artifactId>
      <version>${itext.version}</version>
    </dependency>
    <dependency>
      <groupId>com.itextpdf</groupId>
      <artifactId>forms</artifactId>
      <version>${itext.version}</version>
    </dependency>
    <dependency>
      <groupId>com.itextpdf</groupId>
      <artifactId>pdfa</artifactId>
      <version>${itext.version}</version>
    </dependency>
    <dependency>
      <groupId>com.itextpdf</groupId>
      <artifactId>pdftest</artifactId>
      <version>${itext.version}</version>
    </dependency>
    <dependency>
      <groupId>com.itextpdf</groupId>
      <artifactId>font-asian</artifactId>
      <version>${itext.version}</version>
    </dependency>
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-log4j12</artifactId>
      <version>1.7.18</version>
    </dependency>

    <!--itext7 html转pdf用到的包-->
    <dependency>
      <groupId>com.itextpdf</groupId>
      <artifactId>html2pdf</artifactId>
      <version>3.0.0</version>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId&
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
下面是一个使用iText7富文本HTML转换为PDF并添加动态页数和水印的示例: ```java import com.itextpdf.html2pdf.ConverterProperties; import com.itextpdf.html2pdf.HtmlConverter; import com.itextpdf.kernel.colors.ColorConstants; import com.itextpdf.kernel.font.PdfFont; import com.itextpdf.kernel.font.PdfFontFactory; import com.itextpdf.kernel.geom.Rectangle; import com.itextpdf.kernel.pdf.PdfDocument; import com.itextpdf.kernel.pdf.PdfPage; import com.itextpdf.kernel.pdf.PdfWriter; import com.itextpdf.kernel.pdf.canvas.PdfCanvas; import com.itextpdf.kernel.pdf.xobject.PdfFormXObject; import java.io.File; import java.io.IOException; public class RichHtmlToPdfConverter { public static void main(String[] args) throws IOException { String html = "<html><body><h1>Hello, World!</h1></body></html>"; String pdfPath = "output.pdf"; PdfWriter writer = new PdfWriter(pdfPath); PdfDocument pdfDoc = new PdfDocument(writer); pdfDoc.setDefaultPageSize(new Rectangle(PageSize.A4.getLeft(), PageSize.A4.getBottom(), PageSize.A4.getRight(), PageSize.A4.getTop())); PdfFont font = PdfFontFactory.createFont("path/to/font.ttf", PdfEncodings.IDENTITY_H, true); int pageNum = 1; ConverterProperties props = new ConverterProperties(); HtmlConverter.convertToPdf(html, pdfDoc, props); int n = pdfDoc.getNumberOfPages(); for (int i = 2; i <= n; i++) { PdfPage page = pdfDoc.getPage(i); PdfCanvas canvas = new PdfCanvas(page); canvas.beginText() .setFontAndSize(font, 12) .moveText(pdfDoc.getDefaultPageSize().getRight() - 72, 36) .showText(String.format("Page %d", pageNum)) .endText(); pageNum++; } PdfFormXObject watermark = new PdfFormXObject(new Rectangle(0, 0, 100, 100)); PdfCanvas canvas = new PdfCanvas(watermark, pdfDoc); canvas.setFillColor(ColorConstants.LIGHT_GRAY); canvas.setStrokeColor(ColorConstants.LIGHT_GRAY); canvas.rectangle(0, 0, 100, 100); canvas.fill(); canvas.beginText() .setFontAndSize(font, 24) .moveText(20, 50) .showText("Confidential") .endText(); pageNum = 1; for (int i = 1; i <= n; i++) { PdfPage page = pdfDoc.getPage(i); canvas = new PdfCanvas(page); canvas.addXObject(watermark, 0, 0); canvas.beginText() .setFontAndSize(font, 12) .moveText(pdfDoc.getDefaultPageSize().getRight() - 72, 36) .showText(String.format("Page %d", pageNum)) .endText(); pageNum++; } pdfDoc.close(); } } ``` 在上面的示例中,我们首先创建一个PdfWriter和PdfDocument对象,然后设置默认页面大小为A4纸张大小。然后使用iText7的HtmlConverter将富文本HTML字符串转换为PDF文档。在转换HTML字符串为PDF文档后,我们使用循环遍历文档中的每个页面,并在每个页面的右下角添加动态页码。最后,我们创建一个PdfFormXObject对象,添加水印文本“Confidential”,并将其添加到每个页面中。 请注意,上面的示例中的代码片段是未经测试的,仅供参考。您需要根据您自己的需求进行修改和调整。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值