PDF 文件添加矢量图形是生成报告、发票和交互式文档的常见需求。Conholdate.Total for Java 是一个强大的 SDK,可简化服务器端的 PDF 操作。在本指南中,您将学习如何在 PDF 中插入矩形、椭圆和直线,配置它们的外观,并处理性能考虑,所有示例均使用清晰的 Java 代码。

在 Java 中向 PDF 添加形状的步骤

  1. 添加 Maven 仓库和依赖 - 在 pom.xml 中加入 Conholdate Maven 仓库和 conholdate-total 依赖。这使得诸如 PdfDocumentShapeFactory 等 SDK 类可用。
    <repositories>
        <repository>
            <id>conholdate-repo</id>
            <name>Conholdate Maven Repository</name>
            <url>https://repository.conholdate.com/repo/</url>
        </repository>
    </repositories>
    
  1. 加载 PDF 文档 - 创建 PdfDocument 的实例并打开目标 PDF 文件。该类在 API 参考 中有文档说明。
PdfDocument pdf = new PdfDocument();
pdf.open("input.pdf");
  1. 创建形状对象 - 使用 ShapeFactory 实例化矩形、椭圆或直线。设置位置、大小和视觉属性。
    // Rectangle
    Shape rect = ShapeFactory.createRectangle(100, 150, 200, 100);
    rect.setFillColor(Color.BLUE);
    rect.setStrokeColor(Color.BLACK);
    rect.setLineWidth(2);
    

// Ellipse Shape ellipse = ShapeFactory.createEllipse(350, 150, 150, 100); ellipse.setFillColor(Color.GREEN); ellipse.setStrokeColor(Color.DARK_GRAY); ellipse.setLineWidth(1.5f);

// Line
   Shape line = ShapeFactory.createLine(100, 300, 500, 300);
   line.setStrokeColor(Color.RED);
   line.setLineWidth(3);
  1. 向页面添加形状 - 从文档中检索所需的页面,并将每个形状添加到其图形集合中。
Page page = pdf.getPages().get_Item(0); // first page
page.getGraphics().addShape(rect);
page.getGraphics().addShape(ellipse);
page.getGraphics().addShape(line);
  1. 保存更新后的 PDF - 在添加完所有形状后,将文档保存为新文件。
    pdf.save("output.pdf");
    pdf.close();
    

在 Java 中向 PDF 添加形状 - 完整代码示例

下面的示例将所有步骤整合到一个可直接运行的程序中。

import com.conholdate.total.pdf.*;
import com.conholdate.total.pdf.shapes.*;
import java.awt.Color;

public class AddShapesDemo { public static void main(String[] args) throws Exception { // Initialize PDF document PdfDocument pdf = new PdfDocument(); pdf.open(“input.pdf”);

// 创建矩形
Shape rectangle = ShapeFactory.createRectangle(100, 150, 200, 100);
rectangle.setFillColor(Color.BLUE);
rectangle.setStrokeColor(Color.BLACK);
rectangle.setLineWidth(2);

// 创建椭圆 Shape ellipse = ShapeFactory.createEllipse(350, 150, 150, 100); ellipse.setFillColor(Color.GREEN); ellipse.setStrokeColor(Color.DARK_GRAY); ellipse.setLineWidth(1.5f);

// 创建线
Shape line = ShapeFactory.createLine(100, 300, 500, 300);
line.setStrokeColor(Color.RED);
line.setLineWidth(3);

// 添加形状到第一页 Page page = pdf.getPages().get_Item(0); page.getGraphics().addShape(rectangle); page.getGraphics().addShape(ellipse); page.getGraphics().addShape(line);

// Save the result
pdf.save("output.pdf");
pdf.close();
}
}

注意: 此代码示例演示了核心功能。在将其用于项目之前,请确保更新文件路径(input.pdfoutput.pdf)以匹配实际文件位置,验证所有必需的依赖项已正确安装,并在开发环境中彻底测试。如果遇到任何问题,请参阅官方文档或联系支持团队获取帮助。

在 Java 中的安装和设置

要开始使用 Conholdate.Total for Java,请从官方网站下载最新版本,并添加前面显示的 Maven 依赖项。该 SDK 可在任何 Java 8+ 运行时上运行,且不需要额外的本机库。

关键特性和概述

在 Java 中使用 Conholdate.Total 向 PDF 添加形状

Conholdate.Total for Java 提供统一的 API 用于创建和编辑 PDF 内容。形状绘制功能使用矢量图形,确保添加的元素在任何缩放级别下都保持清晰。您可以绘制基本图元(矩形、椭圆、直线)以及复杂路径。

Conholdate.Total 对本任务重要的功能

  • 跨平台兼容性: 在 Windows、Linux 和 macOS 服务器上运行。
  • 高性能渲染: 形状使用生成本机 PDF 内容的相同引擎进行渲染,避免光栅化。
  • 对外观的完整控制: 设置填充颜色、描边颜色、线宽、不透明度,以及 blend 模式。
  • 分层图形: 将形状添加到特定图层或组,以便后续更轻松地操作。

配置形状属性以实现最佳渲染

在添加形状时,请考虑以下属性以实现所需的视觉效果:

  • 位置和大小: 使用相对于页面尺寸的绝对坐标(点)或百分比。
  • 颜色: SDK 接受 java.awt.Color 对象。要实现透明度,请使用 new Color(r, g, b, alpha)
  • 线宽: 以点为单位测量;1 的值等于 1/72 英寸。
  • 不透明度和混合模式: 使用 setOpacity(float)setBlendMode(BlendMode) 进行调整。
  • 旋转和倾斜: 在高级布局中,通过 setRotation(double)setSkew(double, double) 应用变换。

设置高级属性的示例:

ellipse.setOpacity(0.7f);
ellipse.setBlendMode(BlendMode.MULTIPLY);
ellipse.setRotation(45);

添加形状到 PDF 时的性能考虑

添加大量矢量对象可能会增加处理时间和内存使用。请遵循以下指南:

  • Batch Drawing: 将相关形状分组到单个图形容器中,然后再将其添加到页面。
  • Reuse Objects: 如果需要在多个页面上使用相同的形状,请克隆现有形状,而不是创建新实例。
  • Avoid Over‑Scaling: 在最终显示尺寸下定义形状,以避免昂贵的光栅转换。
  • Dispose Resources: 及时关闭 PdfDocument 以释放本机资源。

结论

Conholdate.Total for Java 为 Java 开发者提供了一种直接的方法来向 PDF 文档添加形状,从而实现丰富的交互式报告和发票的创建。通过遵循本指南中的步骤、配置技巧和性能指南,您可以自信地将矢量图形集成到 PDF 工作流中。请记得为生产环境获取合适的许可证;临时许可证可用于评估,完整的定价详情请参阅 定价页面

常见问题

如何向 PDF 中的形状添加自定义字体?
您可以使用 pdf.getFonts().addFont("MyFont.ttf") 嵌入 TrueType 字体,然后通过 setFont(myFont) 将其分配给形状。SDK 确保该字体嵌入最终的 PDF 中。

是否可以在不丢失现有内容的情况下向现有 PDF 插入形状?
是的。使用 PdfDocument.open() 打开 PDF 可保留所有现有页面和对象。向页面的 graphics 集合添加形状仅会增强页面;不会覆盖现有内容。

添加形状后我可以导出哪些文件格式?
Conholdate.Total for Java 支持保存为 PDF、PDF/A、PDF/X,以及图像格式,如 PNGJPEG 和 BMP。根据需要使用 pdf.save("output.pdf")pdf.save("output.png", ImageSaveOptions.Png)