三尺非寒 发表于 昨天 11:22

【完备可用】利用openhtmltopdf天生PDF(带SVG)

媒介

   AI和网上都是跑不起来大概版本过低的,另有各种BUG的。本文都是查阅官方文档得出的。假如你能跑起来请给个大大的赞!
OpenHTMLToPDF 简介

OpenHTMLToPDF 是一个纯 Java 库,基于 Flying Saucer 和 Apache PDFBox 2,支持将格式精良的 XML/XHTML(乃至一些 HTML5)文档渲染为 PDF 文件。​它支持 CSS 2.1 及厥后续尺度举行结构和格式化,并可以或许处理处罚 SVG 图像。​
maven设置依靠

<!-- OpenHTMLToPDF 核心库 -->
      <dependency>
            <groupId>at.datenwort.openhtmltopdf</groupId>
            <artifactId>openhtmltopdf-core</artifactId>
            <version>1.1.4</version>
      </dependency>
      <!-- PDFBox 渲染器 -->
      <dependency>
            <groupId>at.datenwort.openhtmltopdf</groupId>
            <artifactId>openhtmltopdf-pdfbox</artifactId>
            <version>1.1.4</version>
      </dependency>
      <dependency>
            <groupId>at.datenwort.openhtmltopdf</groupId>
            <artifactId>openhtmltopdf-svg-support</artifactId>
            <version>1.1.4</version>
      </dependency>
      <!-- Batik 核心库 -->
      <dependency>
            <groupId>org.apache.xmlgraphics</groupId>
            <artifactId>batik-dom</artifactId>
            <version>1.14</version> <!-- 与 OpenHTMLToPDF 兼容的版本 -->
      </dependency>

      <!-- Batik 常量库 -->
      <dependency>
            <groupId>org.apache.xmlgraphics</groupId>
            <artifactId>batik-constants</artifactId>
            <version>1.14</version> <!-- 与 OpenHTMLToPDF 兼容的版本 -->
      </dependency>

      <!-- Batik SVG 生成器 -->
      <dependency>
            <groupId>org.apache.xmlgraphics</groupId>
            <artifactId>batik-svggen</artifactId>
            <version>1.14</version> <!-- 与 OpenHTMLToPDF 兼容的版本 -->
      </dependency>
字体文件

阿里可商用字体下载路径
HTML利用字体文件
<body style=\"font-family: 'PuHuiTi'\">
demo代码

public class SvgHtmlToPdfConverter {
    //分页 <div style='page-break-before: always;'></div>
    public static void convertHtmlToPdf(String htmlContent, String pdfPath) throws IOException {
      try (FileOutputStream fos = new FileOutputStream(pdfPath)) {
            PdfRendererBuilder builder = new PdfRendererBuilder();
            // 正确写法:类路径绝对路径(需以 "/" 开头)
            // 1. 获取资源 URL
            builder.useFont(
                  () -> SvgHtmlToPdfConverter.class.getResourceAsStream("/fonts/Alibaba-PuHuiTi-Regular.ttf"),
                  "PuHuiTi", 12, PdfRendererBuilder.FontStyle.NORMAL, true
            );
            builder.toStream(fos);
            builder.useFastMode();
            builder.withHtmlContent(
                  htmlContent,
                  null);
            builder.useSVGDrawer(new BatikSVGDrawer());
            // 4. 输出到 PDF
            builder.run();

      }

    }
    public static void main(String[] args) {
      try {
            convertHtmlToPdf("html代码.........", "D:\\output.pdf");
      } catch (IOException e) {
            e.printStackTrace();
      }
    }
}

其他

资源放置截图

https://i-blog.csdnimg.cn/direct/dd9ae09753c64d8ea642dae8af2834f6.png
防止maven编译字体文件

<resources>
                        <resource>
                                <directory>src/main/resources</directory>
                                <filtering>true</filtering>
                                <excludes>
                                        <exclude>**/*.ttf</exclude>
                                </excludes>
                        </resource>
                        <resource>
                                <directory>src/main/resources</directory>
                                <filtering>false</filtering>
                                <includes>
                                        <include>**/*.ttf</include>
                                </includes>
                        </resource>
                </resources>

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 【完备可用】利用openhtmltopdf天生PDF(带SVG)