使用 Apache PDFBox 在 Java 中创建 PDF 文档页面标签

介绍

在 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

或下载:

下载源代码

快乐编码😊

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值