<?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>memory optimization on Conholdate Blog</title>
    <link>https://blog-qa.conholdate.com/zh/tag/memory-optimization/</link>
    <description>Recent content in memory optimization on Conholdate Blog</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>zh</language>
    <lastBuildDate>Wed, 14 Oct 2026 14:25:40 +0000</lastBuildDate><atom:link href="https://blog-qa.conholdate.com/zh/tag/memory-optimization/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>在 Java 中将 PDF 转换为 PNG</title>
      <link>https://blog-qa.conholdate.com/zh/total/convert-pdf-to-png-in-java/</link>
      <pubDate>Wed, 14 Oct 2026 14:25:40 +0000</pubDate>
      
      <guid>https://blog-qa.conholdate.com/zh/total/convert-pdf-to-png-in-java/</guid>
      <description>了解如何使用 Conholdate.Total for Java 在 Java 中将 PDF 转换为 PNG。按照一步一步的指南，提供完整代码、设置、选项和性能技巧。</description>
      <content:encoded><![CDATA[<p>将 <a href="https://docs.fileformat.com/pdf">PDF</a> 文件转换为 <a href="https://docs.fileformat.com/image/png/">PNG</a> 图像是文档处理流水线中的常见需求，尤其是在需要渲染页面进行预览或显示时。<a href="https://products.conholdate.com/total/java/">Conholdate.Total for Java</a> 提供了强大的 SDK，使得在 Java 应用程序中完成此任务变得简单。在本指南中，您将学习如何在 Java 中实现 PDF 转 PNG 的转换工具，探索性能友好的选项，并查看完整的多线程代码示例。完成后，您将能够将快速、内存高效的 PDF 转 PNG 转换集成到任何 Java 项目中。</p>
<h2 id="完整的-java-示例将-pdf-转换为-png使用-conholdatetotal">完整的 Java 示例，将 PDF 转换为 PNG，使用 Conholdate.Total</h2>
<p>此示例演示如何在 Java 中使用 Conholdate.Total 的转换 API 将 PDF 转换为 PNG。</p>
<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.groupdocs.conversion.Converter<span style="color:#f92672">;</span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">import</span> com.groupdocs.conversion.options.convert.PngConvertOptions<span style="color:#f92672">;</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">import</span> java.io.FileInputStream<span style="color:#f92672">;</span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">import</span> java.io.InputStream<span style="color:#f92672">;</span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">import</span> java.util.ArrayList<span style="color:#f92672">;</span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">import</span> java.util.List<span style="color:#f92672">;</span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">import</span> java.util.concurrent.*<span style="color:#f92672">;</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">public</span> <span style="color:#66d9ef">class</span> <span style="color:#a6e22e">PdfToPngDemo</span> <span style="color:#f92672">{</span>
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">private</span> <span style="color:#66d9ef">static</span> <span style="color:#66d9ef">final</span> String INPUT_PDF <span style="color:#f92672">=</span> <span style="color:#e6db74">&#34;input.pdf&#34;</span><span style="color:#f92672">;</span>
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">private</span> <span style="color:#66d9ef">static</span> <span style="color:#66d9ef">final</span> String OUTPUT_PATTERN <span style="color:#f92672">=</span> <span style="color:#e6db74">&#34;output_page_%d.png&#34;</span><span style="color:#f92672">;</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">public</span> <span style="color:#66d9ef">static</span> <span style="color:#66d9ef">void</span> <span style="color:#a6e22e">main</span><span style="color:#f92672">(</span>String<span style="color:#f92672">[]</span> args<span style="color:#f92672">)</span> <span style="color:#66d9ef">throws</span> Exception <span style="color:#f92672">{</span>
</span></span><span style="display:flex;"><span>        <span style="color:#66d9ef">long</span> start <span style="color:#f92672">=</span> System<span style="color:#f92672">.</span><span style="color:#a6e22e">nanoTime</span><span style="color:#f92672">();</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">// Determine page count without loading whole document into memory
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>        <span style="color:#66d9ef">int</span> totalPages<span style="color:#f92672">;</span>
</span></span><span style="display:flex;"><span>        <span style="color:#66d9ef">try</span> <span style="color:#f92672">(</span>InputStream is <span style="color:#f92672">=</span> <span style="color:#66d9ef">new</span> FileInputStream<span style="color:#f92672">(</span>INPUT_PDF<span style="color:#f92672">))</span> <span style="color:#f92672">{</span>
</span></span><span style="display:flex;"><span>            Converter tempConverter <span style="color:#f92672">=</span> <span style="color:#66d9ef">new</span> Converter<span style="color:#f92672">(</span>is<span style="color:#f92672">);</span>
</span></span><span style="display:flex;"><span>            totalPages <span style="color:#f92672">=</span> tempConverter<span style="color:#f92672">.</span><span style="color:#a6e22e">getPageCount</span><span style="color:#f92672">();</span>
</span></span><span style="display:flex;"><span>        <span style="color:#f92672">}</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">// Thread pool sized to available processors
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>        ExecutorService executor <span style="color:#f92672">=</span> Executors<span style="color:#f92672">.</span><span style="color:#a6e22e">newFixedThreadPool</span><span style="color:#f92672">(</span>Runtime<span style="color:#f92672">.</span><span style="color:#a6e22e">getRuntime</span><span style="color:#f92672">().</span><span style="color:#a6e22e">availableProcessors</span><span style="color:#f92672">());</span>
</span></span><span style="display:flex;"><span>        List<span style="color:#f92672">&lt;</span>Future<span style="color:#f92672">&lt;?&gt;&gt;</span> tasks <span style="color:#f92672">=</span> <span style="color:#66d9ef">new</span> ArrayList<span style="color:#f92672">&lt;&gt;();</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">for</span> <span style="color:#f92672">(</span><span style="color:#66d9ef">int</span> page <span style="color:#f92672">=</span> 1<span style="color:#f92672">;</span> page <span style="color:#f92672">&lt;=</span> totalPages<span style="color:#f92672">;</span> page<span style="color:#f92672">++)</span> <span style="color:#f92672">{</span>
</span></span><span style="display:flex;"><span>            <span style="color:#66d9ef">final</span> <span style="color:#66d9ef">int</span> pageNumber <span style="color:#f92672">=</span> page<span style="color:#f92672">;</span>
</span></span><span style="display:flex;"><span>            tasks<span style="color:#f92672">.</span><span style="color:#a6e22e">add</span><span style="color:#f92672">(</span>executor<span style="color:#f92672">.</span><span style="color:#a6e22e">submit</span><span style="color:#f92672">(()</span> <span style="color:#f92672">-&gt;</span> <span style="color:#f92672">{</span>
</span></span><span style="display:flex;"><span>                <span style="color:#75715e">// Each thread creates its own Converter instance – ensures thread safety
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>                <span style="color:#66d9ef">try</span> <span style="color:#f92672">(</span>InputStream pdfStream <span style="color:#f92672">=</span> <span style="color:#66d9ef">new</span> FileInputStream<span style="color:#f92672">(</span>INPUT_PDF<span style="color:#f92672">))</span> <span style="color:#f92672">{</span>
</span></span><span style="display:flex;"><span>                    Converter converter <span style="color:#f92672">=</span> <span style="color:#66d9ef">new</span> Converter<span style="color:#f92672">(</span>pdfStream<span style="color:#f92672">);</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>PngConvertOptions options <span style="color:#f92672">=</span> <span style="color:#66d9ef">new</span> PngConvertOptions<span style="color:#f92672">();</span>
</span></span><span style="display:flex;"><span>                    options<span style="color:#f92672">.</span><span style="color:#a6e22e">setPageNumber</span><span style="color:#f92672">(</span>pageNumber<span style="color:#f92672">);</span>          <span style="color:#75715e">// convert single page
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>                    options<span style="color:#f92672">.</span><span style="color:#a6e22e">setResolution</span><span style="color:#f92672">(</span>150<span style="color:#f92672">);</span>                 <span style="color:#75715e">// memory‑friendly DPI
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>                    options<span style="color:#f92672">.</span><span style="color:#a6e22e">setQuality</span><span style="color:#f92672">(</span>90<span style="color:#f92672">);</span>                     <span style="color:#75715e">// PNG compression quality (0‑100)
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>
</span></span><span style="display:flex;"><span>String outputPath <span style="color:#f92672">=</span> String<span style="color:#f92672">.</span><span style="color:#a6e22e">format</span><span style="color:#f92672">(</span>OUTPUT_PATTERN<span style="color:#f92672">,</span> pageNumber<span style="color:#f92672">);</span>
</span></span><span style="display:flex;"><span>                    converter<span style="color:#f92672">.</span><span style="color:#a6e22e">convert</span><span style="color:#f92672">(</span>outputPath<span style="color:#f92672">,</span> options<span style="color:#f92672">);</span>
</span></span><span style="display:flex;"><span>                <span style="color:#f92672">}</span> <span style="color:#66d9ef">catch</span> <span style="color:#f92672">(</span>Exception e<span style="color:#f92672">)</span> <span style="color:#f92672">{</span>
</span></span><span style="display:flex;"><span>                    <span style="color:#66d9ef">throw</span> <span style="color:#66d9ef">new</span> RuntimeException<span style="color:#f92672">(</span><span style="color:#e6db74">&#34;Failed to convert page &#34;</span> <span style="color:#f92672">+</span> pageNumber<span style="color:#f92672">,</span> e<span style="color:#f92672">);</span>
</span></span><span style="display:flex;"><span>                <span style="color:#f92672">}</span>
</span></span><span style="display:flex;"><span>            <span style="color:#f92672">}));</span>
</span></span><span style="display:flex;"><span>        <span style="color:#f92672">}</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">// Wait for all conversions to finish
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>        <span style="color:#66d9ef">for</span> <span style="color:#f92672">(</span>Future<span style="color:#f92672">&lt;?&gt;</span> f <span style="color:#f92672">:</span> tasks<span style="color:#f92672">)</span> <span style="color:#f92672">{</span>
</span></span><span style="display:flex;"><span>            f<span style="color:#f92672">.</span><span style="color:#a6e22e">get</span><span style="color:#f92672">();</span> <span style="color:#75715e">// re‑throws any exception from the task
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>        <span style="color:#f92672">}</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>executor<span style="color:#f92672">.</span><span style="color:#a6e22e">shutdown</span><span style="color:#f92672">();</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">long</span> end <span style="color:#f92672">=</span> System<span style="color:#f92672">.</span><span style="color:#a6e22e">nanoTime</span><span style="color:#f92672">();</span>
</span></span><span style="display:flex;"><span>        System<span style="color:#f92672">.</span><span style="color:#a6e22e">out</span><span style="color:#f92672">.</span><span style="color:#a6e22e">printf</span><span style="color:#f92672">(</span><span style="color:#e6db74">&#34;PDF to PNG conversion completed in %.2f seconds.%n&#34;</span><span style="color:#f92672">,</span>
</span></span><span style="display:flex;"><span>                <span style="color:#f92672">(</span>end <span style="color:#f92672">-</span> start<span style="color:#f92672">)</span> <span style="color:#f92672">/</span> 1_000_000_000<span style="color:#f92672">.</span><span style="color:#a6e22e">0</span><span style="color:#f92672">);</span>
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">}</span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">}</span>
</span></span></code></pre></div><blockquote>
<p><strong>注意：</strong> 这段代码示例演示了核心功能。在项目中使用之前，请确保更新所有文件路径和配置值以匹配实际环境，验证已正确安装所有必需的依赖项，并在开发环境中彻底测试。如果遇到任何问题，请参阅<a href="https://docs.conholdate.com/java/">官方文档</a>或联系<a href="https://forum.conholdate.com/c/total/5">支持团队</a>获取帮助。</p>
</blockquote>
<h2 id="了解在-java-代码中将-pdf-转换为-png">了解在 Java 代码中将 PDF 转换为 PNG</h2>
<p>以下要点分解了示例程序的工作流程：</p>
<ol>
<li>
<p><strong>加载 PDF 并确定页数</strong> - <code>Converter</code> 类使用指向源 PDF 的 <code>InputStream</code> 实例化。调用 <code>getPageCount()</code> 可在不将整个文档加载到内存的情况下获取总页数。</p>
<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:#66d9ef">try</span> <span style="color:#f92672">(</span>InputStream is <span style="color:#f92672">=</span> <span style="color:#66d9ef">new</span> FileInputStream<span style="color:#f92672">(</span>INPUT_PDF<span style="color:#f92672">))</span> <span style="color:#f92672">{</span>
</span></span><span style="display:flex;"><span>    Converter tempConverter <span style="color:#f92672">=</span> <span style="color:#66d9ef">new</span> Converter<span style="color:#f92672">(</span>is<span style="color:#f92672">);</span>
</span></span><span style="display:flex;"><span>    totalPages <span style="color:#f92672">=</span> tempConverter<span style="color:#f92672">.</span><span style="color:#a6e22e">getPageCount</span><span style="color:#f92672">();</span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">}</span>
</span></span></code></pre></div></li>
<li>
<p><strong>创建用于并行处理的线程池</strong> - 一个 <code>ExecutorService</code>，其大小等于可用处理器的数量，可并发运行转换任务，从而提升整体吞吐量。</p>
<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>ExecutorService executor <span style="color:#f92672">=</span> Executors<span style="color:#f92672">.</span><span style="color:#a6e22e">newFixedThreadPool</span><span style="color:#f92672">(</span>Runtime<span style="color:#f92672">.</span><span style="color:#a6e22e">getRuntime</span><span style="color:#f92672">().</span><span style="color:#a6e22e">availableProcessors</span><span style="color:#f92672">());</span>
</span></span></code></pre></div></li>
<li>
<p><strong>配置特定页面的转换选项</strong> - 在每个任务中都会创建一个新的 <code>Converter</code> 实例（确保线程安全）。<code>PngConvertOptions</code> 允许您设置目标页面、分辨率和 PNG 质量。</p>
<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>PngConvertOptions options <span style="color:#f92672">=</span> <span style="color:#66d9ef">new</span> PngConvertOptions<span style="color:#f92672">();</span>
</span></span><span style="display:flex;"><span>options<span style="color:#f92672">.</span><span style="color:#a6e22e">setPageNumber</span><span style="color:#f92672">(</span>pageNumber<span style="color:#f92672">);</span>
</span></span><span style="display:flex;"><span>options<span style="color:#f92672">.</span><span style="color:#a6e22e">setResolution</span><span style="color:#f92672">(</span>150<span style="color:#f92672">);</span>
</span></span><span style="display:flex;"><span>options<span style="color:#f92672">.</span><span style="color:#a6e22e">setQuality</span><span style="color:#f92672">(</span>90<span style="color:#f92672">);</span>
</span></span></code></pre></div></li>
<li>
<p><strong>执行转换并写入 PNG 文件</strong> - <code>convert</code> 方法使用包含页码的格式化文件名写入输出 PNG。</p>
</li>
</ol>
<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>String outputPath <span style="color:#f92672">=</span> String<span style="color:#f92672">.</span><span style="color:#a6e22e">format</span><span style="color:#f92672">(</span>OUTPUT_PATTERN<span style="color:#f92672">,</span> pageNumber<span style="color:#f92672">);</span>
</span></span><span style="display:flex;"><span>converter<span style="color:#f92672">.</span><span style="color:#a6e22e">convert</span><span style="color:#f92672">(</span>outputPath<span style="color:#f92672">,</span> options<span style="color:#f92672">);</span>
</span></span></code></pre></div><ol start="5">
<li><strong>同步完成并清理</strong> - 主线程等待所有 futures 完成，然后关闭执行器并打印耗时。此模式确保在程序退出前每个页面都已处理完毕。</li>
</ol>
<p>如需更深入的 API 细节，请查阅 <a href="https://reference.conholdate.com/java/">Conholdate.Total Java API 参考</a>。</p>
<h2 id="准备环境">准备环境</h2>
<p>将 Conholdate.Total Maven 仓库和依赖项添加到您的 <code>pom.xml</code>：</p>
<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><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">&lt;dependency&gt;</span>
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">&lt;groupId&gt;</span>com.conholdate<span style="color:#f92672">&lt;/groupId&gt;</span>
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">&lt;artifactId&gt;</span>conholdate-total<span style="color:#f92672">&lt;/artifactId&gt;</span>
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">&lt;version&gt;</span>24.9<span style="color:#f92672">&lt;/version&gt;</span>
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">&lt;type&gt;</span>pom<span style="color:#f92672">&lt;/type&gt;</span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">&lt;/dependency&gt;</span>
</span></span></code></pre></div><p>从<a href="https://releases.conholdate.com/total/java/">官方下载页面</a>下载最新的 SDK 包。该库需要 Java 8 或更高版本，并可在任何标准 JVM 上运行。</p>
<h2 id="配置转换设置">配置转换设置</h2>
<p>示例代码演示了您可以调优的三个关键选项：</p>
<ul>
<li><strong>页码</strong> - <code>options.setPageNumber(pageNumber);</code> 选择要渲染的特定页面。</li>
<li><strong>分辨率</strong> - <code>options.setResolution(150);</code> 控制 DPI。更高的值可以提升细节，但会增加内存使用。</li>
<li><strong>质量</strong> - <code>options.setQuality(90);</code> 设置 PNG 压缩（0‑100）。调整此值以在文件大小和视觉保真度之间取得平衡。</li>
</ul>
<p>如果您需要更多控制，API 参考列出了其他属性，例如 <code>setColorMode</code> 和 <code>setBackgroundColor</code>。</p>
<h2 id="高效-pdf-转-png-转换的最佳实践">高效 PDF 转 PNG 转换的最佳实践</h2>
<ul>
<li><strong>逐页流式处理</strong> - 从 <code>InputStream</code> 处理每一页，以避免将整个 PDF 加载到内存中。</li>
<li><strong>使用固定大小线程池</strong> - 将池大小设置为 <code>Runtime.getRuntime().availableProcessors()</code> 可防止线程争用，同时最大化 CPU 使用率。</li>
<li><strong>设置适中的 DPI</strong> - 对于大多数预览场景，150 DPI 在质量和性能之间提供了良好的平衡。</li>
<li><strong>谨慎复用 Converter 实例</strong> - 为每个线程创建新的 <code>Converter</code> 可确保线程安全；共享单个实例可能导致竞争条件。</li>
<li><strong>测量执行时间</strong> - 示例会打印经过的秒数；使用这些数据可以针对特定工作负载微调分辨率或线程数。</li>
</ul>
<h2 id="结论">结论</h2>
<p>在 Java 中将 PDF 转换为 PNG 是一项常规但对性能敏感的操作。使用 <a href="https://products.conholdate.com/total/java/">Conholdate.Total for Java</a>，您可以获得功能齐全的 SDK，支持逐页流式处理、多线程执行以及细粒度的图像选项。上面的示例展示了如何构建可扩展的 PDF 转 PNG 转换工具，配置分辨率和质量，并保持低内存使用。请记得获取用于生产的有效许可证；您可以在 <a href="https://purchase.conholdate.com/temporary-license/">https://purchase.conholdate.com/temporary-license/</a> 请求临时许可证，并在 <a href="https://purchase.conholdate.com/pricing/total/family/">https://purchase.conholdate.com/pricing/total/family/</a> 查看定价选项。集成代码，根据需要调整设置，即可从任何 PDF 文档提供快速、可靠的图像预览。</p>
<h2 id="常见问题">常见问题</h2>
<ul>
<li>
<p><strong>如何在 Java 中将 PDF 转换为 PNG 而无需外部工具？</strong><br>
SDK 完全在代码中执行转换，因此您无需任何第三方命令行实用程序。只需添加 Maven 依赖并使用如示例所示的 <code>Converter</code> 类。</p>
</li>
<li>
<p><strong>在 Java 中的 PDF 转 PNG 转换工具，我可以期待什么性能？</strong><br>
通过并行处理页面并使用适中的 DPI（例如 150），示例通常能在现代 CPU 上将 50 页的 PDF 在几秒钟内转换完成。您可以通过测量程序打印的耗时来对自己的文件进行基准测试。</p>
</li>
<li>
<p><strong>我可以在不耗尽内存的情况下转换包含大量高分辨率图像的 PDF 吗？</strong><br>
是的。代码会分别流式处理每一页，并在转换后释放 <code>InputStream</code>，从而保持堆占用较小。如果遇到内存压力，可调低分辨率或减少线程数。</p>
</li>
<li>
<p><strong>是否可以进一步自定义 PNG 输出，例如更改背景颜色？</strong><br>
可在 <code>PngConvertOptions</code> 中使用其他选项。请参阅 <a href="https://reference.conholdate.com/java/">API reference</a> 了解 <code>setBackgroundColor</code> 和 <code>setColorMode</code> 等属性。</p>
</li>
</ul>
<h2 id="相关文章">相关文章</h2>
<ul>
<li><a href="https://blog.conholdate.com/zh/total/convert-jpg-to-png-in-java/">在 Java 中将 JPG 转换为 PNG</a></li>
<li><a href="https://blog.conholdate.com/zh/total/convert-cdr-to-png-in-java/">在 Java 中将 CDR 转换为 PNG</a></li>
<li><a href="https://blog.conholdate.com/zh/total/convert-pdf-to-grayscale-in-java/">在 Java 中将 PDF 转换为灰度</a></li>
</ul>
]]></content:encoded>
    </item>
    
  </channel>
</rss>
