如何在Java中拆分PDF

This article was translated from English: Does it need improvement?
Translated
View the article in English

使用 IronPDF for Java 在 Java 中拆分 PDF 非常简单,该库在 PdfDocument 类中提供了 copyPagessplitBy 方法,用于提取单页、提取页面范围或在分隔符处拆分文档。 每个方法都会返回一个新的 PdfDocument,您需将其与原始对象分开保存。

快速入门:在Java中拆分PDF

  1. 通过Maven或Gradle安装IronPDF for Java
  2. 使用 License.setLicenseKey() 设置您的许可证密钥
  3. 加载 PDF 文件 PdfDocument.fromFile()
  4. 使用 copyPage() 提取单页内容
  5. 将结果保存为 saveAs()

```java :title=快速入门 //:path=/static-assets/ironpdf-java/content-code-examples/how-to/java-split-pdf-tutorial/quickstart.java 导入 java.io.IOException; import java.nio.file.Path; import com.ironsoftware.IronPdf.License; import com.ironsoftware.IronPdf.PdfDocument;

public class Main { public static void main(String[] args) throws IOException { // 在调用任何IronPDF方法之前设置许可证密钥 License.setLicenseKey("IronPDF-MYLICENSE-KEY-1EF01");

    // 从磁盘加载源PDF
    PdfDocument pdf = PdfDocument.fromFile(Path.of("source.pdf"));

    // 将第一页(基于零的索引0)提取到一个新文档中
    PdfDocument firstPage = pdf.copyPage(0);

    // 将提取的页面保存为独立的PDF
    firstPage.saveAs(Path.of("page-one.pdf"));
}

}


在编程生成文档时,拆分PDF是一个常见需求。 作为单个文件生成的报告可能需要在分发之前分成单个部分。 存档工作流程通常需要将每章或发票存储为单独的文件。选择性共享场景,如仅向客户发送特定页面范围,比发送整个文档更为有益。

IronPDF 通过 `PdfDocument` 类上的一致 API 处理这三种拆分模式。 用于从HTML生成PDF或加载现有文件的同一类公开页面提取方法,因此拆分自然地集成到任何现有的IronPDF工作流程中。 有关设置和依赖项配置,请参阅[快速入门概述](https://ironpdf.com/java/docs/)。

IronPDF中的所有页面索引都是从零开始的。 如果源文档有十页,有效的索引范围应为 0 到 9。这适用于 `copyPages` 的两个边界,以及 `splitBy` 的边界参数。 传递超出范围的索引会在运行时引发异常,因此在处理可变长度文档时,请根据 `pdf.getPageCount()` 验证页码。

<div class="hsg-featured-snippet">
    <h2>如何在Java中拆分PDF</h2>
    <ol>
        <li><a href="https://ironpdf.com/java/#download-modal">安装Java库以拆分PDF</a></li>
        <li>使用<strong>PdfDocument</strong>类加载源PDF</li>
        <li>使用<code>copyPage</code>将单个页面提取到新文档中</li>
        <li>使用<code>copyPages</code>提取一范围的页面</li>
        <li>使用<code>splitBy</code>在特定页面边界处分割PDF</li>
        <li>使用<code>saveAs</code>保存每个结果文档</li>
    </ol>
</div>

## 开始之前我需要什么?

在拆分PDF之前,请确认IronPDF已经添加到您的Java项目中,作为Maven或Gradle依赖项。 该库需要Java 8或更高版本。 将IronPDF工件从Maven Central添加到您的构建文件中:

```xml
<dependency>
    <groupId>com.ironsoftware</groupId>
    <artifactId>ironpdf</artifactId>
    <version>2024.9.1</version>
</dependency>

对于 Gradle 项目,请在您的 build.gradle 中添加等效的 implementation 行。 完整的依赖项和配置说明可在快速入门概述中找到。

需要一个有效的许可证密钥。 在调用任何IronPDF方法之前,在应用程序启动时设置它:

License.setLicenseKey("IRONPDF-MYLICENSE-KEY-1EF01");
License.setLicenseKey("IRONPDF-MYLICENSE-KEY-1EF01");
JAVA

有关许可选项和试用密钥,请访问许可证密钥指南

提示IronPDF中的所有页面索引使用零基编号。 您的文档的第1页为索引0,第2页为索引1,以此类推。

如何从PDF中提取单个页面?

copyPage(int pageIndex) 方法从 PdfDocument 中提取一页,并将其作为新的、独立的 PdfDocument 返回。 原始文档未被修改。 pageIndex 参数采用零基索引:传入 0 表示第一页,1 表示第二页,依此类推。

当您的工作流程需要隔离特定页面时,例如提取封面、签名签署页面或从批量生成的文档中提取单个发票时,此方法是合适的。

//:path=/static-assets/ironpdf-java/content-code-examples/how-to/java-split-pdf-tutorial/copy-single-page.java
导入 java.io.IOException;
import java.nio.file.Path;
import com.ironsoftware.IronPdf.License;
import com.ironsoftware.IronPdf.PdfDocument;

public class Main {
public static void main(String[] args) throws IOException {
        // 在调用任何IronPDF方法之前设置许可证密钥
        License.setLicenseKey("IronPDF-MYLICENSE-KEY-1EF01");

        // 从磁盘加载源PDF
        PdfDocument pdf = PdfDocument.fromFile(Path.of("source.pdf"));

        // Extract the third page (zero-based index 2) into a new document
        PdfDocument thirdPage = pdf.copyPage(2);

        // 将提取的页面保存为独立的PDF
        thirdPage.saveAs(Path.of("third-page.pdf"));
    }
}
//:path=/static-assets/ironpdf-java/content-code-examples/how-to/java-split-pdf-tutorial/copy-single-page.java
导入 java.io.IOException;
import java.nio.file.Path;
import com.ironsoftware.IronPdf.License;
import com.ironsoftware.IronPdf.PdfDocument;

public class Main {
public static void main(String[] args) throws IOException {
        // 在调用任何IronPDF方法之前设置许可证密钥
        License.setLicenseKey("IronPDF-MYLICENSE-KEY-1EF01");

        // 从磁盘加载源PDF
        PdfDocument pdf = PdfDocument.fromFile(Path.of("source.pdf"));

        // Extract the third page (zero-based index 2) into a new document
        PdfDocument thirdPage = pdf.copyPage(2);

        // 将提取的页面保存为独立的PDF
        thirdPage.saveAs(Path.of("third-page.pdf"));
    }
}
JAVA

返回的 PdfDocument 与源文本完全无关。 您可以在保存之前应用进一步的转换、添加注释或将它与其他文档合并。

如何从PDF中提取一范围的页面?

copyPages(int fromIndex, int toIndex) 方法会提取连续的一组页面,并将其作为新的 PdfDocument 返回。 fromIndextoIndex 均为基于零且包含页码的范围:对一份十页的文档传入 copyPages(1, 4) 时,将提取第 2、3、4 和 5 页(索引号 1 至 4)。

页面范围提取适合于从多章报告中提取一章,提取多页附录,或从导出为PDF的演示文稿中提取一组幻灯片。

//:path=/static-assets/ironpdf-java/content-code-examples/how-to/java-split-pdf-tutorial/copy-page-range.java
导入 java.io.IOException;
import java.nio.file.Path;
import com.ironsoftware.IronPdf.License;
import com.ironsoftware.IronPdf.PdfDocument;

public class Main {
public static void main(String[] args) throws IOException {
        // 在调用任何IronPDF方法之前设置许可证密钥
        License.setLicenseKey("IronPDF-MYLICENSE-KEY-1EF01");

        // Load a multi-page source PDF
        PdfDocument pdf = PdfDocument.fromFile(Path.of("multi-page-report.pdf"));

        // Extract pages 2 through 5 (zero-based indexes 1 through 4, inclusive)
        PdfDocument chapter = pdf.copyPages(1, 4);

        // Save the extracted page range as a standalone document
        chapter.saveAs(Path.of("chapter-pages-2-to-5.pdf"));
    }
}
//:path=/static-assets/ironpdf-java/content-code-examples/how-to/java-split-pdf-tutorial/copy-page-range.java
导入 java.io.IOException;
import java.nio.file.Path;
import com.ironsoftware.IronPdf.License;
import com.ironsoftware.IronPdf.PdfDocument;

public class Main {
public static void main(String[] args) throws IOException {
        // 在调用任何IronPDF方法之前设置许可证密钥
        License.setLicenseKey("IronPDF-MYLICENSE-KEY-1EF01");

        // Load a multi-page source PDF
        PdfDocument pdf = PdfDocument.fromFile(Path.of("multi-page-report.pdf"));

        // Extract pages 2 through 5 (zero-based indexes 1 through 4, inclusive)
        PdfDocument chapter = pdf.copyPages(1, 4);

        // Save the extracted page range as a standalone document
        chapter.saveAs(Path.of("chapter-pages-2-to-5.pdf"));
    }
}
JAVA

如果源文档的页数少于要求的 toIndex,IronPDF 将抛出异常。 在处理页数可能变化的文档时,调用 copyPages 之前请先检查 pdf.getPageCount()

如何将PDF拆分为两个文档?

splitBy(int splitAfterPageIndex) 方法会在边界处分割 PDF,并返回一个包含恰好两个元素的 List<PdfDocument>。 第一部分包含索引号从 0 到 splitAfterPageIndex(含)的页面。 第二部分包含从 splitAfterPageIndex + 1 到文档结尾的所有剩余页面。

例如,对一份十页的文档调用 splitBy(2) 将生成:

  • parts.get(0):第 0、1、2 页(前三页)
  • parts.get(1):第 3 至 9 页(剩余的七页)

这种方法适合在已知边界处分割文档:将封面表与正文分开,在分节处分割文档,或将批处理文件分割为两半以进行并行处理。

//:path=/static-assets/ironpdf-java/content-code-examples/how-to/java-split-pdf-tutorial/split-by-boundary.java
导入 java.io.IOException;
import java.nio.file.Path;
import java.util.List;
import com.ironsoftware.IronPdf.License;
import com.ironsoftware.IronPdf.PdfDocument;

public class Main {
public static void main(String[] args) throws IOException {
        // 在调用任何IronPDF方法之前设置许可证密钥
        License.setLicenseKey("IronPDF-MYLICENSE-KEY-1EF01");

        // 从磁盘加载源PDF
        PdfDocument pdf = PdfDocument.fromFile(Path.of("source.pdf"));

        // Split after page index 2 -- first part: pages 0-2, second part: pages 3 to end
        List<PdfDocument> parts = pdf.splitBy(2);

        // Save the first part (pages 0 through 2)
        parts.get(0).saveAs(Path.of("part-one.pdf"));

        // Save the second part (pages 3 through end)
        parts.get(1).saveAs(Path.of("part-two.pdf"));
    }
}
//:path=/static-assets/ironpdf-java/content-code-examples/how-to/java-split-pdf-tutorial/split-by-boundary.java
导入 java.io.IOException;
import java.nio.file.Path;
import java.util.List;
import com.ironsoftware.IronPdf.License;
import com.ironsoftware.IronPdf.PdfDocument;

public class Main {
public static void main(String[] args) throws IOException {
        // 在调用任何IronPDF方法之前设置许可证密钥
        License.setLicenseKey("IronPDF-MYLICENSE-KEY-1EF01");

        // 从磁盘加载源PDF
        PdfDocument pdf = PdfDocument.fromFile(Path.of("source.pdf"));

        // Split after page index 2 -- first part: pages 0-2, second part: pages 3 to end
        List<PdfDocument> parts = pdf.splitBy(2);

        // Save the first part (pages 0 through 2)
        parts.get(0).saveAs(Path.of("part-one.pdf"));

        // Save the second part (pages 3 through end)
        parts.get(1).saveAs(Path.of("part-two.pdf"));
    }
}
JAVA

请注意splitBy 始终返回一个包含恰好两个元素的列表。 如果 splitAfterPageIndex 等于文档的最后一页索引,则第二个元素将是一个空文档。 (当拆分点动态计算时,请根据 pdf.getPageCount() - 1 验证拆分边界。)}]

在Java中拆分PDF的下一步是什么?

IronPDF 的 copyPagessplitBy 方法全面满足 Java 环境下的 PDF 拆分需求,涵盖从单页提取、基于范围的拆分到基于边界的分割等所有场景。 每个方法返回一个独立的 PdfDocument,可供进一步处理或直接保存。

要继续在Java中处理PDF文档,请探索以下相关资源:

开始您的免费试用,以在您的Java工作流程中添加PDF拆分功能。 要购买用于生产使用的许可证,请查看许可证选项

常见问题解答

如何在Java中使用IronPDF拆分PDF?

使用PdfDocument.fromFile()加载PDF,然后调用copyPage(index)提取单个页面,copyPages(from, to)提取一个范围,或者splitBy(index)将文档分为两个部分。使用saveAs()保存每个结果。

copyPage、copyPages和splitBy之间有什么区别?

copyPage(index)通过从零开始的索引提取单个页面。copyPages(fromIndex, toIndex)提取范围,其中两者均为包含边界。splitBy(index)在边界划分文档,并返回一个包含两个元素的List:页面0至边界索引,以及所有剩余页面。

IronPDF中的页面索引是从零开始还是从一开始?

IronPDF中的页面索引是从零开始的。文档的第一页索引是0,第二页是索引1,依此类推。这适用于copyPagecopyPagessplitBy

splitBy返回什么?

splitBy(splitAfterPageIndex)返回一个包含两个元素的List。第一个元素包含0至分割索引(含),第二个元素包含所有剩余页面。如果分割索引是最后一页,第二个元素将是一个空文档。

在Java中使用IronPDF拆分PDF的先决条件是什么?

您需要Java 8或更高版本,将IronPDF库添加为Maven或Gradle依赖项,并在进行任何IronPDF调用之前用License.setLicenseKey()设置有效的许可证密钥。

如何在Java中提取PDF的第2到第5页?

使用pdf.copyPages(1, 4)提取第2到第5页。IronPDF使用从零开始的索引,因此第2页是索引1,第5页是索引4。两个边界为包含边界。用saveAs()保存结果。

Darrius Serrant
全栈软件工程师(WebOps)

Darrius Serrant 拥有迈阿密大学的计算机科学学士学位,目前在 Iron Software 担任全栈 WebOps 市场工程师。从小就被编码吸引,他认为计算机既神秘又易于接触,使其成为创意和问题解决的理想媒介。

在 Iron Software,Darrius 喜欢创造新事物,并简化复杂概念以使其更易理解。作为我们常驻的开发者之一,他还自愿教授学生,与下一代分享他的专业知识。

对于 Darrius 来说,他的工作令人满意,因为它被重视并产生真正的影响。

准备开始了吗?
版本: 2026.5 just released
Still Scrolling Icon

还在滚动吗?

想快速获得证据?
运行示例看着你的HTML代码变成PDF文件。