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

时间:2014-06-14 07:29:19

标签: c# pdf itextsharp

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

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

但是我需要在pdf文件中设置书签的继承缩放动作属性。

请告知我使用上面的代码或C#中的任何其他示例代码

1 个答案:

答案 0 :(得分:1)

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

之前的版本非常不清楚。根据对前面问题的评论,OP希望使用SimpleBookmark类获取大纲树,更改目标类似于他更改注释目的地的方式(如C# - Set inherit zoom action for all the bookmarks in the PDF file所示)和然后坚持这些改变。

使用SimpleBookmark时,您会获得与this XML-file类似的表单中的大纲:

<Bookmark>
    <Title Action="GoTo" Style="bold" Page="1 FitH 572">Akira</Title>
<Bookmark>

您可以更改此XML文件(例如,在OP的情况下,可以更改从Dictionary<string, object>获取的SimpleBookmark的内容),例如,您可以将1 Fith 572更改为{{1 }}。这超出了iText的范围:它是改变XML或更改字典中的字符串的问题。

一旦您进行了更改,您需要在PDF中保留更改。例如,您有一个1 Fith 580对象:

bookmarks

并且所有更改都会反映在此List<Dictionary<String, Object>> bookmarks; 对象中。

现在,您可以使用bookmarks&#39; setOutline()方法(Java)来更改文档的大纲。在C#中,它将是这样的:

PdfStamper

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

如果您想要一个示例,请参阅ChangeBookmarks示例:

stamper.Outlines = bookmarks;

如前所述,您将所有书签都标记为public void manipulatePdf(String src, String dest) throws IOException, DocumentException { PdfReader reader = new PdfReader(src); PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(dest)); List<HashMap<String, Object>> list = SimpleBookmark.getBookmark(reader); changeList(list); stamper.setOutlines(list); stamper.close(); reader.close(); } public void changeList(List<HashMap<String, Object>> list) { for (HashMap<String, Object> entry : list) { for (String key : entry.keySet()) { if ("Kids".equals(key)) { Object o = entry.get(key); changeList((List<HashMap<String, Object>>)o); } else if ("Page".equals(key)) { String dest = (String)entry.get(key); entry.put("Page", dest.replaceAll("Fit", "FitV 60")); } } } } 。您编写了一个遍历大纲树(List<HashMap<String, Object>>)的递归方法,并更改了"Kids"条目的所有值。就我而言,bookmarks.pdf中的书签都属于#34; Fit&#34;。我取代了#34; Fit&#34;与&#34; FitV 60&#34;。看看changed_bookmarks.pdf,看看差异:

enter image description here

假设您想要一个继承缩放因子的XYZ目的地,您可以采取类似于您在上一个问题中所做的事情:How to set zoom level to pdf using iTextSharp?

而不是替换&#34; Fit&#34;使用&#34; FitV 60&#34;,您可以替换&#34; Fit&#34; by&#34; XYZ 30 100 0&#34;。在这种情况下,30和100是X,Y坐标。第三个数字是缩放级别,但如果选择0,则得到&#34;继承缩放&#34;。