OpenPDF:Java PDF处理库:创建、编辑、渲染、加密及HTML转PDF

OpenPDF is an open-source Java library for creating, editing, rendering, and encrypting PDF documents, as well as generating PDFs from HTML. It is licensed under the LGPL and MPL.

Branch9Tags96
FilesLast commitLast update
3 months ago
3 months ago
6 months ago
2 years ago
2 months ago
3 months ago
1 month ago
3 months ago
2 months ago
3 months ago
3 months ago
2 years ago
1 year ago
2 years ago
4 months ago
6 months ago
1 year ago
3 months ago
1 year ago
1 month ago
6 months ago
4 months ago
4 months ago
1 month ago

OpenPDF:一款用于 PDF 文件的开源 Java 库

OpenPDF 是一个开源 Java 库,用于创建、编辑、渲染和加密 PDF 文档,还能从 HTML 生成 PDF。它采用 LGPL 和 MPL 开源许可证。 我们欢迎其他开发者参与贡献。欢迎随时向此 GitHub 仓库提交拉取请求和错误报告。

功能特性

OpenPDF 的功能特性包括:

  • Openpdf 创建 PDF:您可以使用 OpenPDF 从头开始创建新的 PDF 文档。
  • 处理现有 PDF:OpenPDF 允许您修改现有 PDF 文档,例如添加或删除页面、修改文本等。
  • Openpdf-html 从 HTML 创建 PDF 文件,使用 OpenPDF-html,它是 Flying Saucer 的一个分支。
  • Openpdf-renderer 使用 openpdf-render 将 PDF 文件渲染为图像。
  • Openpdf-kotlin Kotlin 模块,便于使用 Kotlin 创建 PDF 文件。
  • 文本和字体支持:您可以使用各种字体和样式向 PDF 文档添加文本,并从 PDF 文件中提取文本。
  • 图形和图像:OpenPDF 支持向 PDF 文件添加图像和图形。
  • 表格支持:该库有助于在 PDF 文档中创建表格。
  • 加密:您可以对 PDF 文档进行加密以确保安全。
  • 页面布局:OpenPDF 允许您设置页面大小、方向和其他布局属性。
  • 支持 PDF 2.0(ISO 32000-2)。
  • Brotli 流压缩(/BrotliDecode),用于创建和读取使用 Brotli 压缩的 PDF 流——详见 Brotli 压缩

Maven Central CI License (LGPL version 2.1) License (MPL) Codacy Badge CodeQL CodeFactor Join the chat at https://gitter.im/LibrePDF/OpenPDF Java 21 Java 24 Java 25 Kotlin

获取 OpenPDF

获取 OpenPDF 的最新版本

Maven Central

将 OpenPDF 用作 Maven 依赖

将以下内容添加到您的 pom.xml 文件中,以使用 OpenPDF 的最新版本:


<dependency>
  <groupId>com.github.librepdf</groupId>
  <artifactId>openpdf</artifactId>
  <version>3.0.5</version>
</dependency>

许可协议

OpenPDF 采用双重许可:使用本库时,您可以选择 Mozilla 公共许可证 2.0 版或 GNU 宽通用公共许可证 2.1 版。OpenPDF 是 iText 的 LGPL/MPL 开源继任者,基于 iText 4 svn 标签的部分分支开发而成。

OpenPDF 许可的 SPDX 许可证标识符为 MPL-2.0 OR LGPL-2.1+

GNU 宽通用公共许可证 (LGPL),2.1 版

简要说明参见 https://en.wikipedia.org/wiki/GNU_Lesser_General_Public_License

Mozilla 公共许可证 2.0 版

简要说明参见 https://en.wikipedia.org/wiki/Mozilla_Public_License

您还可以在 https://itsfoss.com/open-source-licenses-explained/ 找到这些许可证的精彩解读。

我们希望 OpenPDF 的源代码仅统一采用 LGPL 和 MPL 许可证。这也意味着,对本项目的任何新贡献都必须仅采用双重 LGPL 和 MPL 许可证。

Openpdf-htmlOpenpdf-renderer 仅采用 GNU 宽通用公共许可证 2.1 版进行许可。

文档


Openpdf-html – HTML 转 PDF

Openpdf-html:直接从 HTML/CSS 内容生成 PDF。
非常适合从网页模板创建带样式的报告、发票和文档。

Maven 构件: com.github.librepdf:openpdf-html


Openpdf-renderer – PDF 渲染

Openpdf-renderer:将 PDF 页面渲染为图像,或在 Java Web 应用/Swing/JavaFX 应用中显示。
适用于预览、缩略图或在图形用户界面中嵌入 PDF。

Maven 构件: com.github.librepdf:openpdf-renderer


安全注意事项

应用程序开发人员有责任确保传入 OpenPDF 的所有输入都是可信、经过清理且安全的。 OpenPDF 不执行输入验证或强制实施沙箱机制。有关重要的安全准则和常见风险,请阅读我们的安全政策

背景

OpenPDF 是一款采用 LGPL 和 MPL 许可的开源软件。它是 iText 4 版本的分支,更具体地说,是 iText 的 svn 标签 4.2.0 的分支,该版本曾公开托管在 SourceForge 上,源代码中包含 LGPL 和 MPL 许可头文件,svn 仓库中也包含 LGPL 和 MPL 许可文档。从 iText 5.0 版本开始,开发人员转而采用 AGPL 许可,以增强其销售商业许可的能力。

OpenPDF-html 是 Flying Saucer 的分支,于 2025 年 6 月分支创建,Flying Saucer 项目始于 2004 年。 openpdf-renderer 是 PDFRenderer 的分支,PDFRenderer 项目由 Sun Labs 于 2007 年启动。 OpenPDF-core 是 iText 的分支,于 2016 年 10 月分支创建,iText 始于 2000 年。

GitHub 上的 OpenPDF 前身(按分支顺序):

  1. @rtfarte / OpenPDF - LibrePDF/OpenPDF 的父项目
  2. @kulatamicuda / iText-4.2.0
  3. @daviddurand / iText-4.2.0
  4. @ymasory / iText-4.2.0 - GitHub 上最初的父项目

Android

OpenPDF 可用于 Android,更多信息请参见:Android 支持

贡献

我们欢迎其他开发人员的贡献。请确保您的贡献可以采用双 LGPL 和 MPL 许可进行发布。特别是,提交给 OpenPDF 项目的拉取请求必须只包含您自己编写的代码。GPL 或 AGPL 许可的代码将不被接受。

要向 OpenPDF 项目贡献代码,您的 GitHub 账户必须包含您的真实姓名,以便我们验证您的身份。这是为了确保 OpenPDF 项目的信任、安全和完整性,并防止诸如“XZ Utils 后门”之类的安全事件。了解贡献者的真实姓名还有助于识别和防止利益冲突。

更多详情:贡献指南

编码风格

  • 代码缩进风格为4个空格。最大行长度为120个字符。
  • 通常应尽量保持所修改文件中的现有编码风格。

依赖项

必要依赖项

目前我们有不同版本的OpenPDF,它们需要不同版本的Java:

  • 2.1.x分支(及更高版本)需要Java 21或更高版本。
  • 2.0.x分支需要Java 17或更高版本。
  • 1.4.x分支需要Java 11或更高版本。
  • 1.3.x分支需要Java 8或更高版本。

OpenPDF Java包名从com.lowagie更改为org.openpdf

OpenPDF 3.0版本使用新的org.openpdf包名。

UTF-8字体

从1.3.21版本开始,UTF-8 Liberation字体已移至其独立模块,以减小OpenPDF jar包的大小。如果您想使用捆绑的UTF-8字体,请在项目中添加以下依赖项,并使用org.librepdf.openpdf.fonts.Liberation类。


<dependency>
  <groupId>com.github.librepdf</groupId>
  <artifactId>openpdf-fonts-extra</artifactId>
  <version>${openpdf.version}</version>
</dependency>

Brotli4j

Brotli4j 是支持 Brotli 流压缩功能的必要依赖项。 https://github.com/hyperxpro/Brotli4j/

支持复杂字形替换/连字替换

OpenPDF 支持字形替换,这是正确渲染字体连字替换所必需的功能。 启用此功能需要 FOP 依赖项。有关详细信息,请参考以下 Wiki:wiki

支持 OpenType 布局、字形定位、重排和替换

OpenPDF 支持 OpenType 布局、字形定位、重排和替换,例如,这对于正确定位重音符号、渲染非拉丁文字符以及从右到左书写的文字是必需的。OpenPDF 支持 DIN 91379 标准。 详见:wiki

Brotli 压缩

OpenPDF 能够读取和写入采用 Brotli 压缩的 PDF 流——在 PDF 中表现为 /BrotliDecode 过滤器,该过滤器正通过 ISO/TS 32001 进行标准化,以纳入 PDF 2.0(ISO 32000-2)标准。该编解码器由 brotli4j 提供支持(这是一个必要的依赖项,为 Linux/macOS/Windows 系统的 x86_64 和 aarch64 架构提供了原生二进制文件)。

为编写器生成的页面内容流启用 Brotli 压缩:

PdfWriter writer = PdfWriter.getInstance(document, out);
writer.

setUseBrotliCompression(true);    // /BrotliDecode instead of /FlateDecode

……或者为后续创建的每个 PdfWriter 全局设置:

Document.useBrotliCompression =true;

读取过程完全透明:PdfReader.getStreamBytes(...)PdfReader.getPageContent(...) 会自动解码 /BrotliDecode,因此 OpenPDF 无需任何额外配置即可打开 Brotli 压缩的 PDF(例如由 AutoCAD 的 pdfplot11.hdi 生成的 PDF)。原始编解码器可通过 org.openpdf.text.pdf.codec.BrotliFilterencode / decode)获取。

为了与尚未实现 ISO/TS 32001 的旧版 PDF 阅读器兼容,默认压缩方式仍为 /FlateDecode

可选依赖

  • BouncyCastle(BouncyCastle 用于对 PDF 文件进行签名,因此是推荐的依赖项)
    • 提供程序(org.bouncycastle:bcprov-jdk18onorg.bouncycastle:bcprov-ext-jdk18on,具体取决于您使用的算法)
    • PKIX/CMS(org.bouncycastle:bcpkix-jdk18on
  • Apache FOP(org.apache.xmlgraphics:fop
  • 请参考我们的 pom.xml 以了解所需的版本。

致谢

请参阅 Contributors.md

Introduction

OpenPDF 是一款免费的 Java 库,用于创建和编辑 PDF 文件,遵循 LGPL 和 MPL 开源协议。OpenPDF 源自于 iText 的一个分支。我们欢迎其他开发者的贡献。请随时向这个 GitHub 仓库提交 pull 请求和错误报告。⛺【此简介由AI生成】

Customize your domain
724.37 K712Visit GitHub