在 Java 应用程序中添加自定义注释或水印通常需要向 PDF 添加文本。Conholdate.Total for Java 是一个强大的 SDK,能够让开发者以编程方式编辑 PDF 文件。本指南将带您了解前置条件、详细的代码演练以及完整示例,帮助您轻松在现有 PDF 上叠加自定义文本。
先决条件和设置
在开始之前,请确保您具备以下条件:
- 已安装 Java 8 或更高版本。
- 用于依赖管理的 Maven。
- 如 IntelliJ IDEA 或 Eclipse 等 IDE。
- 用于生产使用的有效 Conholdate.Total for Java 许可证(详见后面的许可章节)。
将 Conholdate Maven 仓库和 SDK 依赖添加到您的 pom.xml 中:
<repositories>
<repository>
<id>conholdate-repo</id>
<name>Conholdate Maven Repository</name>
<url>https://repository.conholdate.com/repo/</url>
</repository>
</repositories>
<dependency>
<groupId>com.conholdate</groupId>
<artifactId>conholdate-total</artifactId>
<version>24.9</version>
<type>pom</type>
</dependency>
从download page下载最新的 SDK 二进制文件。Maven 构建成功后,您即可开始编码。下一节将准确展示如何加载 PDF 并插入文本。
在 Java 中向 PDF 添加文本:分步演练
以下是每个逻辑步骤的简要演练。完整的源代码稍后在 完整代码示例 部分重新呈现。
步骤 1:打开 PDF 并创建 TextBuilder
首先,使用 Document 类打开源 PDF,然后创建一个指向要添加文本的页面的 TextBuilder。
String dataDir = "path/to/your/document/directory/";
// Open document
Document doc = new Document(dataDir + "Conholdate.pdf");
TextBuilder builder = new TextBuilder(doc.getPages().get_Item(1));
Document 和 TextBuilder 类的文档位于 API 参考 中。
步骤 2:创建并配置 TextParagraph
构造一个 TextParagraph 并配置其布局:后续行的缩进、页面上文本区域的矩形边界以及换行模式。
// Create text paragraph
TextParagraph paragraph = new TextParagraph();
// Set subsequent lines indent
paragraph.setSubsequentLinesIndent(20);
// Specify the location to add TextParagraph
paragraph.setRectangle(new Rectangle(100, 300, 200, 700));
// Specify word wrapping mode
paragraph.getFormattingOptions().setWrapMode(TextFormattingOptions.WordWrapMode.ByWords);
步骤 3:创建 TextFragment 并配置字体
创建一个包含您想要覆盖的文本的 TextFragment,然后通过 getTextState() 设置其字体和字体大小。
// Create text fragment
TextFragment fragment1 = new TextFragment("the quick brown fox jumps over the lazy dog");
fragment1.getTextState().setFont(FontRepository.findFont("Times New Roman"));
fragment1.getTextState().setFontSize(12);
步骤 4:追加片段和段落
将文本片段作为段落中的一行添加,然后通过 TextBuilder 将段落追加到页面。
// Add fragment to paragraph
paragraph.appendLine(fragment1);
// Add paragraph
builder.appendParagraph(paragraph);
第5步:保存已修改的 PDF
最后,构建输出路径并保存生成的文档。
dataDir = dataDir + "AddText_out.pdf";
// Save resulting PDF document.
doc.save(dataDir);
通过这些步骤,您已完成 PDF 文本插入工作流。
完整代码示例:在 Java 中向 PDF 插入文本
以下示例演示了从加载源文件到保存更新后的 PDF 的完整过程。
此示例演示如何使用 Conholdate.Total for Java 向现有 PDF 添加文本。
import com.aspose.pdf.Document;
import com.aspose.pdf.TextBuilder;
import com.aspose.pdf.TextParagraph;
import com.aspose.pdf.Rectangle;
import com.aspose.pdf.TextFormattingOptions;
import com.aspose.pdf.TextFragment;
import com.aspose.pdf.FontRepository;
public class AddTextToPdf {
public static void main(String[] args) {
String dataDir = "path/to/your/document/directory/";
// Open document
Document doc = new Document(dataDir + "Conholdate.pdf");
TextBuilder builder = new TextBuilder(doc.getPages().get_Item(1));
// Create text paragraph
TextParagraph paragraph = new TextParagraph();
// Set subsequent lines indent
paragraph.setSubsequentLinesIndent(20);
// Specify the location to add TextParagraph
paragraph.setRectangle(new Rectangle(100, 300, 200, 700));
// Specify word wrapping mode
paragraph.getFormattingOptions().setWrapMode(TextFormattingOptions.WordWrapMode.ByWords);
// Create text fragment
TextFragment fragment1 = new TextFragment("the quick brown fox jumps over the lazy dog");
fragment1.getTextState().setFont(FontRepository.findFont("Times New Roman"));
fragment1.getTextState().setFontSize(12);
// Add fragment to paragraph
paragraph.appendLine(fragment1);
// Add paragraph
builder.appendParagraph(paragraph);
dataDir = dataDir + "AddText_out.pdf";
// Save resulting PDF document.
doc.save(dataDir);
}
}
注意: 此代码示例演示了核心功能。在项目中使用之前,请确保将
dataDir更新为指向实际的文档目录(包含Conholdate.pdf),确认已正确安装所有必需的依赖项,并在开发环境中彻底测试。如果遇到任何问题,请参考官方文档或联系支持团队获取帮助。
结论
在本教程中,我们展示了如何使用 Conholdate.Total for Java 的强大功能在 Java 中向 PDF 添加文本。通过遵循一步一步的演练,您可以可靠地使用 TextBuilder 和 TextParagraph 构建文本段落,通过 TextFragment 控制字体样式,并保存修改后的文档。SDK 在内部处理 PDF 页面坐标和文本渲染,让您专注于业务逻辑。请记得为生产环境获取合适的许可证;您可以从 temporary license page 获取临时许可证,或在 pricing page 上查看定价选项。拥有这些工具后,在 Java 应用程序中为 PDF 添加自定义文本将变得非常简单。
常见问题
如何在 Java 中向 PDF 添加文本而不覆盖现有内容?
使用builder.appendParagraph(paragraph)如示例所示;TextBuilder将新段落追加到目标页面,保留任何现有内容。是否可以在 Java 中向 PDF 添加自定义水印文本?
是的。相同的方法也适用于水印——创建一个包含所需水印文本的TextFragment,配置合适的字体和大小(或通过文本状态设置透明度),并在每页通过TextParagraph将其追加。如果插入的文本在某些语言中显示不正确,我该怎么办?
使用FontRepository.findFont()选择支持所需字符集的字体。SDK 会遵循通过getTextState()应用的字体设置,且文档 提供了处理不同脚本的指南。我可以批量处理多个 PDF 并添加相同的文本吗?
当然可以。将代码放在循环中,遍历文件路径列表,对每个文件重复使用相同的Document/TextBuilder逻辑。
