2010-10-05 17 views
0

J'ai créé un fichier pdf avec iText. le pdf est un fichier A4 et certaines marges sont définies.Lire les marges existantes dans un pdf

Paragraph paragraph = new Paragraph(); 
    Document document = new Document(PageSize.A4, 36, 72, 108, 180); 
    PdfWriter.getInstance(document, new FileOutputStream("c:\\margin.pdf")); 
    document.open(); 
    document.add(new Paragraph("Margin--->>roseinia.net")); 
    document.close(); 

maintenant dans un autre programme, je veux lire les marges supérieures pdf. Existe-t-il un moyen de le faire dans iText ou dans une autre bibliothèque?

Répondre

2

Le PDF lui-même n'a pas vraiment la notion de marges. Il y a un certain nombre de boîtes englobantes associées à une page donnée:

  • MediaBox - la taille des supports physiques nécessaires à la page
  • CropBox - la taille de la page visible dans une visionneuse (par défaut MediaBox si non présent)
  • BleedBox - une limite de coupure pour le rendu dans un environnement de production (peut inclure la place pour les plis)
  • Trimbox - dimensions destinées de la page finie après la coupe
  • ArtBox - les limites de contenu significatif de la page
  • L'ArtBox peut être être ce que les "marges" sont en train d'être traduites en

0

Je n'ai pas de copie du code de ligne iText sur cette machine, mais je suis à peu près sûr qu'elle n'écrit pas d'informations de marge dans les fichiers PDF qu'elle génère. Même si le tronc le fait, je ne pourrais pas vous dire quelle version a été ajoutée ... encore une fois, pas de tronc ici.

Il y a quelques solutions possibles au problème cependant:

1) manuellement les informations dans le PDF. Étant donné que vous avez la source qui a généré les documents, vous devriez pouvoir modifier cette source. Cela n'aidera pas avec les documents qui ont déjà été générés, mais c'est mieux que rien. C'est aussi beaucoup plus facile que l'alternative. Il y a plusieurs endroits où vous pourriez écrire cette information. a) Vous pourriez ajouter l'information sous forme de chaîne aux "champs d'information de doc" de PDF (métadonnées). Je suis à peu près sûr que iText vous permet d'écrire des champs personnalisés ... oui.

new Meta("margins", buildStringOfMyMargins()); 

Vous devrez alors à nouveau analyser la chaîne. Rappelez-vous que vous devez ajouter des méta-infos avant de doc.open();

b) Écrivez votre propre ArtBox (comme décrit par plinthe). Cela nécessite un second passage avec un PdfStamper pour écrire des données directement dans le PdfDictionary de chaque page.

c) Modifiez iText pour inclure une boîte d'art basée sur les marges que vous fournissez.

2) Analyser les emplacements du contenu. Le code actuel com.itextpdf.text.pdf.parser. * Ne gère pas les dessins au trait, ce qui peut ou peut ne pas être très important pour vous. Vous devez déterminer la boîte englobante de chaque élément sur une page donnée et calculer la boîte englobante qui les englobe tous. Beaucoup de travail.

Questions connexes