Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/327.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
如何使用IText7和C#修改现有PDF中的外部链接,使其指向文档中的内部页面?_C#_Pdf_Itext_Itext7 - Fatal编程技术网

如何使用IText7和C#修改现有PDF中的外部链接,使其指向文档中的内部页面?

如何使用IText7和C#修改现有PDF中的外部链接,使其指向文档中的内部页面?,c#,pdf,itext,itext7,C#,Pdf,Itext,Itext7,我有一个现有的PDF文件,其中有指向外部PDF文件的链接。我想编辑这些链接,使它们指向同一PDF文档中的页面。这个功能以前在iTextsharp中使用过,现在我正在迁移到iText7,但无法使用 下面是一个示例代码,我已经尝试过,感觉非常接近解决方案,但缺少一些东西。这段代码基本上加载了一个包含2页的PDF。第一个页面有大约15个指向外部文件的链接。我正在尝试编辑链接,以便将用户带到同一文档的第2页。我可以加载所有链接并查询它们的值,但更改它们不会发生 private bool MakeLink

我有一个现有的PDF文件,其中有指向外部PDF文件的链接。我想编辑这些链接,使它们指向同一PDF文档中的页面。这个功能以前在iTextsharp中使用过,现在我正在迁移到iText7,但无法使用

下面是一个示例代码,我已经尝试过,感觉非常接近解决方案,但缺少一些东西。这段代码基本上加载了一个包含2页的PDF。第一个页面有大约15个指向外部文件的链接。我正在尝试编辑链接,以便将用户带到同一文档的第2页。我可以加载所有链接并查询它们的值,但更改它们不会发生

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,但无法确定如何将其附加到链接注释