将inheritance缩放(动作属性)设置为pdf文件中的书签

我使用以下代码在pdf文件中找到了书签的数量。

var reader = new PdfReader(System.Windows.Forms.Application.StartupPath + "\\zoom.pdf", new System.Text.ASCIIEncoding().GetBytes("")); IList<Dictionary> bookmarks = SimpleBookmark.GetBookmark(reader); foreach (Dictionary bk in bookmarks) { string bjj = bk.Values.ToArray().GetValue(0).ToString(); } 

但我需要在pdf文件中为书签设置inheritance缩放操作属性。

请告诉我从上面的代码或C#中的任何其他示例代码做

这个问题是同一个OP对以下问题的变化:

  • C# – 为PDF文件中的所有书签设置inheritance缩放操作 (6月5日)
  • 如何使用iTextSharp将缩放级别设置为pdf? (6月6日)

以前的版本非常不清楚。 基于对前面问题的评论,OP希望使用SimpleBookmark类获取Outline树,更改Destinations类似于他更改注释目的地的方式(如C#中所示- 为所有书签设置inheritance缩放操作) PDF文件 )然后坚持这些更改。

使用SimpleBookmark ,您可以使用与此XML文件类似的格式获取轮廓:

  Akira  

您可以更改此XML文件(或者在OP的情况下,可以更改DictionarySimpleBookmark获取的SimpleBookmark ),例如,您可以将1 Fith 572更改为1 Fith 580 。 这超出了iText的范围:这是改变XML或更改字典中的字符串的问题。

完成更改后,您需要在PDF中保留更改。 例如,您有一个bookmarks对象:

 List> bookmarks; 

并且所有更改都反映在此bookmarks对象中。

现在,您可以使用PdfStampersetOutline()方法(Java)来更改文档的轮廓。 在C#中,它将是这样的:

 stamper.Outlines = bookmarks; 

这只是接近它的一种方法。 显然,也可以遍历轮廓对象并在最低PDF级别更改目标。

如果需要示例,请参阅ChangeBookmarks示例:

 public void manipulatePdf(String src, String dest) throws IOException, DocumentException { PdfReader reader = new PdfReader(src); PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(dest)); List> list = SimpleBookmark.getBookmark(reader); changeList(list); stamper.setOutlines(list); stamper.close(); reader.close(); } public void changeList(List> list) { for (HashMap entry : list) { for (String key : entry.keySet()) { if ("Kids".equals(key)) { Object o = entry.get(key); changeList((List>)o); } else if ("Page".equals(key)) { String dest = (String)entry.get(key); entry.put("Page", dest.replaceAll("Fit", "FitV 60")); } } } } 

如前所述,您将所有书签作为List> 。 您编写了一个遍历大纲树( "Kids" )的递归方法,并更改了Page条目的所有值。 在我的例子中,bookmarks.pdf中的书签都是“Fit”类型。 我将“Fit”替换为“FitV 60”。 看一下changed_bookmarks.pdf来看看差异:

在此处输入图像描述

假设您想要一个inheritance缩放因子的XYZ目的地,您可以采取类似于您在上一个问题中所做的操作: 如何使用iTextSharp将缩放级别设置为pdf?

您可以将“Fit”替换为“XYZ 30 100 0”,而不是将“Fit”替换为“FitV 60”。 在这种情况下,30和100是X,Y坐标。 第三个数字是缩放级别,但如果选择0,则会显示“inheritance缩放”。