C#代碼實(shí)現(xiàn)創(chuàng)建帶結(jié)構(gòu)標(biāo)簽的PDF文檔
帶標(biāo)簽的 PDF(也稱為 PDF/UA)是一種包含結(jié)構(gòu)化標(biāo)簽樹的 PDF 文檔,其結(jié)構(gòu)類似于 HTML,用于定義文檔的層級(jí)和內(nèi)容組織方式。通過這些標(biāo)簽,屏幕閱讀器等輔助工具可以準(zhǔn)確識(shí)別文檔結(jié)構(gòu),實(shí)現(xiàn)無障礙閱讀,確保信息完整傳達(dá)。
本文將介紹如何使用 Spire.PDF for .NET,在 C# 和 VB.NET 中從零開始創(chuàng)建一個(gè)帶標(biāo)簽的 PDF 文檔。
安裝 Spire.PDF for .NET
在開始之前,需要將 Spire.PDF for .NET 包中的 DLL 文件添加為 .NET 項(xiàng)目的引用。您可以通過官方下載鏈接獲取 DLL 文件,或直接通過 NuGet 進(jìn)行安裝。
PM> Install-Package Spire.PDF
創(chuàng)建包含豐富結(jié)構(gòu)元素的帶標(biāo)簽 PDF
在帶標(biāo)簽的 PDF 文檔中添加結(jié)構(gòu)元素時(shí),首先需要?jiǎng)?chuàng)建一個(gè) PdfTaggedContent 類對(duì)象。隨后,通過 PdfTaggedContent.StructureTreeRoot.AppendChildElement() 方法向結(jié)構(gòu)樹的根節(jié)點(diǎn)添加元素。
下面以添加“標(biāo)題(heading)”元素為例,介紹使用 Spire.PDF for .NET 創(chuàng)建帶標(biāo)簽 PDF 的具體步驟:
- 創(chuàng)建
PdfDocument對(duì)象,并使用PdfDocument.Pages.Add()方法添加一個(gè)頁面。 - 創(chuàng)建
PdfTaggedContent類的實(shí)例。 - 調(diào)用
PdfTaggedContent.SetPdfUA1Identification()方法,使文檔符合 PDF/UA 無障礙標(biāo)準(zhǔn)。 - 使用
PdfTaggedContent.StructureTreeRoot.AppendChildElement()方法,在文檔結(jié)構(gòu)樹根節(jié)點(diǎn)下添加一個(gè) “document” 元素。 - 通過
PdfStructureElement.AppendChildElement()方法,在 “document” 元素下添加一個(gè) “heading” 元素。 - 調(diào)用
PdfStructureElement.BeginMarkedContent()方法添加開始標(biāo)記,用于標(biāo)識(shí)標(biāo)題內(nèi)容的起始位置。 - 使用
PdfPageBase.Canvas.DrawString()方法在頁面上繪制標(biāo)題文本。 - 添加結(jié)束標(biāo)記(對(duì)應(yīng)標(biāo)題內(nèi)容結(jié)束)。
- 使用
PdfDocument.SaveToFile()方法將文檔保存為 PDF 文件。
下面的代碼示例展示了如何在 C# 和 VB.NET 中創(chuàng)建包含多種結(jié)構(gòu)元素(如 document、heading、paragraph、figure 和 table)的帶標(biāo)簽 PDF 文檔。
using Spire.Pdf;
using Spire.Pdf.Graphics;
using Spire.Pdf.Interchange.TaggedPdf;
using Spire.Pdf.Tables;
using System.Data;
using System.Drawing;
namespace CreatePDFUA
{
class Program
{
static void Main(string[] args)
{
// 創(chuàng)建 PdfDocument 對(duì)象
PdfDocument doc = new PdfDocument();
// 添加一個(gè)頁面
PdfPageBase page = doc.Pages.Add(PdfPageSize.A4, new PdfMargins(20));
// 設(shè)置 Tab 順序?yàn)榻Y(jié)構(gòu)順序
page.SetTabOrder(TabOrder.Structure);
// 創(chuàng)建 PdfTaggedContent 類對(duì)象
PdfTaggedContent taggedContent = new PdfTaggedContent(doc);
// 設(shè)置文檔語言和標(biāo)題
taggedContent.SetLanguage("en-US");
taggedContent.SetTitle("test");
// 設(shè)置 PDF/UA1 標(biāo)識(shí)(符合無障礙標(biāo)準(zhǔn))
taggedContent.SetPdfUA1Identification();
// 創(chuàng)建字體和畫刷
PdfTrueTypeFont font = new PdfTrueTypeFont(new Font("Times New Roman", 14), true);
PdfSolidBrush brush = new PdfSolidBrush(Color.Black);
// 添加“document”結(jié)構(gòu)元素
PdfStructureElement document = taggedContent.StructureTreeRoot.AppendChildElement(PdfStandardStructTypes.Document);
// 添加“heading”(一級(jí)標(biāo)題)元素
PdfStructureElement heading1 = document.AppendChildElement(PdfStandardStructTypes.HeadingLevel1);
heading1.BeginMarkedContent(page);
string headingText = "What Is a Tagged PDF?";
page.Canvas.DrawString(headingText, font, brush, new PointF(0, 0));
heading1.EndMarkedContent(page);
// 添加“paragraph”(段落)元素
PdfStructureElement paragraph = document.AppendChildElement(PdfStandardStructTypes.Paragraph);
paragraph.BeginMarkedContent(page);
string paragraphText = "“Tagged PDF” doesn't seem like a life-changing term. But for some, it is. For people who are " +
"blind or have low vision and use assistive technology (such as screen readers and connected Braille displays) to " +
"access information, an untagged PDF means they are missing out on information contained in the document because assistive " +
"technology cannot “read” untagged PDFs. Digital accessibility has opened up so many avenues to information that were once " +
"closed to people with visual disabilities, but PDFs often get left out of the equation.";
RectangleF rect = new RectangleF(0, 30, page.Canvas.ClientSize.Width, page.Canvas.ClientSize.Height);
page.Canvas.DrawString(paragraphText, font, brush, rect);
paragraph.EndMarkedContent(page);
// 添加“figure”(圖像)元素
PdfStructureElement figure = document.AppendChildElement(PdfStandardStructTypes.Figure);
figure.BeginMarkedContent(page);
PdfImage image = PdfImage.FromFile(@"C:\Users\Administrator\Desktop\pdfua.png");
page.Canvas.DrawImage(image, new PointF(0, 150));
figure.EndMarkedContent(page);
// 添加“table”(表格)元素
PdfStructureElement table = document.AppendChildElement(PdfStandardStructTypes.Table);
table.BeginMarkedContent(page);
PdfTable pdfTable = new PdfTable();
pdfTable.Style.DefaultStyle.Font = font;
DataTable dataTable = new DataTable();
dataTable.Columns.Add("Name");
dataTable.Columns.Add("Age");
dataTable.Columns.Add("Sex");
dataTable.Rows.Add(new string[] { "John", "22", "Male" });
dataTable.Rows.Add(new string[] { "Katty", "25", "Female" });
pdfTable.DataSource = dataTable;
pdfTable.Style.ShowHeader = true;
pdfTable.Draw(page.Canvas, new PointF(0, 280), 300f);
table.EndMarkedContent(page);
// 將文檔保存為文件
doc.SaveToFile("CreatePDFUA.pdf");
}
}
}方法補(bǔ)充
下面小編為大家整理了其他C#創(chuàng)建帶標(biāo)簽PDF文件的方法,希望對(duì)大家有所幫助
C#實(shí)現(xiàn)代碼:
using Spire.Pdf;
using Spire.Pdf.Graphics;
using Spire.Pdf.Interchange.TaggedPdf;
using System.Drawing;
namespace CreateTaggedPDF
{
class Program
{
static void Main(string[] args)
{
//創(chuàng)建PdfDocument類的對(duì)象
PdfDocument pdf = new PdfDocument();
//添加一頁
pdf.Pages.Add(PdfPageSize.A4);
//設(shè)置tab order
pdf.Pages[0].SetTabOrder(TabOrder.Structure);
//創(chuàng)建PdfTaggedContent類的對(duì)象
PdfTaggedContent taggedContent = new PdfTaggedContent(pdf);
taggedContent.SetLanguage("en-US");
taggedContent.SetTitle("test");
//創(chuàng)建字體、畫刷、字符串格式
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]);
//繪制內(nèi)容到頁面
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實(shí)現(xiàn)代碼
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())
'創(chuàng)建PdfDocument類的對(duì)象
Dim pdf As New PdfDocument()
'添加一頁
pdf.Pages.Add(PdfPageSize.A4)
'設(shè)置tab order
pdf.Pages(0).SetTabOrder(TabOrder.[Structure])
'創(chuàng)建PdfTaggedContent類的對(duì)象
Dim taggedContent As New PdfTaggedContent(pdf)
taggedContent.SetLanguage("en-US")
taggedContent.SetTitle("test")
'創(chuàng)建字體、畫刷、字符串格式
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))
'繪制內(nèi)容到頁面
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到此這篇關(guān)于C#代碼實(shí)現(xiàn)創(chuàng)建帶結(jié)構(gòu)標(biāo)簽的PDF文檔的文章就介紹到這了,更多相關(guān)C#創(chuàng)建帶結(jié)構(gòu)標(biāo)簽PDF內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C#中Json字符串的各種應(yīng)用類實(shí)例講解
這篇文章主要介紹了C#中Json字符串的各種應(yīng)用類實(shí)例講解的相關(guān)資料,需要的朋友可以參考下2015-10-10
C#中使用IFormattable實(shí)現(xiàn)自定義格式化字符串輸出示例
這篇文章主要介紹了C#中使用IFormattable實(shí)現(xiàn)自定義格式字符串輸出示例,本文直接給出實(shí)例代碼,需要的朋友可以參考下2015-06-06
Unity游戲開發(fā)之2048游戲的實(shí)現(xiàn)
2048是一款數(shù)字益智游戲,初始數(shù)字則是由2+2組成的基數(shù)4。在操作方面的不同則表現(xiàn)為一步一格的移動(dòng),變成更為爽快的一次到底。相同數(shù)字的方?jīng)r在靠攏、相撞時(shí)會(huì)相加。本文將通過Unity3D實(shí)現(xiàn)這一游戲,需要的可以參考一下2022-03-03
C#如何將查詢到的數(shù)據(jù)庫里面的數(shù)據(jù)輸出到textbox控件
這篇文章主要介紹了C#如何將查詢到的數(shù)據(jù)庫里面的數(shù)據(jù)輸出到textbox控件問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-07-07

