<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>java pdf shapes on Conholdate Blog</title>
    <link>https://blog-qa.conholdate.com/zh/tag/java-pdf-shapes/</link>
    <description>Recent content in java pdf shapes on Conholdate Blog</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>zh</language>
    <lastBuildDate>Fri, 05 Jun 2026 18:38:01 +0000</lastBuildDate><atom:link href="https://blog-qa.conholdate.com/zh/tag/java-pdf-shapes/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>在 Java 中向 PDF 添加形状</title>
      <link>https://blog-qa.conholdate.com/zh/total/add-shapes-to-pdf-in-java/</link>
      <pubDate>Fri, 05 Jun 2026 18:38:01 +0000</pubDate>
      
      <guid>https://blog-qa.conholdate.com/zh/total/add-shapes-to-pdf-in-java/</guid>
      <description>了解如何在 Java 中使用 Conholdate.Total for Java 向 PDF 添加形状。请按照本分步指南，了解代码、设置以及矢量图形的最佳实践。</description>
      <content:encoded><![CDATA[<p>向 <a href="https://docs.fileformat.com/pdf">PDF</a> 文件添加矢量图形是生成报告、发票和交互式文档的常见需求。<a href="https://products.conholdate.com/total/java/">Conholdate.Total for Java</a> 是一个强大的 SDK，可简化服务器端的 PDF 操作。在本指南中，您将学习如何在 PDF 中插入矩形、椭圆和直线，配置它们的外观，并处理性能考虑，所有示例均使用清晰的 Java 代码。</p>
<h2 id="在-java-中向-pdf-添加形状的步骤">在 Java 中向 PDF 添加形状的步骤</h2>
<ol>
<li><strong>添加 Maven 仓库和依赖</strong> - 在 <code>pom.xml</code> 中加入 Conholdate Maven 仓库和 <code>conholdate-total</code> 依赖。这使得诸如 <code>PdfDocument</code> 和 <code>ShapeFactory</code> 等 SDK 类可用。
<!-- raw HTML omitted -->
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-xml" data-lang="xml"><span style="display:flex;"><span><span style="color:#f92672">&lt;repositories&gt;</span>
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">&lt;repository&gt;</span>
</span></span><span style="display:flex;"><span>        <span style="color:#f92672">&lt;id&gt;</span>conholdate-repo<span style="color:#f92672">&lt;/id&gt;</span>
</span></span><span style="display:flex;"><span>        <span style="color:#f92672">&lt;name&gt;</span>Conholdate Maven Repository<span style="color:#f92672">&lt;/name&gt;</span>
</span></span><span style="display:flex;"><span>        <span style="color:#f92672">&lt;url&gt;</span>https://repository.conholdate.com/repo/<span style="color:#f92672">&lt;/url&gt;</span>
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">&lt;/repository&gt;</span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">&lt;/repositories&gt;</span>
</span></span></code></pre></div></li>
</ol>
<!-- raw HTML omitted -->
<ol start="2">
<li><strong>加载 PDF 文档</strong> - 创建 <code>PdfDocument</code> 的实例并打开目标 PDF 文件。该类在 <a href="https://reference.conholdate.com/java/">API 参考</a> 中有文档说明。</li>
</ol>
<!-- raw HTML omitted -->
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-java" data-lang="java"><span style="display:flex;"><span>PdfDocument pdf <span style="color:#f92672">=</span> <span style="color:#66d9ef">new</span> PdfDocument<span style="color:#f92672">();</span>
</span></span><span style="display:flex;"><span>pdf<span style="color:#f92672">.</span><span style="color:#a6e22e">open</span><span style="color:#f92672">(</span><span style="color:#e6db74">&#34;input.pdf&#34;</span><span style="color:#f92672">);</span>
</span></span></code></pre></div><ol start="3">
<li><strong>创建形状对象</strong> - 使用 <code>ShapeFactory</code> 实例化矩形、椭圆或直线。设置位置、大小和视觉属性。
<!-- raw HTML omitted -->
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-java" data-lang="java"><span style="display:flex;"><span><span style="color:#75715e">// Rectangle
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>Shape rect <span style="color:#f92672">=</span> ShapeFactory<span style="color:#f92672">.</span><span style="color:#a6e22e">createRectangle</span><span style="color:#f92672">(</span>100<span style="color:#f92672">,</span> 150<span style="color:#f92672">,</span> 200<span style="color:#f92672">,</span> 100<span style="color:#f92672">);</span>
</span></span><span style="display:flex;"><span>rect<span style="color:#f92672">.</span><span style="color:#a6e22e">setFillColor</span><span style="color:#f92672">(</span>Color<span style="color:#f92672">.</span><span style="color:#a6e22e">BLUE</span><span style="color:#f92672">);</span>
</span></span><span style="display:flex;"><span>rect<span style="color:#f92672">.</span><span style="color:#a6e22e">setStrokeColor</span><span style="color:#f92672">(</span>Color<span style="color:#f92672">.</span><span style="color:#a6e22e">BLACK</span><span style="color:#f92672">);</span>
</span></span><span style="display:flex;"><span>rect<span style="color:#f92672">.</span><span style="color:#a6e22e">setLineWidth</span><span style="color:#f92672">(</span>2<span style="color:#f92672">);</span>
</span></span></code></pre></div></li>
</ol>
<p>// Ellipse
Shape ellipse = ShapeFactory.createEllipse(350, 150, 150, 100);
ellipse.setFillColor(Color.GREEN);
ellipse.setStrokeColor(Color.DARK_GRAY);
ellipse.setLineWidth(1.5f);</p>
<pre tabindex="0"><code>// Line
   Shape line = ShapeFactory.createLine(100, 300, 500, 300);
   line.setStrokeColor(Color.RED);
   line.setLineWidth(3);
</code></pre><ol start="4">
<li><strong>向页面添加形状</strong> - 从文档中检索所需的页面，并将每个形状添加到其图形集合中。</li>
</ol>
<!-- raw HTML omitted -->
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-java" data-lang="java"><span style="display:flex;"><span>Page page <span style="color:#f92672">=</span> pdf<span style="color:#f92672">.</span><span style="color:#a6e22e">getPages</span><span style="color:#f92672">().</span><span style="color:#a6e22e">get_Item</span><span style="color:#f92672">(</span>0<span style="color:#f92672">);</span> <span style="color:#75715e">// first page
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>page<span style="color:#f92672">.</span><span style="color:#a6e22e">getGraphics</span><span style="color:#f92672">().</span><span style="color:#a6e22e">addShape</span><span style="color:#f92672">(</span>rect<span style="color:#f92672">);</span>
</span></span><span style="display:flex;"><span>page<span style="color:#f92672">.</span><span style="color:#a6e22e">getGraphics</span><span style="color:#f92672">().</span><span style="color:#a6e22e">addShape</span><span style="color:#f92672">(</span>ellipse<span style="color:#f92672">);</span>
</span></span><span style="display:flex;"><span>page<span style="color:#f92672">.</span><span style="color:#a6e22e">getGraphics</span><span style="color:#f92672">().</span><span style="color:#a6e22e">addShape</span><span style="color:#f92672">(</span>line<span style="color:#f92672">);</span>
</span></span></code></pre></div><ol start="5">
<li><strong>保存更新后的 PDF</strong> - 在添加完所有形状后，将文档保存为新文件。
<!-- raw HTML omitted -->
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-java" data-lang="java"><span style="display:flex;"><span>pdf<span style="color:#f92672">.</span><span style="color:#a6e22e">save</span><span style="color:#f92672">(</span><span style="color:#e6db74">&#34;output.pdf&#34;</span><span style="color:#f92672">);</span>
</span></span><span style="display:flex;"><span>pdf<span style="color:#f92672">.</span><span style="color:#a6e22e">close</span><span style="color:#f92672">();</span>
</span></span></code></pre></div></li>
</ol>
<h2 id="在-java-中向-pdf-添加形状---完整代码示例">在 Java 中向 PDF 添加形状 - 完整代码示例</h2>
<p>下面的示例将所有步骤整合到一个可直接运行的程序中。</p>
<!-- raw HTML omitted -->
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-java" data-lang="java"><span style="display:flex;"><span><span style="color:#f92672">import</span> com.conholdate.total.pdf.*<span style="color:#f92672">;</span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">import</span> com.conholdate.total.pdf.shapes.*<span style="color:#f92672">;</span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">import</span> java.awt.Color<span style="color:#f92672">;</span>
</span></span></code></pre></div><p>public class AddShapesDemo {
public static void main(String[] args) throws Exception {
// Initialize PDF document
PdfDocument pdf = new PdfDocument();
pdf.open(&ldquo;input.pdf&rdquo;);</p>
<pre tabindex="0"><code>// 创建矩形
Shape rectangle = ShapeFactory.createRectangle(100, 150, 200, 100);
rectangle.setFillColor(Color.BLUE);
rectangle.setStrokeColor(Color.BLACK);
rectangle.setLineWidth(2);
</code></pre><p>// 创建椭圆
Shape ellipse = ShapeFactory.createEllipse(350, 150, 150, 100);
ellipse.setFillColor(Color.GREEN);
ellipse.setStrokeColor(Color.DARK_GRAY);
ellipse.setLineWidth(1.5f);</p>
<pre tabindex="0"><code>// 创建线
Shape line = ShapeFactory.createLine(100, 300, 500, 300);
line.setStrokeColor(Color.RED);
line.setLineWidth(3);
</code></pre><p>// 添加形状到第一页
Page page = pdf.getPages().get_Item(0);
page.getGraphics().addShape(rectangle);
page.getGraphics().addShape(ellipse);
page.getGraphics().addShape(line);</p>
<pre tabindex="0"><code>// Save the result
pdf.save(&#34;output.pdf&#34;);
pdf.close();
}
}
</code></pre><!-- raw HTML omitted -->
<blockquote>
<p><strong>注意：</strong> 此代码示例演示了核心功能。在将其用于项目之前，请确保更新文件路径（<code>input.pdf</code>、<code>output.pdf</code>）以匹配实际文件位置，验证所有必需的依赖项已正确安装，并在开发环境中彻底测试。如果遇到任何问题，请参阅<a href="https://docs.conholdate.com/java/">官方文档</a>或联系<a href="https://forum.conholdate.com/c/total/5">支持团队</a>获取帮助。</p>
</blockquote>
<h2 id="在-java-中的安装和设置">在 Java 中的安装和设置</h2>
<p>要开始使用 Conholdate.Total for Java，请从官方网站下载最新版本，并添加前面显示的 Maven 依赖项。该 SDK 可在任何 Java 8+ 运行时上运行，且不需要额外的本机库。</p>
<ul>
<li><strong>下载 URL:</strong> <a href="https://releases.conholdate.com/total/java/">Conholdate.Total for Java Release</a></li>
<li><strong>文档:</strong> 详细的使用说明可在<a href="https://docs.conholdate.com/java/">官方文档</a>中获取。</li>
<li><strong>许可证:</strong> 可从<a href="https://purchase.conholdate.com/temporary-license/">临时许可证页面</a>获取临时许可证，或在<a href="https://purchase.conholdate.com/pricing/total/family/">定价页面</a>查看完整价格。</li>
</ul>
<h2 id="关键特性和概述">关键特性和概述</h2>
<h3 id="在-java-中使用-conholdatetotal-向-pdf-添加形状">在 Java 中使用 Conholdate.Total 向 PDF 添加形状</h3>
<p>Conholdate.Total for Java 提供统一的 API 用于创建和编辑 PDF 内容。形状绘制功能使用矢量图形，确保添加的元素在任何缩放级别下都保持清晰。您可以绘制基本图元（矩形、椭圆、直线）以及复杂路径。</p>
<h3 id="conholdatetotal-对本任务重要的功能">Conholdate.Total 对本任务重要的功能</h3>
<ul>
<li><strong>跨平台兼容性:</strong> 在 Windows、Linux 和 macOS 服务器上运行。</li>
<li><strong>高性能渲染:</strong> 形状使用生成本机 PDF 内容的相同引擎进行渲染，避免光栅化。</li>
<li><strong>对外观的完整控制:</strong> 设置填充颜色、描边颜色、线宽、不透明度，以及 <a href="https://docs.fileformat.com/3d/blend/">blend</a> 模式。</li>
<li><strong>分层图形:</strong> 将形状添加到特定图层或组，以便后续更轻松地操作。</li>
</ul>
<h2 id="配置形状属性以实现最佳渲染">配置形状属性以实现最佳渲染</h2>
<p>在添加形状时，请考虑以下属性以实现所需的视觉效果：</p>
<ul>
<li><strong>位置和大小:</strong> 使用相对于页面尺寸的绝对坐标（点）或百分比。</li>
<li><strong>颜色:</strong> SDK 接受 <code>java.awt.Color</code> 对象。要实现透明度，请使用 <code>new Color(r, g, b, alpha)</code>。</li>
<li><strong>线宽:</strong> 以点为单位测量；<code>1</code> 的值等于 1/72 英寸。</li>
<li><strong>不透明度和混合模式:</strong> 使用 <code>setOpacity(float)</code> 和 <code>setBlendMode(BlendMode)</code> 进行调整。</li>
<li><strong>旋转和倾斜:</strong> 在高级布局中，通过 <code>setRotation(double)</code> 或 <code>setSkew(double, double)</code> 应用变换。</li>
</ul>
<p>设置高级属性的示例：</p>
<!-- raw HTML omitted -->
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-java" data-lang="java"><span style="display:flex;"><span>ellipse<span style="color:#f92672">.</span><span style="color:#a6e22e">setOpacity</span><span style="color:#f92672">(</span>0<span style="color:#f92672">.</span><span style="color:#a6e22e">7f</span><span style="color:#f92672">);</span>
</span></span><span style="display:flex;"><span>ellipse<span style="color:#f92672">.</span><span style="color:#a6e22e">setBlendMode</span><span style="color:#f92672">(</span>BlendMode<span style="color:#f92672">.</span><span style="color:#a6e22e">MULTIPLY</span><span style="color:#f92672">);</span>
</span></span><span style="display:flex;"><span>ellipse<span style="color:#f92672">.</span><span style="color:#a6e22e">setRotation</span><span style="color:#f92672">(</span>45<span style="color:#f92672">);</span>
</span></span></code></pre></div><!-- raw HTML omitted -->
<h2 id="添加形状到-pdf-时的性能考虑">添加形状到 PDF 时的性能考虑</h2>
<p>添加大量矢量对象可能会增加处理时间和内存使用。请遵循以下指南：</p>
<ul>
<li><strong>Batch Drawing:</strong> 将相关形状分组到单个图形容器中，然后再将其添加到页面。</li>
<li><strong>Reuse Objects:</strong> 如果需要在多个页面上使用相同的形状，请克隆现有形状，而不是创建新实例。</li>
<li><strong>Avoid Over‑Scaling:</strong> 在最终显示尺寸下定义形状，以避免昂贵的光栅转换。</li>
<li><strong>Dispose Resources:</strong> 及时关闭 <code>PdfDocument</code> 以释放本机资源。</li>
</ul>
<h2 id="结论">结论</h2>
<p><a href="https://products.conholdate.com/total/java/">Conholdate.Total for Java</a> 为 Java 开发者提供了一种直接的方法来向 PDF 文档添加形状，从而实现丰富的交互式报告和发票的创建。通过遵循本指南中的步骤、配置技巧和性能指南，您可以自信地将矢量图形集成到 PDF 工作流中。请记得为生产环境获取合适的许可证；临时许可证可用于评估，完整的定价详情请参阅 <a href="https://purchase.conholdate.com/pricing/total/family/">定价页面</a>。</p>
<h2 id="常见问题">常见问题</h2>
<p><strong>如何向 PDF 中的形状添加自定义字体？</strong><br>
您可以使用 <code>pdf.getFonts().addFont(&quot;MyFont.ttf&quot;)</code> 嵌入 TrueType 字体，然后通过 <code>setFont(myFont)</code> 将其分配给形状。SDK 确保该字体嵌入最终的 PDF 中。</p>
<p><strong>是否可以在不丢失现有内容的情况下向现有 PDF 插入形状？</strong><br>
是的。使用 <code>PdfDocument.open()</code> 打开 PDF 可保留所有现有页面和对象。向页面的 graphics 集合添加形状仅会增强页面；不会覆盖现有内容。</p>
<p><strong>添加形状后我可以导出哪些文件格式？</strong><br>
Conholdate.Total for Java 支持保存为 PDF、PDF/A、PDF/X，以及图像格式，如 <a href="https://docs.fileformat.com/image/png/">PNG</a>、<a href="https://docs.fileformat.com/image/jpeg/">JPEG</a> 和 BMP。根据需要使用 <code>pdf.save(&quot;output.pdf&quot;)</code> 或 <code>pdf.save(&quot;output.png&quot;, ImageSaveOptions.Png)</code>。</p>
]]></content:encoded>
    </item>
    
  </channel>
</rss>
