C#代碼實現(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,用于定義文檔的層級和內(nèi)容組織方式。通過這些標(biāo)簽,屏幕閱讀器等輔助工具可以準(zhǔn)確識別文檔結(jié)構(gòu),實現(xiàn)無障礙閱讀,確保信息完整傳達(dá)。
本文將介紹如何使用 Spire.PDF for .NET,在 C# 和 VB.NET 中從零開始創(chuàng)建一個帶標(biāo)簽的 PDF 文檔。
安裝 Spire.PDF for .NET
在開始之前,需要將 Spire.PDF for .NET 包中的 DLL 文件添加為 .NET 項目的引用。您可以通過官方下載鏈接獲取 DLL 文件,或直接通過 NuGet 進(jìn)行安裝。
PM> Install-Package Spire.PDF
創(chuàng)建包含豐富結(jié)構(gòu)元素的帶標(biāo)簽 PDF
在帶標(biāo)簽的 PDF 文檔中添加結(jié)構(gòu)元素時,首先需要創(chuàng)建一個 PdfTaggedContent 類對象。隨后,通過 PdfTaggedContent.StructureTreeRoot.AppendChildElement() 方法向結(jié)構(gòu)樹的根節(jié)點添加元素。
下面以添加“標(biāo)題(heading)”元素為例,介紹使用 Spire.PDF for .NET 創(chuàng)建帶標(biāo)簽 PDF 的具體步驟:
- 創(chuàng)建
PdfDocument對象,并使用PdfDocument.Pages.Add()方法添加一個頁面。 - 創(chuàng)建
PdfTaggedContent類的實例。 - 調(diào)用
PdfTaggedContent.SetPdfUA1Identification()方法,使文檔符合 PDF/UA 無障礙標(biāo)準(zhǔn)。 - 使用
PdfTaggedContent.StructureTreeRoot.AppendChildElement()方法,在文檔結(jié)構(gòu)樹根節(jié)點下添加一個 “document” 元素。 - 通過
PdfStructureElement.AppendChildElement()方法,在 “document” 元素下添加一個 “heading” 元素。 - 調(diào)用
PdfStructureElement.BeginMarkedContent()方法添加開始標(biāo)記,用于標(biāo)識標(biāo)題內(nèi)容的起始位置。 - 使用
PdfPageBase.Canvas.DrawString()方法在頁面上繪制標(biāo)題文本。 - 添加結(jié)束標(biāo)記(對應(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 對象
PdfDocument doc = new PdfDocument();
// 添加一個頁面
PdfPageBase page = doc.Pages.Add(PdfPageSize.A4, new PdfMargins(20));
// 設(shè)置 Tab 順序為結(jié)構(gòu)順序
page.SetTabOrder(TabOrder.Structure);
// 創(chuàng)建 PdfTaggedContent 類對象
PdfTaggedContent taggedContent = new PdfTaggedContent(doc);
// 設(shè)置文檔語言和標(biāo)題
taggedContent.SetLanguage("en-US");
taggedContent.SetTitle("test");
// 設(shè)置 PDF/UA1 標(biāo)識(符合無障礙標(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”(一級標(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文件的方法,希望對大家有所幫助
C#實現(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類的對象
PdfDocument pdf = new PdfDocument();
//添加一頁
pdf.Pages.Add(PdfPageSize.A4);
//設(shè)置tab order
pdf.Pages[0].SetTabOrder(TabOrder.Structure);
//創(chuàng)建PdfTaggedContent類的對象
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實現(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類的對象
Dim pdf As New PdfDocument()
'添加一頁
pdf.Pages.Add(PdfPageSize.A4)
'設(shè)置tab order
pdf.Pages(0).SetTabOrder(TabOrder.[Structure])
'創(chuàng)建PdfTaggedContent類的對象
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#代碼實現(xiàn)創(chuàng)建帶結(jié)構(gòu)標(biāo)簽的PDF文檔的文章就介紹到這了,更多相關(guān)C#創(chuàng)建帶結(jié)構(gòu)標(biāo)簽PDF內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C#中使用IFormattable實現(xiàn)自定義格式化字符串輸出示例
這篇文章主要介紹了C#中使用IFormattable實現(xiàn)自定義格式字符串輸出示例,本文直接給出實例代碼,需要的朋友可以參考下2015-06-06
C#如何將查詢到的數(shù)據(jù)庫里面的數(shù)據(jù)輸出到textbox控件
這篇文章主要介紹了C#如何將查詢到的數(shù)據(jù)庫里面的數(shù)據(jù)輸出到textbox控件問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-07-07

