如何使用 C# ITextSharp 区分 link 和脚注?

How can tell the difference between the link and the footnote using C# ITextSharp?

我有一个简单的 PDF 文件,页面上有 Link 和脚注。当我 运行 使用 iTextSharp 检查注释时,两个链接 return 子类型都为 Link。有没有办法区分这两个项目?

我确实通过智能检查了注释字典的结构,注意到脚注的注释对象字典有一次额外的项目,名为“F”,该项目的值为 4。该项目是Link 的注释字典中根本不存在。我可以使用 'F' item/parameter 来区分 Link 和脚注吗?

非常感谢您

Here is the PDF file

这是我们的代码

    public string AnyPDFCheckComments(string inFileName, string strUsername, string strFilename)
    {
            string strCommentType = string.Empty;
            string strWidgetFound = string.Empty;
            string strPageNumber = string.Empty;
            string message = string.Empty;
            string strComments = string.Empty;
            string strCommentsFound = string.Empty;
            int intCommentCount = 0;

            PdfReader reader = new PdfReader(inFileName);

            for (int i = 1; i <= reader.NumberOfPages; ++i)
            {
                strPageNumber = i.ToString();

                PdfDictionary pagedic = reader.GetPageN(i);

                PdfArray annotarray = (PdfArray)PdfReader.GetPdfObject(pagedic.Get(PdfName.ANNOTS));

                if (annotarray == null || annotarray.Size == 0)
                {
                    continue;
                }

                // Finding out the links
                foreach (object annot in annotarray.ArrayList)
                {
                    PdfDictionary annotationDic = null;
                    if (annot is PdfIndirectReference)
                    {
                        annotationDic = (PdfDictionary)PdfReader.GetPdfObject((PdfIndirectReference)annot);
                    }
                    else
                    {
                        annotationDic = (PdfDictionary) annot;
                    }

                    PdfName subType = (PdfName)annotationDic.Get(PdfName.SUBTYPE);
                    if ((subType.Equals(PdfName.TEXT)) && (strCommentsVariables.IndexOf("text") != -1))
                    {
                        strCommentType = "text";
                        //break;
                    }
                    else if ((subType.Equals(PdfName.LINK)) && (strCommentsVariables.IndexOf("Link") != -1))
                    {
                        strCommentType = "Link";
                        //break;
                    }

                    if ((strCommentType != ""))
                    {
                        strCommentsFound = "Yes";
                        intCommentCount = ++intCommentCount;
                        strComments = strComments + "<BR>" + "A comment type of '" + "<b>" + strCommentType + "</b>" + "' has been found on page no: " + "<b>" + strPageNumber + "</b>";
                        if (intCommentCount == 5)
                        {
                            break;
                        }
                        else
                        {
                            strCommentType = string.Empty;
                        }
                    }
                }
            }

            return strComments;
    }

这段代码对我们有用

var footnoteIdentifier = annotationDic.Get(PdfName.F);
if (footnoteIdentifier != null)
{
    continue;
}