带标签的 PDF 是包含与 HTML 代码非常相似的标签的 PDF 文档。标签提供了一种逻辑结构,用于控制如何通过辅助技术呈现PDF内容。每个标签标识了关联的内容元素,例如标题级别 1 <H1>、段落 <P>、图像 <Figure> 或表格 <Table>。在本文中,您将学习如何使用 Spire.PDF for Java 在 Java 中创建带标签的 PDF 文档。
安装 Spire.PDF for Java
首先,您需要在 Java 程序中添加 Spire.Pdf.jar 文件作为依赖项。JAR 文件可以从此链接下载。如果您使用 Maven,则可以将以下代码添加到项目的 pom.xml 文件中,从而在应用程序中导入 JAR 文件。
<repositories>
<repository>
<id>com.e-iceblue</id>
<name>e-iceblue</name>
<url>https://repo.e-iceblue.cn/repository/maven-public/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>e-iceblue</groupId>
<artifactId>spire.pdf</artifactId>
<version>10.10.7</version>
</dependency>
</dependencies>
创建带标签的 PDF 文档
要在带标签的 PDF 文档中添加结构元素,我们必须首先创建 PdfTaggedContent 类的对象。 然后使用 PdfTaggedContent.getStructureTreeRoot().appendChildElement() 方法向根添加一个元素。以下是使用 Spire.PDF for Java 向带标签的 PDF 添加“标题”元素的详细步骤。
- 创建一个 PdfDocument 对象并使用 PdfDocument.getPages().add() 方法向其添加一个页面。
- 创建 PdfTaggedContent 类的对象。
- 使用 PdfTaggedContent.setPdfUA1Identification() 方法使文档符合 PDF/UA 标识。
- 使用 PdfTaggedContent.getStructureTreeRoot().appendChildElement() 方法将“文档”元素添加到文档的根目录。
- 使用 PdfStructureElement.appendChildElement() 方法在“文档”元素下添加一个“标题”元素。
- 使用 PdfStructureElement.beginMarkedContent() 方法添加开始标记,指示标题元素的开头。
- 使用 PdfPageBase.getCanvas().drawString() 方法在页面上绘制标题文本。
- 使用 PdfStructureElement.beginMarkedContent() 方法添加结束标记,这意味着标题元素在此结束。
- 使用 PdfDocument.saveToFile() 方法将文档保存到 PDF 文件。
以下代码提供了一个示例,展示了如何在 Java 标记的 PDF 文档中创建各种元素,包括文档、标题、段落、图像和表格。
- Java
import com.spire.pdf.*;
import com.spire.pdf.graphics.*;
import com.spire.pdf.interchange.taggedpdf.PdfStandardStructTypes;
import com.spire.pdf.interchange.taggedpdf.PdfStructureElement;
import com.spire.pdf.interchange.taggedpdf.PdfTaggedContent;
import com.spire.pdf.tables.PdfTable;
import java.awt.*;
import java.awt.geom.Point2D;
import java.awt.geom.Rectangle2D;
public class CreateTaggedPdf {
public static void main(String[] args) throws Exception {
//创建一个 PdfDocument 对象
PdfDocument doc = new PdfDocument();
//添加页面
PdfPageBase page = doc.getPages().add(PdfPageSize.A4, new PdfMargins(20));
//设置 Tab 键顺序
page.setTabOrder(TabOrder.Structure);
//创建 PdfTaggedContent 类的对象
PdfTaggedContent taggedContent = new PdfTaggedContent(doc);
//设置文档的语言和标题
taggedContent.setLanguage("zh-CN");
taggedContent.setTitle("创建标签PDF文件");
//设置PDF/UA1标识
taggedContent.setPdfUA1Identification();
//创建字体和画笔
PdfTrueTypeFont font = new PdfTrueTypeFont(new Font("宋体",Font.PLAIN,13), true);
PdfSolidBrush brush = new PdfSolidBrush(new PdfRGBColor(Color.BLACK));
//添加“文档”元素
PdfStructureElement document = taggedContent.getStructureTreeRoot().appendChildElement(PdfStandardStructTypes.Document);
//添加“标题”元素
PdfStructureElement heading1 = document.appendChildElement(PdfStandardStructTypes.HeadingLevel1);
heading1.beginMarkedContent(page);
String headingText = "什么是标签PDF文件?";
page.getCanvas().drawString(headingText, font, brush, new Point2D.Float(5, 30));
heading1.endMarkedContent(page);
//添加“段落”元素
PdfStructureElement paragraph = document.appendChildElement(PdfStandardStructTypes.Paragraph);
paragraph.beginMarkedContent(page);
String paragraphText = "带标签的 PDF 似乎不是一个改变生活的术语。但对一些人来说,它是。" +
"对于盲人或视力不佳且使用辅助技术(例如屏幕阅读器和连接的盲文显示器)来访问信息的人来说," +
"未加标签的 PDF 意味着他们错过了文档中包含的信息," +
"因为辅助技术无法“阅读”未加标签的 PDF。" +
"数字可访问性为曾经对视障人士关闭的信息开辟了许多途径,但 PDF 经常被排除在外。";
Rectangle2D.Float rect = new Rectangle2D.Float(5, 60, (float) page.getCanvas().getClientSize().getWidth(), (float) page.getCanvas().getClientSize().getHeight());
page.getCanvas().drawString(paragraphText, font, brush, rect);
paragraph.endMarkedContent(page);
//添加“图形”元素
PdfStructureElement figure = document.appendChildElement(PdfStandardStructTypes.Figure);
figure.beginMarkedContent(page);
PdfImage image = PdfImage.fromFile("PDF.png");
page.getCanvas().drawImage(image, new Point2D.Float(5, 160));
figure.endMarkedContent(page);
//添加“表格”元素
PdfStructureElement table = document.appendChildElement(PdfStandardStructTypes.Table);
table.beginMarkedContent(page);
PdfTable pdfTable = new PdfTable();
pdfTable.getStyle().getDefaultStyle().setFont(font);
String[] data = {"姓名;年龄;性别",
"杨丽;22;女",
"李顺;25;男"
};
String[][] dataSource = new String[data.length][];
for (int i = 0; i < data.length; i++) {
dataSource[i] = data[i].split("[;]", -1);
}
pdfTable.setDataSource(dataSource);
pdfTable.getStyle().setShowHeader(true);
pdfTable.draw(page.getCanvas(), new Point2D.Float(5, 320), 300f);
table.endMarkedContent(page);
//将文档保存到文件
doc.saveToFile("创建标签PDF文件.pdf");
}
}
申请临时 License
如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。获取有效期 30 天的临时许可证。