我使用以下代码在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#中的任何其他示例代码
答案 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,看看差异:
假设您想要一个继承缩放因子的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;。