如何使用itextsharp c#将一个页面导航到PDF文件中的另一个页面?

时间:2015-07-06 08:17:06

标签: c# pdf itextsharp

通过使用itextsharp c#,我有一个PDF文件。在该PDF文件中,我们有10页。在PDF文件的第1页,我想在底部有一个超链接来浏览PDF文件的特定页面。例如,在PDF的第一页,我想在底部的超链接转到第5页。注意: - 它不是新创建的文件。我想申请已经创建的文件。

2 个答案:

答案 0 :(得分:0)

非常很容易找到this页面。您必须使用Anchor并为其命名。然后使用#name

引用它
Anchor click = new Anchor("Click to go to Target");
click.Reference = "#target";
Paragraph p1 = new Paragraph();
p1.Add(click);
doc.Add(p1);

Paragraph p2 = new Paragraph();
p2.Add(new Chunk("\n\n\n\n\n\n\n\n"));
doc.Add(p2);

Anchor target = new Anchor("This is the Target");
target.Name = "target";
Paragraph p3 = new Paragraph();
p3.Add(target);
doc.Add(p3);

在您的情况下:在每个页面上放置这样的锚点,在第一页上引用所有这些锚点。

是的,你知道吗

  

通常,当您打开PDF文件时,PDF Viewer应用程序会显示文档结构的树视图,每个分支或叶子都充当相应章节或部分的链接。 iTextSharp提供了通过其章节和节类生成此树视图的功能。

这表示您无需执行任何操作,只需正确使用ChapterSection即可获得所需内容。

答案 1 :(得分:0)

请查看AddNavigation示例。这是您需要执行的Java版本:

public void manipulatePdf(String src, String dest) throws IOException, DocumentException {
    PdfReader reader = new PdfReader(src);
    PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(dest));
    PdfDestination d1 = new PdfDestination(PdfDestination.FIT);
    Rectangle rect = new Rectangle(0, 806, 595, 842);
    PdfAnnotation vijay = PdfAnnotation.createLink(stamper.getWriter(), rect, PdfAnnotation.HIGHLIGHT_INVERT, 10, d1);
    stamper.addAnnotation(vijay, 1);
    PdfDestination d2 = new PdfDestination(PdfDestination.FIT);
    PdfAnnotation krishna = PdfAnnotation.createLink(stamper.getWriter(), rect, PdfAnnotation.HIGHLIGHT_PUSH, 1, d2);
    stamper.addAnnotation(krishna, 10);
    stamper.close();
}

您想使用iTextSharp从第1页导航到第5页。这意味着我们必须进行小幅调整:

首先,您需要创建PdfDestination

PdfDestination d = new PdfDestination(PdfDestination.FIT);

C#代码与Java代码相同。

然后你需要创建一个Rectangle。这是人们可以点击的区域:

Rectangle rect = new Rectangle(0, 806, 595, 842);

C#代码与Java代码相同,但请注意我在这里使用的是harc编码的坐标。我有一个A4页面的现有文档,其创建方式使页面的左下角具有坐标(0, 0)。我的坐标对应于页面的半英寸上边缘。

现在我们创建一个链接注释:

PdfAnnotation a = PdfAnnotation.CreateLink(stamper.Writer,
    rect, PdfAnnotation.HIGHLIGHT_PUSH, 5, d);

您是否注意到C#和Java之间的细微差别?方法CreateLink()以C#中的大写字母开头,getWriter()中不存在PdfStamper,您需要Writer属性。在这种情况下,我跳到第5页。

最后,我们将注释添加到压模:

stamper.AddAnnotation(a, 1);

请注意,我再次将小写(Java)更改为大写(C#)。

这将创建从第1页到第5页的链接。

完整示例创建从第1页到第10页的链接以及从第10页到第1页的链接。您可以在此处进行测试:primes_links.pdf