Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用ItextSharp进行书签和链接上的PDF文件操作_C#_Asp.net_Itextsharp - Fatal编程技术网

C# 使用ItextSharp进行书签和链接上的PDF文件操作

C# 使用ItextSharp进行书签和链接上的PDF文件操作,c#,asp.net,itextsharp,C#,Asp.net,Itextsharp,有一些关于书签和链接的问题 书签 当我们得到书签时,是否有任何选项可以在页面内容中添加书签、修改书签文本以及在PDF文件的树结构中修改书签内容 我们是否可以选择在页面内容中搜索书签。我注意到空间、拼写等情况 用于编辑书签和pdf页面内容中存在的书签的选项 是否有任何选项可以在页面内容中查找H1、H2 是否有任何选项可以找到书签是否指向正确的页面 链接 是否有任何选项可以找到链接。并检查链接是否指向正确的URL。 这是我的密码 public void ReadPdfFile(string file

有一些关于书签和链接的问题

书签

当我们得到书签时,是否有任何选项可以在页面内容中添加书签、修改书签文本以及在PDF文件的树结构中修改书签内容

我们是否可以选择在页面内容中搜索书签。我注意到空间、拼写等情况

用于编辑书签和pdf页面内容中存在的书签的选项

是否有任何选项可以在页面内容中查找H1、H2

是否有任何选项可以找到书签是否指向正确的页面

链接

是否有任何选项可以找到链接。并检查链接是否指向正确的URL。 这是我的密码

public void ReadPdfFile(string fileName, string CompareText)
    {
        StringBuilder text = new StringBuilder();
        System.Data.DataTable dtResult = new System.Data.DataTable();
        string currentText = "";
        string title = "";
        string[] pages;
        if (ViewState["Append"] != null)
        {
            dtResult = ViewState["Append"] as System.Data.DataTable;
        }

        string SearchText = string.Empty;

        if (!dtResult.Columns.Contains("BookMarks"))
        {
            dtResult.Columns.Add(new DataColumn("BookMarks"));

        }
        if (!dtResult.Columns.Contains("Exists"))
        {
            dtResult.Columns.Add(new DataColumn("Exists"));

        }
        if (File.Exists(fileName))
        {
                 PdfReader pdfReader = new PdfReader(fileName);
                ITextExtractionStrategy strategy = new SimpleTextExtractionStrategy();
                //string currentText = PdfTextExtractor.GetTextFromPage(pdfReader, page, strategy);
                IList<Dictionary<string, object>> bookmarks = SimpleBookmark.GetBookmark(pdfReader);
                for (int i = 0; i < bookmarks.Count; i++)
                {
                    var values = bookmarks[i].Values.ToList();
                     title = values[0].ToString();
                     pages = values[1].ToString().Split(' ');
                    currentText = PdfTextExtractor.GetTextFromPage(pdfReader, Convert.ToInt32(pages[0].ToString()));
                    currentText = Encoding.UTF8.GetString(ASCIIEncoding.Convert(Encoding.Default, Encoding.UTF8, Encoding.Default.GetBytes(currentText)));
                    if (currentText.Contains(title))
                    {
                        DataRow dr = dtResult.NewRow();
                        dr["BookMarks"] = title;
                        dr["Exists"] = "No";
                        dtResult.Rows.Add(dr);
                        dtResult.AcceptChanges();
                    }
                    currentText = "";
                    if (values.Count >= 4)
                    {
                        var ChildValues = (((System.Collections.Generic.List<System.Collections.Generic.Dictionary<string, object>>)(values[3])));
                        int haschild = 0;

                        int count = 0;
                        int n = 0;
                        int m = 0;
                           while (count < ChildValues.Count)
                           {
                                haschild = 1;
                                title = ChildValues[n]["Title"].ToString();

                                pages = ChildValues[n]["Page"].ToString().Split(' ');

                                currentText = PdfTextExtractor.GetTextFromPage(pdfReader, Convert.ToInt32(pages[0].ToString()));

                                currentText = Encoding.UTF8.GetString(ASCIIEncoding.Convert(Encoding.Default, Encoding.UTF8, Encoding.Default.GetBytes(currentText)));

                               // currentText = currentText.Replace('\n', ' ');
                                if (currentText.Contains(title))
                                {
                                    DataRow dr = dtResult.NewRow();
                                    dr["BookMarks"] = title;
                                    dr["Exists"] = "No";
                                    dtResult.Rows.Add(dr);
                                    dtResult.AcceptChanges();
                                }
                                currentText = "";
                                if (ChildValues[n].Count >= 4)
                                {
                                    int mychildcount = 0;
                                    m = 0;
                                    var mychild = (((System.Collections.Generic.List<System.Collections.Generic.Dictionary<string, object>>)(ChildValues[n]["Kids"])));
                                    while (haschild == 1 || mychildcount < mychild.Count)
                                    {

                                        title = mychild[m]["Title"].ToString();

                                        pages = mychild[m]["Page"].ToString().Split(' ');

                                        currentText = PdfTextExtractor.GetTextFromPage(pdfReader, Convert.ToInt32(pages[0].ToString()));

                                        currentText = Encoding.UTF8.GetString(ASCIIEncoding.Convert(Encoding.Default, Encoding.UTF8, Encoding.Default.GetBytes(currentText)));

                                       // currentText = currentText.Replace('\n', ' ');
                                        if (currentText.Contains(title))
                                        {
                                            DataRow dr = dtResult.NewRow();
                                            dr["BookMarks"] = title;
                                            dr["Exists"] = "No";
                                            dtResult.Rows.Add(dr);
                                            dtResult.AcceptChanges();
                                        }
                                        currentText = "";
                                        if (mychild[m].Count >= 4)
                                        {

                                            haschild = 1;
                                            mychild = (((System.Collections.Generic.List<System.Collections.Generic.Dictionary<string, object>>)(mychild[m]["Kids"])));

                                        }
                                        else
                                        {

                                            m++;
                                            haschild = 0;
                                            mychildcount++;
                                        }

                                    }
                                    n++;
                                    count++;

                                }
                                else
                                {
                                    n++;
                                    count++;
                                }
                                }

                            }
                    }

                  pdfReader.Close();
        }


            ViewState["Append"] = dtResult;
          GVResult.DataSource = dtResult;
        GVResult.DataBind();

            }

我可以回答你的第四个问题。H1、H2等是HTML概念,在PDF中不存在。PDF没有页眉、页脚、标题、表格,甚至我们认为的超链接也无法与HTML的版本相媲美。PDF包含文本、线条、图像和注释,仅此而已。因此,第四个问题的直接答案是否定的。不过,请参阅此答案,以提取文本并获取一些格式,从中可以应用自己的逻辑来确定标题级别。提取链接请参见此:老实说,剩下的问题太模糊,无法回答。你谈到书签,但我没有看到任何PDF特定的书签内容,我只看到你的DataTable中有一个书签列。我们对该表一无所知,也不知道您的特定PDF。请尽量将您的问题限制在一个具体的事情上,我们可以复制并帮助您。