• C#/VB.NET 创建PDF/UA文件


    1.什么是PDF/UA文件

    PDF/UA,即Universally Accessible PDF,该格式的PDF文件是于2012年8月以ISO标准14289-1发布的、具有普遍可访问的PDF文档标准。为带标签的PDF文档(Tagged PDF Document)和表单的开发人员和作者设定了明确的规则。(PDF/UA-1是作为PDF/UA标准的第一部分,PDF/UA-2作为PDF/UA标准的第二部分)[1]

    2.文件格式要求

    PDF/UA在其基础上有着明确的要求,即该标准都是基于PDF标签,所有PDF/UA文档都必须以PDF标签来正确标记,并且,要求标签在语义上适当,并按逻辑顺序排列。[1]

    3.如何创建PDF/UA文件

    PDF/UA文件作为PDF文件的一种标准格式,要创建该标准的的PDF文档,可使用调用PDF API的方法来创建。下面,是以Spire.PDF for .NET来创建的方法。

    注:可在Visual Studio 中通过NuGet搜索“Spire.PDF”安装dll到程序中;

    或者下载(hotfix版本)到本地,手动添加本地路径下的Spire.Pdf.dll文件到程序。

    C#

    1. using Spire.Pdf;
    2. using Spire.Pdf.Graphics;
    3. using Spire.Pdf.Interchange.TaggedPdf;
    4. using System.Drawing;
    5. namespace CreatePDFUAfile
    6. {
    7. class Program
    8. {
    9. static void Main(string[] args)
    10. {
    11. //创建PdfDocument类的对象
    12. PdfDocument doc = new PdfDocument();
    13. //添加一页
    14. doc.Pages.Add();
    15. //设置tab order
    16. doc.Pages[0].SetTabOrder(TabOrder.Structure);
    17. //创建PdfTaggedContent类的对象
    18. PdfTaggedContent taggedContent = new PdfTaggedContent(doc);
    19. taggedContent.SetLanguage("en-US");
    20. taggedContent.SetTitle("test");
    21. //设置PDF/UA1验证
    22. taggedContent.SetPdfUA1Identification();
    23. //创建字体、画刷
    24. PdfTrueTypeFont font = new PdfTrueTypeFont(new Font("Times New Roman", 10), true);
    25. PdfSolidBrush brush = new PdfSolidBrush(Color.Black);
    26. //添加要素
    27. PdfStructureElement article = taggedContent.StructureTreeRoot.AppendChildElement(PdfStandardStructTypes.Document);
    28. PdfStructureElement paragraph1 = article.AppendChildElement(PdfStandardStructTypes.Paragraph);
    29. PdfStructureElement span1 = paragraph1.AppendChildElement(PdfStandardStructTypes.Span);
    30. span1.BeginMarkedContent(doc.Pages[0]);
    31. PdfStringFormat format = new PdfStringFormat(PdfTextAlignment.Justify);
    32. doc.Pages[0].Canvas.DrawString("PDF/UA was published as ISO Standard 14289-1 in August 2012" +
    33. " and is by far the first complete definition " +
    34. "of a set of requirements for universally accessible PDF documents.",
    35. font, brush, new Rectangle(40, 80, 450, 80), format);
    36. span1.EndMarkedContent(doc.Pages[0]);
    37. PdfStructureElement paragraph2 = article.AppendChildElement(PdfStandardStructTypes.Paragraph);
    38. paragraph2.BeginMarkedContent(doc.Pages[0]);
    39. doc.Pages[0].Canvas.DrawString("The PDF/UA has some definite requirements at its base that act as the essence of this standard.",
    40. font, brush, new Rectangle(40, 120, 450, 60), format);
    41. paragraph2.EndMarkedContent(doc.Pages[0]);
    42. PdfStructureElement figure1 = article.AppendChildElement(PdfStandardStructTypes.Figure);
    43. //Set Alternate text
    44. figure1.Alt = "replacement text1";
    45. figure1.BeginMarkedContent(doc.Pages[0], null);
    46. PdfImage image = PdfImage.FromFile(@"logo.jpg");
    47. doc.Pages[0].Canvas.DrawImage(image, new PointF(40, 200), new SizeF(100, 100));
    48. figure1.EndMarkedContent(doc.Pages[0]);
    49. PdfStructureElement figure2 = article.AppendChildElement(PdfStandardStructTypes.Figure);
    50. //Set Alternate text
    51. figure2.Alt = "replacement text2";
    52. figure2.BeginMarkedContent(doc.Pages[0], null);
    53. doc.Pages[0].Canvas.DrawRectangle(PdfPens.Black, new Rectangle(300, 200, 100, 100));
    54. figure2.EndMarkedContent(doc.Pages[0]);
    55. //保存文档
    56. doc.SaveToFile("CreatePDFUAFile_result.pdf");
    57. System.Diagnostics.Process.Start("CreatePDFUAFile_result.pdf");
    58. }
    59. }
    60. }

    VB.NET

    1. Imports Spire.Pdf
    2. Imports Spire.Pdf.Graphics
    3. Imports Spire.Pdf.Interchange.TaggedPdf
    4. Imports System.Drawing
    5. Namespace CreatePDFUAfile
    6. Class Program
    7. Private Shared Sub Main(args As String())
    8. '创建PdfDocument类的对象
    9. Dim doc As New PdfDocument()
    10. '添加一页
    11. doc.Pages.Add()
    12. '设置tab order
    13. doc.Pages(0).SetTabOrder(TabOrder.[Structure])
    14. '创建PdfTaggedContent类的对象
    15. Dim taggedContent As New PdfTaggedContent(doc)
    16. taggedContent.SetLanguage("en-US")
    17. taggedContent.SetTitle("test")
    18. '设置PDF/UA1验证
    19. taggedContent.SetPdfUA1Identification()
    20. '创建字体、画刷
    21. Dim font As New PdfTrueTypeFont(New Font("Times New Roman", 10), True)
    22. Dim brush As New PdfSolidBrush(Color.Black)
    23. '添加要素
    24. Dim article As PdfStructureElement = taggedContent.StructureTreeRoot.AppendChildElement(PdfStandardStructTypes.Document)
    25. Dim paragraph1 As PdfStructureElement = article.AppendChildElement(PdfStandardStructTypes.Paragraph)
    26. Dim span1 As PdfStructureElement = paragraph1.AppendChildElement(PdfStandardStructTypes.Span)
    27. span1.BeginMarkedContent(doc.Pages(0))
    28. Dim format As New PdfStringFormat(PdfTextAlignment.Justify)
    29. doc.Pages(0).Canvas.DrawString("PDF/UA was published as ISO Standard 14289-1 in August 2012" + " and is by far the first complete definition " + "of a set of requirements for universally accessible PDF documents.", font, brush, New Rectangle(40, 80, 450, 80), format)
    30. span1.EndMarkedContent(doc.Pages(0))
    31. Dim paragraph2 As PdfStructureElement = article.AppendChildElement(PdfStandardStructTypes.Paragraph)
    32. paragraph2.BeginMarkedContent(doc.Pages(0))
    33. doc.Pages(0).Canvas.DrawString("The PDF/UA has some definite requirements at its base that act as the essence of this standard.", font, brush, New Rectangle(40, 120, 450, 60), format)
    34. paragraph2.EndMarkedContent(doc.Pages(0))
    35. Dim figure1 As PdfStructureElement = article.AppendChildElement(PdfStandardStructTypes.Figure)
    36. 'Set Alternate text
    37. figure1.Alt = "replacement text1"
    38. figure1.BeginMarkedContent(doc.Pages(0), Nothing)
    39. Dim image As PdfImage = PdfImage.FromFile("logo.jpg")
    40. doc.Pages(0).Canvas.DrawImage(image, New PointF(40, 200), New SizeF(100, 100))
    41. figure1.EndMarkedContent(doc.Pages(0))
    42. Dim figure2 As PdfStructureElement = article.AppendChildElement(PdfStandardStructTypes.Figure)
    43. 'Set Alternate text
    44. figure2.Alt = "replacement text2"
    45. figure2.BeginMarkedContent(doc.Pages(0), Nothing)
    46. doc.Pages(0).Canvas.DrawRectangle(PdfPens.Black, New Rectangle(300, 200, 100, 100))
    47. figure2.EndMarkedContent(doc.Pages(0))
    48. '保存文档
    49. doc.SaveToFile("CreatePDFUAFile_result.pdf")
    50. System.Diagnostics.Process.Start("CreatePDFUAFile_result.pdf")
    51. End Sub
    52. End Class
    53. End Namespace

     

    参考资料:

    1. PDF/UA File Format

    —END—

    相关阅读推荐:C# 创建标签PDF文件

  • 相关阅读:
    如何使用 DataX 从 PostgreSQL 同步数据到 OceanBase
    Spark中sc.textFile()读取文件路径
    掌控习惯-学习总结
    能率携手梦想改造家,打造适老化住宅新典范
    《微信小程序-进阶篇》Lin-ui组件库源码分析-Button组件(二)
    Vue中双向绑定数据详解
    Linux 用户注意!GNOME 45 将影响所有扩展!
    详解MySQL隔离级别
    MacOS Pro笔记本硬盘升级纪实
    MySQL 主从复制原理
  • 原文地址:https://blog.csdn.net/Eiceblue/article/details/126498621