介绍
在 PDF 文档格式中,页面标签可直观地识别每个文档页面,例如在 PDF 阅读器应用程序的缩略图面板上显示文本标签。在本 Java 教程中,我们将学习如何使用 Apache PDFBox 库通过 Java 应用程序为 PDF 文档创建页面标签。
Apache PDFBox 库概述
Apache PDFBox 是一个用于处理 PDF 文档的开源 Java 库。您可以在pdfbox.apache.org获得有关该项目的更多信息
添加 Apache PDFBox 依赖项
如果您使用 Gradle 构建工具,请将以下依赖项添加到 build.gradle 文件中。
compile group: 'org.apache.pdfbox', name: 'pdfbox', version: '2.0.18'
如果您使用的是 Maven 构建工具,请将以下 XML 添加到 pom.xml 文件中。
<dependency>
<groupId>org.apache.pdfbox</groupId>
<artifactId>pdfbox</artifactId>
<version>2.0.18</version>
</dependency>
或者您可以从pdfbox.apache.org/download.cgi下载 pdfbox-2.0.18.jar 文件
第 1 步 - 创建一个空 PDF 文档并添加 5 个空白页
try (PDDocument document = new PDDocument())
{
for(int i = 0; i < 5; i++) {
document.addPage(new PDPage());
}
} catch (IOException e) {
e.printStackTrace();
}
第 2 步 - 为文档添加页面标签
PDPageLabels pageLabels = new PDPageLabels(document);
PDPageLabelRange pageLabelRange = new PDPageLabelRange();
pageLabelRange.setStyle(PDPageLabelRange.STYLE_ROMAN_UPPER);
pageLabelRange.setPrefix("Chapter ");
pageLabelRange.setStart(1);
pageLabels.setLabelItem(0, pageLabelRange);
document.getDocumentCatalog().setPageLabels(pageLabels);
第 3 步 - 将 PDF 文档文件保存到磁盘
document.save("D:\\SimpleSolution\\DocumentPageLabelsRomanUpper.pdf");
完整的 Java 应用程序代码
package dev.simplesolution;
import java.io.IOException;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.common.PDPageLabelRange;
import org.apache.pdfbox.pdmodel.common.PDPageLabels;
public class CreatePageLabelsRomanUpper {
public static void main(String[] args)
{
try (PDDocument document = new PDDocument())
{
for(int i = 0; i < 5; i++) {
document.addPage(new PDPage());
}
PDPageLabels pageLabels = new PDPageLabels(document);
PDPageLabelRange pageLabelRange = new PDPageLabelRange();
pageLabelRange.setStyle(PDPageLabelRange.STYLE_ROMAN_UPPER);
pageLabelRange.setPrefix("Chapter ");
pageLabelRange.setStart(1);
pageLabels.setLabelItem(0, pageLabelRange);
document.getDocumentCatalog().setPageLabels(pageLabels);
document.save("D:\\SimpleSolution\\DocumentPageLabelsRomanUpper.pdf");
} catch (IOException e) {
e.printStackTrace();
}
}
}
执行上面的 Java 代码,我们将在 D:\SimpleSolution\DocumentPageLabelsRomanUpper.pdf 创建 PDF 文件
在 PDF 阅读器应用程序上打开 DocumentPageLabelsRomanUpper.pdf 文件并显示缩略图窗口,您可以看到如下页面标签。
页面标签样式
Apache PDFBox 库支持 5 种不同的页面标签样式
- 大写罗马数字 I, II, III,…
- 小写罗马数字 i, ii, iii,…
- 大写字母 AZ
- 小写字母 az
- 十进制数 1,2,3,…
更新我们使用的页面标签样式
pageLabelRange.setStyle(PDPageLabelRange.STYLE_ROMAN_UPPER);
小写罗马页面标签样式示例
package dev.simplesolution;
import java.io.IOException;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.common.PDPageLabelRange;
import org.apache.pdfbox.pdmodel.common.PDPageLabels;
public class CreatePageLabelsRomanLower {
public static void main(String[] args)
{
try (PDDocument document = new PDDocument())
{
for(int i = 0; i < 5; i++) {
document.addPage(new PDPage());
}
PDPageLabels pageLabels = new PDPageLabels(document);
PDPageLabelRange pageLabelRange = new PDPageLabelRange();
pageLabelRange.setStyle(PDPageLabelRange.STYLE_ROMAN_LOWER);
pageLabelRange.setPrefix("Section ");
pageLabelRange.setStart(1);
pageLabels.setLabelItem(0, pageLabelRange);
document.getDocumentCatalog().setPageLabels(pageLabels);
document.save("D:\\SimpleSolution\\DocumentPageLabelsRomanLower.pdf");
} catch (IOException e) {
e.printStackTrace();
}
}
}
执行上面的应用程序可以看到如下的页面标签。
大写字母页面标签样式示例
package dev.simplesolution;
import java.io.IOException;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.common.PDPageLabelRange;
import org.apache.pdfbox.pdmodel.common.PDPageLabels;
public class CreatePageLabelsLettersUpper {
public static void main(String[] args)
{
try (PDDocument document = new PDDocument())
{
for(int i = 0; i < 5; i++) {
document.addPage(new PDPage());
}
PDPageLabels pageLabels = new PDPageLabels(document);
PDPageLabelRange pageLabelRange = new PDPageLabelRange();
pageLabelRange.setStyle(PDPageLabelRange.STYLE_LETTERS_UPPER);
pageLabelRange.setPrefix("Part ");
pageLabelRange.setStart(1);
pageLabels.setLabelItem(0, pageLabelRange);
document.getDocumentCatalog().setPageLabels(pageLabels);
document.save("D:\\SimpleSolution\\DocumentPageLabelsLettersUpper.pdf");
} catch (IOException e) {
e.printStackTrace();
}
}
}
执行上面的应用程序可以看到如下的页面标签。
小写字母页面标签样式示例
package dev.simplesolution;
import java.io.IOException;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.common.PDPageLabelRange;
import org.apache.pdfbox.pdmodel.common.PDPageLabels;
public class CreatePageLabelsLettersLower {
public static void main(String[] args)
{
try (PDDocument document = new PDDocument())
{
for(int i = 0; i < 5; i++) {
document.addPage(new PDPage());
}
PDPageLabels pageLabels = new PDPageLabels(document);
PDPageLabelRange pageLabelRange = new PDPageLabelRange();
pageLabelRange.setStyle(PDPageLabelRange.STYLE_LETTERS_LOWER);
pageLabelRange.setPrefix("Item ");
pageLabelRange.setStart(1);
pageLabels.setLabelItem(0, pageLabelRange);
document.getDocumentCatalog().setPageLabels(pageLabels);
document.save("D:\\SimpleSolution\\DocumentPageLabelsLettersLower.pdf");
} catch (IOException e) {
e.printStackTrace();
}
}
}
执行上面的应用程序可以看到如下的页面标签。
十进制页面标签样式示例
package dev.simplesolution;
import java.io.IOException;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.common.PDPageLabelRange;
import org.apache.pdfbox.pdmodel.common.PDPageLabels;
public class CreatePageLabelsDecimal {
public static void main(String[] args)
{
try (PDDocument document = new PDDocument())
{
for(int i = 0; i < 5; i++) {
document.addPage(new PDPage());
}
PDPageLabels pageLabels = new PDPageLabels(document);
PDPageLabelRange pageLabelRange = new PDPageLabelRange();
pageLabelRange.setStyle(PDPageLabelRange.STYLE_DECIMAL);
pageLabelRange.setPrefix("Page ");
pageLabelRange.setStart(1);
pageLabels.setLabelItem(0, pageLabelRange);
document.getDocumentCatalog().setPageLabels(pageLabels);
document.save("D:\\SimpleSolution\\DocumentPageLabelsDecimal.pdf");
}catch (IOException e) {
e.printStackTrace();
}
}
}
执行上面的应用程序可以看到如下的页面标签。
为 PDF 文档设置不同的页面标签样式
下面的示例 Java 应用程序展示了如何为一个 PDF 文档中的不同页面设置不同的页面标签样式。
package dev.simplesolution;
import java.io.IOException;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.common.PDPageLabelRange;
import org.apache.pdfbox.pdmodel.common.PDPageLabels;
public class CreatePageLabels {
public static void main(String[] args)
{
try (PDDocument document = new PDDocument())
{
for(int i = 0; i < 10; i++) {
document.addPage(new PDPage());
}
PDPageLabels pageLabels = new PDPageLabels(document);
PDPageLabelRange pageLabelRangeRoman = new PDPageLabelRange();
pageLabelRangeRoman.setStyle(PDPageLabelRange.STYLE_ROMAN_UPPER);
pageLabelRangeRoman.setPrefix("Chapter ");
pageLabelRangeRoman.setStart(1);
pageLabels.setLabelItem(0, pageLabelRangeRoman);
PDPageLabelRange pageLabelRangeLetters = new PDPageLabelRange();
pageLabelRangeLetters.setStyle(PDPageLabelRange.STYLE_LETTERS_UPPER);
pageLabelRangeLetters.setPrefix("Part ");
pageLabelRangeLetters.setStart(1);
pageLabels.setLabelItem(2, pageLabelRangeLetters);
PDPageLabelRange pageLabelRangeDecimal = new PDPageLabelRange();
pageLabelRangeDecimal.setStyle(PDPageLabelRange.STYLE_DECIMAL);
pageLabelRangeDecimal.setPrefix("Page ");
pageLabelRangeDecimal.setStart(1);
pageLabels.setLabelItem(5, pageLabelRangeDecimal);
document.getDocumentCatalog().setPageLabels(pageLabels);
document.save("D:\\SimpleSolution\\DocumentPageLabels.pdf");
}catch (IOException e) {
e.printStackTrace();
}
}
}
执行上面的应用程序可以看到如下的页面标签。
下载源代码
本文中的源代码可以在以下位置找到:github.com/simplesolutiondev/ApachePDFBoxPageLabels
或下载:
快乐编码😊