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