【发布时间】:2015-07-06 08:17:06
【问题描述】:
通过使用 itextsharp c#,我有一个 PDF 文件。在那个 PDF 文件中,我们有 10 页。在 PDF 文件的第一页,我想在底部有一个超链接来导航 PDF 文件的特定页面。例如,在 PDF 的第一页中,我希望底部的超链接转到第 5 页。注意:- 它不是新创建的文件。我想应用已经创建的文件。
【问题讨论】:
标签: c# pdf itextsharp
通过使用 itextsharp c#,我有一个 PDF 文件。在那个 PDF 文件中,我们有 10 页。在 PDF 文件的第一页,我想在底部有一个超链接来导航 PDF 文件的特定页面。例如,在 PDF 的第一页中,我希望底部的超链接转到第 5 页。注意:- 它不是新创建的文件。我想应用已经创建的文件。
【问题讨论】:
标签: c# pdf itextsharp
非常很容易找到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 查看器应用程序通常会显示文档结构的树形视图,每个分支或叶都充当指向相应章节或章节的链接。 iTextSharp 提供了通过其 Chapter 和 Section 类生成此树视图的功能。
这表示你不需要做任何事情,只需正确使用Chapter 和Section,你就会得到你需要的。
【讨论】:
Chapter 也这样做,不确定,是我上次使用ITextSharp 时的一段时间),那么只需为每个添加锚点然后引用。如果您没有明确拆分内容(例如,没有分页符的普通文档),那么您就有麻烦了,也许您必须进行一些事件处理和手动工作,请参阅this 问题。
a1 和 a10 的名称指的是页码。啧啧……
请查看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# 中以大写字母开头,而PdfStamper 中不存在getWriter(),您需要Writer 属性。在这种情况下,我跳转到第 5 页。
最后,我们给压模添加注解:
stamper.AddAnnotation(a, 1);
请注意,我再次将小写 (Java) 更改为大写 (C#)。
这会创建一个从第 1 页到第 5 页的链接。
完整示例创建了一个从第 1 页到第 10 页的链接以及从第 10 页到第 1 页的链接。您可以在此处进行测试:primes_links.pdf
【讨论】:
a10 和 a1 是变量名!你可以选择任何你想要的。你想让我用vijay替换a10,用krishna替换a1吗?代码将继续工作。