Définissez Zoom hériter (propriété d’action) sur un signet dans le fichier pdf

J’ai trouvé le nombre de signets dans le fichier pdf en utilisant le code suivant.

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) { ssortingng bjj = bk.Values.ToArray().GetValue(0).ToSsortingng(); } 

Mais je dois définir la propriété d’action de zoom hériter pour le signet du livre dans le fichier pdf.

s’il vous plaît me conseiller de faire à partir du code ci-dessus ou tout autre code exemple en C #

Cette question est une variante des questions suivantes du même OP:

  • C # – Définit une action de zoom héritée pour tous les signets du fichier PDF (5 juin)
  • Comment définir le niveau de zoom sur pdf à l’aide de iTextSharp? (6 juin)

Les versions précédentes étaient très floues. En se basant sur les commentaires des questions précédentes, l’opérateur souhaite utiliser l’arborescence SimpleBookmark l’aide de la classe SimpleBookmark , modifier les destinations de la même manière que les destinations des annotations (comme indiqué en C # – Définir une action de zoom hérité pour tous les signets de le fichier PDF ), puis persistez ces modifications.

Lorsque vous utilisez SimpleBookmark , vous obtenez les contours dans un formulaire similaire à ce fichier XML :

  Akira  

Vous pouvez modifier ce fichier XML (ou, dans le cas de l’OP, le contenu du Dictionary obtenu auprès de SimpleBookmark ), par exemple, vous pouvez modifier 1 Fith 572 en 1 Fith 580 . Cela dépasse le cadre d’iText: il s’agit de changer de XML ou de changer de chaîne dans un dictionnaire.

Une fois que vous avez effectué le changement, vous devez le conserver dans le fichier PDF. Par exemple, vous avez un object de bookmarksbookmarks :

 List> bookmarks; 

et tous les changements sont reflétés dans cet object bookmarks .

Vous pouvez maintenant utiliser la PdfStamper setOutline() Java) pour modifier les contours du document. En C #, ce serait quelque chose comme ça:

 stamper.Outlines = bookmarks; 

Ce n’est qu’une façon de l’aborder. De toute évidence, il est également possible de parcourir les objects de contour et de modifier les destinations au niveau PDF le plus bas.

Si vous voulez un exemple, voir l’exemple ChangeBookmarks :

 public void manipulatePdf(Ssortingng src, Ssortingng 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 (Ssortingng key : entry.keySet()) { if ("Kids".equals(key)) { Object o = entry.get(key); changeList((List>)o); } else if ("Page".equals(key)) { Ssortingng dest = (Ssortingng)entry.get(key); entry.put("Page", dest.replaceAll("Fit", "FitV 60")); } } } } 

Comme déjà expliqué, vous obtenez tous les signets sous forme de List> . Vous écrivez une méthode récursive qui parcourt l’arborescence ( "Kids" ) et modifie toutes les valeurs de l’entrée Page . Dans mon cas, les signets dans bookmarks.pdf sont tous de type “Fit”. Je remplace “Fit” par “FitV 60”. Jetez un coup d’œil à modified_bookmarks.pdf pour voir la différence:

entrez la description de l'image ici

Supposons que vous souhaitiez une destination XYZ dans laquelle vous héritez du facteur de zoom. Vous pouvez faire quelque chose de similaire à ce que vous aviez déjà posé dans une question précédente: comment définir le niveau de zoom sur PDF à l’aide de iTextSharp?

Au lieu de remplacer “Fit” par “FitV 60”, vous pouvez remplacer “Fit” par “XYZ 30 100 0”. Dans ce cas, 30 et 100 sont des coordonnées X, Y. Le troisième nombre est le niveau de zoom, mais si vous choisissez 0, vous obtenez “Zoom hérité”.