如何在Java中拆分PDF

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

在Java中拆分PDF非常简单,使用IronPDF可以通过PdfDocument类上提取单个页面、提取页面范围或在边界分割文档。 每个方法返回一个新的PdfDocument可以独立于原件保存。

快速入门:在Java中拆分PDF

  1. 通过Maven或Gradle安装IronPDF for Java
  2. 使用License.setLicenseKey()设置您的许可证密钥
  3. 使用PdfDocument.fromFile()加载PDF
  4. 使用copyPage()提取单个页面
  5. 使用saveAs()保存结果
 :title=Quickstart
//:path=/static-assets/ironpdf-java/content-code-examples/how-to/java-split-pdf-tutorial/quickstart.java
import 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 {
        // Set the license key before calling any IronPDF methods
        License.setLicenseKey("IRONPDF-MYLICENSE-KEY-1EF01");

        // Load the source PDF from disk
        PdfDocument pdf = PdfDocument.fromFile(Path.of("source.pdf"));

        // Extract the first page (zero-based index 0) into a new document
        PdfDocument firstPage = pdf.copyPage(0);

        // Save the extracted page as a standalone PDF
        firstPage.saveAs(Path.of("page-one.pdf"));
    }
}
 :title=Quickstart
//:path=/static-assets/ironpdf-java/content-code-examples/how-to/java-split-pdf-tutorial/quickstart.java
import 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 {
        // Set the license key before calling any IronPDF methods
        License.setLicenseKey("IRONPDF-MYLICENSE-KEY-1EF01");

        // Load the source PDF from disk
        PdfDocument pdf = PdfDocument.fromFile(Path.of("source.pdf"));

        // Extract the first page (zero-based index 0) into a new document
        PdfDocument firstPage = pdf.copyPage(0);

        // Save the extracted page as a standalone PDF
        firstPage.saveAs(Path.of("page-one.pdf"));
    }
}
JAVA

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

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

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

开始之前我需要什么?

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

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

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

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

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

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

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

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

PdfDocument返回。 原始文档未被修改。 1表示第二页,以此类推。

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

//:path=/static-assets/ironpdf-java/content-code-examples/how-to/java-split-pdf-tutorial/copy-single-page.java
import 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 {
        // Set the license key before calling any IronPDF methods
        License.setLicenseKey("IRONPDF-MYLICENSE-KEY-1EF01");

        // Load the source PDF from disk
        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);

        // Save the extracted page as a standalone 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
import 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 {
        // Set the license key before calling any IronPDF methods
        License.setLicenseKey("IRONPDF-MYLICENSE-KEY-1EF01");

        // Load the source PDF from disk
        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);

        // Save the extracted page as a standalone PDF
        thirdPage.saveAs(Path.of("third-page.pdf"));
    }
}
JAVA

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

Icon Quote related to 如何从PDF中提取单个页面?

我最喜欢的这种库是 IronPDF。它允许快速高效地操作 PDF 文件。它还具有许多有价值的功能,比如导出为 PDF/A 格式和数字签名 PDF 文档。

Milan Jovanovic related to 如何从PDF中提取单个页面?

Milan Jovanovic

微软MVP

查看案例研究
Icon Quote related to 如何从PDF中提取单个页面?

IronOCR 意味着我们每年可以节省 $40,000 的人工处理成本,同时提高生产力,并释放资源用于高影响任务。我强烈推荐它。

Brent Matzelle related to 如何从PDF中提取单个页面?

Brent Matzelle

首席技术官,OPYN

查看案例研究
Icon Quote related to 如何从PDF中提取单个页面?

Iron Suite 在我们的运营中起着至关重要的作用。这些工具提高了业务各方面的效率,包括创建平面图和改善库存管理。

David Jones related to 如何从PDF中提取单个页面?

David Jones

首席软件工程师,Agorus Build

查看案例研究

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

PdfDocument返回。 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
import 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 {
        // Set the license key before calling any IronPDF methods
        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
import 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 {
        // Set the license key before calling any IronPDF methods
        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将抛出异常。 在调用pdf.getPageCount(),尤其是在处理页数可能变化的文档时。

如何将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
import 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 {
        // Set the license key before calling any IronPDF methods
        License.setLicenseKey("IRONPDF-MYLICENSE-KEY-1EF01");

        // Load the source PDF from disk
        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
import 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 {
        // Set the license key before calling any IronPDF methods
        License.setLicenseKey("IRONPDF-MYLICENSE-KEY-1EF01");

        // Load the source PDF from disk
        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的splitBy方法涵盖了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<PdfDocument>:页面0至边界索引,以及所有剩余页面。

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

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

splitBy返回什么?

splitBy(splitAfterPageIndex)返回一个包含两个元素的List<PdfDocument>。第一个元素包含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.6 刚刚发布
Still Scrolling Icon

还在滚动吗?

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