如何使用IText7和C#修改现有PDF中的外部链接,使其指向文档中的内部页面?
我有一个现有的PDF文件,其中有指向外部PDF文件的链接。我想编辑这些链接,使它们指向同一PDF文档中的页面。这个功能以前在iTextsharp中使用过,现在我正在迁移到iText7,但无法使用 下面是一个示例代码,我已经尝试过,感觉非常接近解决方案,但缺少一些东西。这段代码基本上加载了一个包含2页的PDF。第一个页面有大约15个指向外部文件的链接。我正在尝试编辑链接,以便将用户带到同一文档的第2页。我可以加载所有链接并查询它们的值,但更改它们不会发生如何使用IText7和C#修改现有PDF中的外部链接,使其指向文档中的内部页面?,c#,pdf,itext,itext7,C#,Pdf,Itext,Itext7,我有一个现有的PDF文件,其中有指向外部PDF文件的链接。我想编辑这些链接,使它们指向同一PDF文档中的页面。这个功能以前在iTextsharp中使用过,现在我正在迁移到iText7,但无法使用 下面是一个示例代码,我已经尝试过,感觉非常接近解决方案,但缺少一些东西。这段代码基本上加载了一个包含2页的PDF。第一个页面有大约15个指向外部文件的链接。我正在尝试编辑链接,以便将用户带到同一文档的第2页。我可以加载所有链接并查询它们的值,但更改它们不会发生 private bool MakeLink
private bool MakeLinksInternal(字符串输入文件)
{
if(Path.GetExtension(inputFile.ToLower()!=“.pdf”)
返回false;
使用(PdfDocument PdfDocument=newpdfdocument(newpdfreader(inputFile)))
{
//获取索引页
PdfPage PdfPage=pdfDocument.GetPage(1);
//获取当前页面的所有链接批注
var annots=pdfPage.GetAnnotations(),其中(a=>a.GetSubtype().Equals(PdfName.Link));
//确保我们有东西
如果((annots==null)| |(annots.Count()==0))
返回true;
foreach(注释中的PDF注释链接注释)
{
//获取与注释关联的操作
var action=linkAnnotation.GetAction();
if(action==null)
继续;
//测试它是否是URI操作
if(action.Get(PdfName.S).Equals(PdfName.URI)
||Get(PdfName.S).Equals(PdfName.GoToR))
{
删除操作(PdfName.S);
action.Put(PdfName.S,PdfName.GoTo);
var newLocalDestination=new PdfArray();
newLocalDestination.Add(pdfDocument.GetPage(2.GetPdfObject());
newLocalDestination.Add(PdfName.Fit);
action.Put(PdfName.D,newLocalDestination);
}
}
pdfDocument.Close();
}
返回true;
}
这是我在stackoverflow中的第一个问题,因此如果我在创建此帖子时犯了任何错误,请原谅。您创建的
PdfDocument
如下所示
using (PdfDocument pdfDocument = new PdfDocument(new PdfReader(inputFile)))
这将创建一个仅供阅读的PdfDocument
。如果还想编写应用的更改,则必须使用
using (PdfDocument pdfDocument = new PdfDocument(new PdfReader(inputFile), new PdfWriter(outputFile)))
您应该为
inputFile
和outputFile
使用不同的名称,我已经看到我可以使用pdprotion.CreateGoTo(pdfdestinition.MakeDestination(pdfDocument.GetPage(2.GetPdfObject())创建一个pdprotion代码>,但无法确定如何将其附加到链接注释