如何区分PDF和PDF / A C#

时间:2018-01-08 13:24:52

标签: c# validation pdfa

我开发了一个基于控制台的应用程序,它使用ghostscript在所有midnights中浏览相同的文件夹以PDF / A转换PDF。

它确实有效,但现在我们收到了数百个文件,我需要检查每个文件是PDF还是PDF / A,以避免在PDF / A文件中启动脚本。

有没有解决方案来区分PDF和PDF / A?

提前谢谢你。

4 个答案:

答案 0 :(得分:1)

您可以使用ITextSharp等库来阅读PDF文件。

要检查它是否是PDF / A(实际上,检查它是否声称是PDF / A,这应该足以满足您的需要)是阅读PDF标签的简单操作。

this answer to another question中的代码应该是您所需要的。它是VB.NET,它应该很容易转换为C#。

基本上:

  • 使用来自ITextSharp(或可能是任何pdf阅读库)的阅读器打开PDF
  • 提取XML元数据
  • 检查名为pdfaid:conformance的XML标记,看其值是否为A

答案 1 :(得分:0)

您可以使用Spire.PDF检测PDF文档的一致性级别。请查看以下代码:

PdfDocument pdf = new PdfDocument();
pdf.LoadFromFile("MS_Example.pdf");
PdfConformanceLevel conformance = pdf.Conformance;
Console.WriteLine(conformance.ToString());

输出:

enter image description here

免责声明:我是Spire的员工。

答案 2 :(得分:0)

您可以通过检查文档的XMP元数据来检查文档是否声称符合要求。

使用Datalogics PDFL库C#接口:

using (var docInput = new Document("input.pdf"))
{
    bool bIsPdfA1a =  docInput.XMPMetadata.Contains("pdfaid:conformance=\"A\"");
}

免责声明:我为Datalogics工作

答案 3 :(得分:0)

对不起,我生病了。

我使用Pac0的解决方案找到了我的问题的解决方案。

我没有使用XML,而是使用了iTextSharp.xmp:

public static bool CheckIfPdfa(PdfReader reader)
    {
        if (reader.Metadata != null && reader.Metadata.Length > 0)
        {
            IXmpMeta xmpMeta = XmpMetaParser.Parse(reader.Metadata, null);
            IXmpProperty pdfaidConformance = xmpMeta.GetProperty(XmpConst.NS_PDFA_ID, "pdfaid:conformance");
            IXmpProperty pdfaidPart = xmpMeta.GetProperty(XmpConst.NS_PDFA_ID, "pdfaid:part");
            reader.Close();

            if (pdfaidConformance == null || pdfaidPart == null)
            {
                return false;
            }
            else
            {
                return true;
            }
        }
        return false;
    }

谢谢大家的回答。