当前位置: 首页 > news >正文

【完整可用】使用openhtmltopdf生成PDF(带SVG)

文章目录

  • 前言
  • OpenHTMLToPDF 简介
  • maven配置依赖
  • 字体文件
  • demo代码
  • 其他
    • 资源放置截图
    • 防止maven编译字体文件

前言

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();
        }
    }
 }

其他

资源放置截图

在这里插入图片描述

防止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>
http://www.dtcms.com/a/124856.html

相关文章:

  • 策略模式结合模板方法模式
  • Go语言入门-反射4(动态构建类型)
  • PyCharm Community社区版链接WSL虚拟环境
  • 【笔记ing】AI大模型-01大模型基础综述
  • 医学科研工作者的AI助手:高效生成文献结构图和实验流程图
  • U9新开发webapi无授权
  • 使用Docker创建postgres
  • 智慧医院室内导航系统架构拆解:技术选型与性能攻坚指南
  • ssh警告WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!‌的解决方法
  • 2025 年“认证杯”数学中国数学建模网络挑战赛 A题 小行星轨迹预测
  • Mac 关闭浏览器左右滑动切换页面的问题
  • Java常用安全编码的规范整理及工具
  • jQuery UI 小部件方法调用详解
  • 量子计算未来的潜力和挑战
  • DeepSeek提示词实战大全:提示词合集和使用技巧
  • 速学Android 16新功能:带有进度的通知类型
  • mysql-sql查询结构和执行顺序
  • 【计网】一二章习题
  • C++入门一:C++ 编程概述
  • STM32 基础1
  • 2025年4月7日--4月13日(learn openg+dx+ogre+bullet+ue5肉鸽)
  • Google 发布 Sec-Gemini v1:用 AI 重塑网络安全防御格局?
  • 神经网络入门—井字棋游戏
  • 火语言RPA--Oracle-导入数据表格
  • 【蓝桥杯】贪心算法
  • Firebase Studio,谷歌推出的云端AI 开发环境
  • SpringBoot师生共评作业管理系统设计与实现
  • 从零开始学Python游戏编程20-游戏循环模式2
  • spark Core-RDD转换算子
  • 【day1】AI软件测试学习笔记