C# 使用iTextSharp提取PDF文档的ID

C# 使用iTextSharp提取PDF文档的ID,c#,asp.net,pdf,itextsharp,C#,Asp.net,Pdf,Itextsharp,我需要提取文档尾部提到的PDF标识符。但我无法得到那个值。 我的pdf文件中提到了以下内容: trailer <</Size 196/Prev 370761/Root 160 0 R/Info 158 0 R/ID[<30EB7FCBB6756E461176FBBD0CEBA7B9><DB67D6D43AE0FA4FBF8CC171FC66790A>]>> 拖车 我需要提取值30EB7FCBB6756E46176FBBD0CEBA7B9。使用P

我需要提取文档尾部提到的PDF标识符。但我无法得到那个值。 我的pdf文件中提到了以下内容:

trailer
<</Size 196/Prev 370761/Root 160 0 R/Info 158 0 R/ID[<30EB7FCBB6756E461176FBBD0CEBA7B9><DB67D6D43AE0FA4FBF8CC171FC66790A>]>>
拖车
我需要提取值
30EB7FCBB6756E46176FBBD0CEBA7B9
。使用
PdfReader.Trailer
如果一个键作为'ID',我会得到一个字典类型的对象,但我无法从中获得上述所需的值

使用
PdfReader.Trailer
如果一个键作为'ID',我会得到一个字典类型的对象,但我无法从中获得上述所需的值

看着
PdfReader.Trailer
你就快到了:

public PdfArray GetId(string FileName)
{
    using (PdfReader pdfReader = new PdfReader(FileName))
    {
        return pdfReader.Trailer.GetAsArray(PdfName.ID);
    }
}
这个方法返回文档的ID,一个由两个字节字符串组成的数组

您似乎对ID的十六进制表示法感兴趣。您可以这样输出它:

public void PrintId(PdfArray Id)
{
    if (Id != null)
    {
        StringBuilder builder = new StringBuilder();
        builder.Append("ID: ");
        foreach (PdfObject o in Id)
        {
            builder.Append("<");
            foreach (byte b in ((PdfString)o).GetBytes())
                builder.AppendFormat("{0:X}", b);
            builder.Append(">");
        }
        Console.WriteLine(builder.ToString());
    }
}
public void打印Id(PdfArray Id)
{
如果(Id!=null)
{
StringBuilder=新的StringBuilder();
builder.Append(“ID:”);
foreach(Id中的PdfObject o)
{
生成器。追加(“”);
}
Console.WriteLine(builder.ToString());
}
}
(我对.Net不是很精通,所以可能有很多更优雅的方法来创建字节数组的十六进制转储。)

使用
PdfReader.Trailer
如果一个键作为'ID',我会得到一个字典类型的对象,但我无法从中获得上述所需的值

看着
PdfReader.Trailer
你就快到了:

public PdfArray GetId(string FileName)
{
    using (PdfReader pdfReader = new PdfReader(FileName))
    {
        return pdfReader.Trailer.GetAsArray(PdfName.ID);
    }
}
这个方法返回文档的ID,一个由两个字节字符串组成的数组

您似乎对ID的十六进制表示法感兴趣。您可以这样输出它:

public void PrintId(PdfArray Id)
{
    if (Id != null)
    {
        StringBuilder builder = new StringBuilder();
        builder.Append("ID: ");
        foreach (PdfObject o in Id)
        {
            builder.Append("<");
            foreach (byte b in ((PdfString)o).GetBytes())
                builder.AppendFormat("{0:X}", b);
            builder.Append(">");
        }
        Console.WriteLine(builder.ToString());
    }
}
public void打印Id(PdfArray Id)
{
如果(Id!=null)
{
StringBuilder=新的StringBuilder();
builder.Append(“ID:”);
foreach(Id中的PdfObject o)
{
生成器。追加(“”);
}
Console.WriteLine(builder.ToString());
}
}
(我对.Net不是很精通,所以可能有很多更优雅的方法来创建字节数组的十六进制转储。)

使用
PdfReader.Trailer
如果一个键作为'ID',我会得到一个字典类型的对象,但我无法从中获得上述所需的值

看着
PdfReader.Trailer
你就快到了:

public PdfArray GetId(string FileName)
{
    using (PdfReader pdfReader = new PdfReader(FileName))
    {
        return pdfReader.Trailer.GetAsArray(PdfName.ID);
    }
}
这个方法返回文档的ID,一个由两个字节字符串组成的数组

您似乎对ID的十六进制表示法感兴趣。您可以这样输出它:

public void PrintId(PdfArray Id)
{
    if (Id != null)
    {
        StringBuilder builder = new StringBuilder();
        builder.Append("ID: ");
        foreach (PdfObject o in Id)
        {
            builder.Append("<");
            foreach (byte b in ((PdfString)o).GetBytes())
                builder.AppendFormat("{0:X}", b);
            builder.Append(">");
        }
        Console.WriteLine(builder.ToString());
    }
}
public void打印Id(PdfArray Id)
{
如果(Id!=null)
{
StringBuilder=新的StringBuilder();
builder.Append(“ID:”);
foreach(Id中的PdfObject o)
{
生成器。追加(“”);
}
Console.WriteLine(builder.ToString());
}
}
(我对.Net不是很精通,所以可能有很多更优雅的方法来创建字节数组的十六进制转储。)

使用
PdfReader.Trailer
如果一个键作为'ID',我会得到一个字典类型的对象,但我无法从中获得上述所需的值

看着
PdfReader.Trailer
你就快到了:

public PdfArray GetId(string FileName)
{
    using (PdfReader pdfReader = new PdfReader(FileName))
    {
        return pdfReader.Trailer.GetAsArray(PdfName.ID);
    }
}
这个方法返回文档的ID,一个由两个字节字符串组成的数组

您似乎对ID的十六进制表示法感兴趣。您可以这样输出它:

public void PrintId(PdfArray Id)
{
    if (Id != null)
    {
        StringBuilder builder = new StringBuilder();
        builder.Append("ID: ");
        foreach (PdfObject o in Id)
        {
            builder.Append("<");
            foreach (byte b in ((PdfString)o).GetBytes())
                builder.AppendFormat("{0:X}", b);
            builder.Append(">");
        }
        Console.WriteLine(builder.ToString());
    }
}
public void打印Id(PdfArray Id)
{
如果(Id!=null)
{
StringBuilder=新的StringBuilder();
builder.Append(“ID:”);
foreach(Id中的PdfObject o)
{
生成器。追加(“”);
}
Console.WriteLine(builder.ToString());
}
}

(我对.Net不是很精通,因此可能有很多更优雅的方法来创建字节数组的十六进制转储。)

不知道是谁投了反对票,但我认为投票结束是“离题”的,声称这是一个“为什么这段代码不起作用”的问题。我不同意投票结束,我用一张赞成票来补偿反对票;-)谢谢@BrunoLowagie:)我不知道是谁投了反对票,但我认为结束投票是“离题”的,声称这是一个“为什么这个代码不起作用”的问题。我不同意投票结束,我用一张赞成票来补偿反对票;-)谢谢@BrunoLowagie:)我不知道是谁投了反对票,但我认为结束投票是“离题”的,声称这是一个“为什么这个代码不起作用”的问题。我不同意投票结束,我用一张赞成票来补偿反对票;-)谢谢@BrunoLowagie:)我不知道是谁投了反对票,但我认为结束投票是“离题”的,声称这是一个“为什么这个代码不起作用”的问题。我不同意投票结束,我用一张赞成票来补偿反对票;-)谢谢@BrunoLowagie:)