使用iText创建可访问的PDF文件

使用iText创建可访问的PDF文件,itext,tagged-pdf,Itext,Tagged Pdf,最近我下载了iText的试用许可证。 我努力实现以下目标: 从WORD、PP、Excel等创建PDF文档 操作现有的PDF文件 (最重要)-根据WCAG 502要求(PDF/UA),文件必须创建/转换为完全可供残疾人访问 我尝试了以下代码:(C#) 但是,在Acrobat Reader上检查了标记为“未标记”PDF文件的输出文件之后 请告诉我应该如何使用iText来实现我的目标。这是不可能的 让我给你一个最简单的证明: 假设输入文档包含一幅两只猫争夺一团纱线的图像 pdf/UA要求您为您的想

最近我下载了iText的试用许可证。 我努力实现以下目标:

  • 从WORD、PP、Excel等创建PDF文档
  • 操作现有的PDF文件
  • (最重要)-根据WCAG 502要求(PDF/UA),文件必须创建/转换为完全可供残疾人访问
我尝试了以下代码:(C#)

但是,在Acrobat Reader上检查了标记为“未标记”PDF文件的输出文件之后

请告诉我应该如何使用iText来实现我的目标。

这是不可能的

让我给你一个最简单的证明:
假设输入文档包含一幅两只猫争夺一团纱线的图像

pdf/UA要求您为您的想象插入合理的备选文本。
目前还没有一个系统能够为你扔给它的任何随机图像提供合理的标题

更不用说,无论哪个系统为图像提供标题,都必须链接到一个完美的翻译服务。因为大多数图像识别服务都是英文的,而这可能不是您编写文档所使用的语言。这也意味着你需要一个能够检测你所用语言的系统

为了能够处理图像,我们现在添加了3个极其困难的问题:

  • 标记
  • 翻译
  • 语言检测
现在想象另一种有趣的事情,比如

  • 桌子
  • 图表
此外,PDF/UA要求嵌入字体。如果你面对的是一个使用未嵌入字体的PDF怎么办。您是否有权使用字体程序来替换这些字体

在代码段中,使用
PdfReader
,并提供文件
SRC
的路径。您需要转换Word、PPT和其他文件,但iText不会将Word、PPT等转换为PDF
PdfReader
仅接受PDF文件(如名称所示)

做不到

让我给你一个最简单的证明:
假设输入文档包含一幅两只猫争夺一团纱线的图像

pdf/UA要求您为您的想象插入合理的备选文本。
目前还没有一个系统能够为你扔给它的任何随机图像提供合理的标题

更不用说,无论哪个系统为图像提供标题,都必须链接到一个完美的翻译服务。因为大多数图像识别服务都是英文的,而这可能不是您编写文档所使用的语言。这也意味着你需要一个能够检测你所用语言的系统

为了能够处理图像,我们现在添加了3个极其困难的问题:

  • 标记
  • 翻译
  • 语言检测
现在想象另一种有趣的事情,比如

  • 桌子
  • 图表
此外,PDF/UA要求嵌入字体。如果你面对的是一个使用未嵌入字体的PDF怎么办。您是否有权使用字体程序来替换这些字体


在代码段中,使用
PdfReader
,并提供文件
SRC
的路径。您需要转换Word、PPT和其他文件,但iText不会将Word、PPT等转换为PDF
PdfReader
仅接受PDF文件(如名称所示)

标记需要人类的智慧。您不能期望软件(通常)在没有人机交互的情况下正确标记文档。我没有看到您在代码中的任何地方引入标记。我没有看到你提供任何字体程序来替代没有嵌入的字体。代码示例不创建正确标记的PDF文件是很正常的。告诉给你这个任务的人,这个要求不能满足,并恭敬地拒绝这个机会。如果你发现软件声称它可以“开箱即用”:不要相信它!另外,如果SRC路径解析为word文档,请不要期望新的PdfReader(SRC)工作。我是说,我会喜欢这个功能。但这不会发生。标记需要人类的智慧。您不能期望软件(通常)在没有人机交互的情况下正确标记文档。我没有看到您在代码中的任何地方引入标记。我没有看到你提供任何字体程序来替代没有嵌入的字体。代码示例不创建正确标记的PDF文件是很正常的。告诉给你这个任务的人,这个要求不能满足,并恭敬地拒绝这个机会。如果你发现软件声称它可以“开箱即用”:不要相信它!另外,如果SRC路径解析为word文档,请不要期望新的PdfReader(SRC)工作。我是说,我会喜欢这个功能。但是这不会发生。
目前还没有一个系统能够为你扔给它的任何随机图像提供一个合理的标题。
-机器学习应运而生。如果未来的读者感兴趣-
目前还没有一个系统能够为你扔给它的任何随机图像提供合理的标题。
-机器学习就是其中之一。以防将来的读者感兴趣-
    LicenseKey.LoadLicenseFile(@"D:\Development\itextkey-0.xml");
    PdfDocument pdfDoc = new PdfDocument(new PdfReader(SRC), new PdfWriter(DEST, new WriterProperties().SetPdfVersion(PdfVersion.PDF_1_7)));
    pdfDoc.SetTagged();
    pdfDoc.GetCatalog().SetLang(new PdfString("HE-IL"));
    pdfDoc.GetCatalog().SetViewerPreferences(
            new PdfViewerPreferences().SetDisplayDocTitle(true));
    PdfDocumentInfo info = pdfDoc.GetDocumentInfo();
    info.SetTitle("iText7 PDF/UA example");
    pdfDoc.Close();