C# 创建标签PDF文件
Q1:关于“标签PDF文件(Tagged PDF)”
标签PDF文件包含描述文档结构和各种文档元素顺序的元数据,是一种包含后端提供的可访问标记,管理阅读顺序和文档内容表示的逻辑结构的PDF文件[1]。
Q2:关于“标签(Tag)”
PDF标签是通过屏幕阅读器等支持技术访问PDF文档内容的关键。PDF标记在层次结构或标记树(tag tree)中排列PDF内容[1]。
这里的标签是一种不可见的标签,它提供关于PDF文档内容的重要信息。带标签的PDF包含许多不同类型的标签,但最常用的是文本、替代文本(图像的替代文本)、标题、链接和链接描述[2]。
Q3:PDF标签的用处及意义
添加PDF标签不会改变文档的视觉外观,但它提供了一个不可见的层,用于格式化文档与屏幕阅读器协作工作,这就使得从PDF文件中提取文本和图形变得更容易,并帮助屏幕阅读器以正确的顺序显示文件内容。[2]
PDF标签还可以用于将内容传输到屏幕较小的设备,如智能手机和平板电脑。[2]
Q4:如何创建标签PDF文件
本文将要介绍的创建方法是以后端C#程序代码的方式来创建标签PDF文件。创建时,通过NuGet安装引用PDF API-Spire.PDF for .NET,调用其提供的类及相关方法来标记内容、结构元素等。
C#
using Spire.Pdf;
using Spire.Pdf.Graphics;
using Spire.Pdf.Interchange.TaggedPdf;
using System.Drawing; namespace CreateTaggedPDF
{
class Program
{
static void Main(string[] args)
{
//创建PdfDocument类的对象
PdfDocument pdf = new PdfDocument(); //添加一页
pdf.Pages.Add(PdfPageSize.A4); //设置tab order
pdf.Pages[0].SetTabOrder(TabOrder.Structure); //创建PdfTaggedContent类的对象
PdfTaggedContent taggedContent = new PdfTaggedContent(pdf);
taggedContent.SetLanguage("en-US");
taggedContent.SetTitle("test"); //创建字体、画刷、字符串格式
PdfTrueTypeFont font = new PdfTrueTypeFont(new Font("Times New Roman", 10), true);
PdfSolidBrush brush = new PdfSolidBrush(Color.Black);
PdfStringFormat format = new PdfStringFormat(PdfTextAlignment.Left); //添加elements
PdfStructureElement article = taggedContent.StructureTreeRoot.AppendChildElement(PdfStandardStructTypes.Document);
PdfStructureElement paragraph1 = article.AppendChildElement(PdfStandardStructTypes.Paragraph);
PdfStructureElement span1 = paragraph1.AppendChildElement(PdfStandardStructTypes.Span);
span1.BeginMarkedContent(pdf.Pages[0]);
//绘制内容到页面
pdf.Pages[0].Canvas.DrawString("A PDF tag is the key to accessing the contents of PDF documents with supporting technologies such as screen readers. ", font, brush, new Rectangle(40, 0, 480, 80), format);
span1.EndMarkedContent(pdf.Pages[0]); PdfStructureElement paragraph2 = article.AppendChildElement(PdfStandardStructTypes.Paragraph);
paragraph2.BeginMarkedContent(pdf.Pages[0]);
pdf.Pages[0].Canvas.DrawString("A PDF tag arranges the PDF content in a hierarchical architecture or tag tree.", font, brush, new Rectangle(40, 80, 480, 80), format);
paragraph2.EndMarkedContent(pdf.Pages[0]); PdfStructureElement figure1 = article.AppendChildElement(PdfStandardStructTypes.Figure);
//Set Alternate text
figure1.Alt = "replacement text1";
figure1.BeginMarkedContent(pdf.Pages[0], null);
PdfImage image = PdfImage.FromFile(@"logo.png");
pdf.Pages[0].Canvas.DrawImage(image, new PointF(40, 200), new SizeF(100, 100));//绘制图片到页面
figure1.EndMarkedContent(pdf.Pages[0]); PdfStructureElement figure2 = article.AppendChildElement(PdfStandardStructTypes.Figure);
//Set Alternate text
figure2.Alt = "replacement text2";
figure2.BeginMarkedContent(pdf.Pages[0], null);
pdf.Pages[0].Canvas.DrawRectangle(PdfPens.Black, new Rectangle(300, 200, 100, 100));
figure2.EndMarkedContent(pdf.Pages[0]); //保存文档
pdf.SaveToFile("CreateTaggedFile_result.pdf");
}
}
}
vb.net
Imports Spire.Pdf
Imports Spire.Pdf.Graphics
Imports Spire.Pdf.Interchange.TaggedPdf
Imports System.Drawing Namespace CreateTaggedPDF
Class Program
Private Shared Sub Main(args As String())
'创建PdfDocument类的对象
Dim pdf As New PdfDocument() '添加一页
pdf.Pages.Add(PdfPageSize.A4) '设置tab order
pdf.Pages(0).SetTabOrder(TabOrder.[Structure]) '创建PdfTaggedContent类的对象
Dim taggedContent As New PdfTaggedContent(pdf)
taggedContent.SetLanguage("en-US")
taggedContent.SetTitle("test") '创建字体、画刷、字符串格式
Dim font As New PdfTrueTypeFont(New Font("Times New Roman", 10), True)
Dim brush As New PdfSolidBrush(Color.Black)
Dim format As New PdfStringFormat(PdfTextAlignment.Left) '添加elements
Dim article As PdfStructureElement = taggedContent.StructureTreeRoot.AppendChildElement(PdfStandardStructTypes.Document)
Dim paragraph1 As PdfStructureElement = article.AppendChildElement(PdfStandardStructTypes.Paragraph)
Dim span1 As PdfStructureElement = paragraph1.AppendChildElement(PdfStandardStructTypes.Span)
span1.BeginMarkedContent(pdf.Pages(0))
'绘制内容到页面
pdf.Pages(0).Canvas.DrawString("A PDF tag is the key to accessing the contents of PDF documents with supporting technologies such as screen readers. ", font, brush, New Rectangle(40, 0, 480, 80), format)
span1.EndMarkedContent(pdf.Pages(0)) Dim paragraph2 As PdfStructureElement = article.AppendChildElement(PdfStandardStructTypes.Paragraph)
paragraph2.BeginMarkedContent(pdf.Pages(0))
pdf.Pages(0).Canvas.DrawString("A PDF tag arranges the PDF content in a hierarchical architecture or tag tree.", font, brush, New Rectangle(40, 80, 480, 80), format)
paragraph2.EndMarkedContent(pdf.Pages(0)) Dim figure1 As PdfStructureElement = article.AppendChildElement(PdfStandardStructTypes.Figure)
'Set Alternate text
figure1.Alt = "replacement text1"
figure1.BeginMarkedContent(pdf.Pages(0), Nothing)
Dim image As PdfImage = PdfImage.FromFile("logo.png")
pdf.Pages(0).Canvas.DrawImage(image, New PointF(40, 200), New SizeF(100, 100))
'绘制图片到页面
figure1.EndMarkedContent(pdf.Pages(0)) Dim figure2 As PdfStructureElement = article.AppendChildElement(PdfStandardStructTypes.Figure)
'Set Alternate text
figure2.Alt = "replacement text2"
figure2.BeginMarkedContent(pdf.Pages(0), Nothing)
pdf.Pages(0).Canvas.DrawRectangle(PdfPens.Black, New Rectangle(300, 200, 100, 100))
figure2.EndMarkedContent(pdf.Pages(0)) '保存文档
pdf.SaveToFile("CreateTaggedFile_result.pdf")
System.Diagnostics.Process.Start("CreateTaggedFile_result.pdf")
End Sub
End Class
End Namespace

参考资料:
[1]. https://247accessibledocuments.com/what-is-a-tagged-pdf/
[2]. https://accessibility-i.org/what-is-a-tagged-pdf/
—END—
C# 创建标签PDF文件的更多相关文章
- 使用iText库创建PDF文件
前言 译文连接:http://howtodoinjava.com/apache-commons/create-pdf-files-in-java-itext-tutorial/ 对于excel文件的读 ...
- c#操作pdf文件系列之创建文件
1.我使用的工具是vs2013,引用的第三方程序集itextpdf 具体安装方法,可以通过nuget搜索iTextSharp然后进行安装. 2具体代码如下 创建两个不同pdf文件,每个地方什么意思代码 ...
- 01.在Java中如何创建PDF文件
1.简介 在这篇快速文章中,我们将重点介绍基于流行的iText和PdfBox库从头开始创建 PDF 文档. 2. Maven 依赖 <dependency> <groupId> ...
- PDF 文件编写器 C# 类库(版本 1.28.0)使用详解
PDF File Writer 是一个 C# .NET 类库,允许应用程序创建 PDF 文件. PDF File Writer C# 类库使 .NET 应用程序能够生成 PDF 文档.该库使应用程序免 ...
- .NET平台开源项目速览(16)C#写PDF文件类库PDF File Writer介绍
1年前,我在文章:这些.NET开源项目你知道吗?.NET平台开源文档与报表处理组件集合(三)中(第9个项目),给大家推荐了一个开源免费的PDF读写组件 PDFSharp,PDFSharp我2年前就看过 ...
- 用C#制作PDF文件全攻略
用C#制作PDF文件全攻略 目 录 前 言... 3 第一部分 iText的简单应用... 4 第一章 创建一个Document 4 第一步 创建一个Document实例:... 5 第二步 ...
- TXT记事本转换PDF文件
使用的方式为,读取TXT记事本的内容,然后写入创建的PDF文件. static void Main(string[] args) { const string txtFile = "D:\\ ...
- C#写PDF文件类库PDF File Writer介绍
.NET平台开源项目速览(16)C#写PDF文件类库PDF File Writer介绍 阅读目录 1.PDF File Writer基本介绍 2.一个简单的使用案例 3.资源 1年前,我在文章:这 ...
- Pdf File Writer 中文应用(PDF文件编写器C#类库)
该文由小居工作室(QQ:2482052910) 翻译并提供解答支持,原文地址:Pdf File Writer 中文应用(PDF文件编写器C#类库):http://www.cnblogs.com/ ...
随机推荐
- Linux namespace技术应用实践--调用宿主机命令(tcpdump/ip/ps/top)检查docker容器网络、进程状态
背景 最近偶然听了几堂极客时间的云原生免费公开课程,首次接触到了Linux namespace技术,并了解到这正是现在风头正劲的容器技术基石,引起了自己探究一二的兴趣,结合课程+网络搜索+实践操作,也 ...
- Lucene开发实例:Lucene中文分词(转载)
1.准备工作下载lucene 3.6.1 : http://lucene.apache.org/下载中文分词IK Analyzer: http://code.google.com/p/ik-analy ...
- el-select数据量过大引发卡顿,怎么办?
本文分享自华为云社区<解决el-select数据量过大的卡顿的两种思路与一种实施方案>,作者: KevinQ. 经典问题:在测试环境好好的,怎么到正式环境就不行了? --本文:数据量变了. ...
- 介绍一个好用的dao层与mybatis互跳的idea插件MyBatisCodeHelperPro
一次点击 File--> Settings --> Plugins -->搜索MyBatisCodeHelperPro,点击获取,重启idea即可 接下来看效果,点击小企鹅就可以相互 ...
- 在公网服务器搭建CobaltStrike4.0
因为工作需要使用cs,正好之前腾讯云薅了一把羊毛,就把VPS装起来cs. 选的环境是centos7.6 cs运行需要java环境 先使用yum -y list java* 查看yum存在的java库 ...
- 入行数字IC验证后会做些什么?
半年前,公众号写了第一篇推文<入行数字IC验证的一些建议>,介绍了IC小白可以如何一步一步地摸索入门数字IC验证,同时也在知乎发了这篇入门贴,并且衍生出很多额外基础的内容,收获了不少的浏览 ...
- 使用vue实现排序算法演示动画
缘起 最近做的一个小需求涉及到排序,界面如下所示: 因为项目是使用vue的,所以实现方式很简单,视图部分不用管,本质上就是操作数组,代码如下: { // 上移 moveUp (i) { // 把位置i ...
- 端口被占用的问题解决 Web server failed to start. Port ×× was already in use
出现此问题是端口被占用了,只需要关闭正在使用的端口就行 解决思路: 1.在服务器中更改port端口号,改为不冲突,没有被占用的端口. 2.找出被占用的端口,结束被占用的端口 解决结束被占用的端口的方法 ...
- Linux开放指定端口命令(CentOS)
1.开启防火墙 systemctl start firewalld 2.开放指定端口 ##linux打开防火墙3389端口 firewall-cmd --zone=public --add-port= ...
- 使用navicat连接远程linux mysql数据库出现10061
重启mysql服务 两种方式 1.使用 service 启动:service mysql restart 2.使用 mysqld 脚本启动:/etc/inint.d/mysql restart