comment ajouter une image à mon en-tête de la bibliothèque iText PDF généré?
Je suis en utilisant la bibliothèque iText pour générer un fichier PDF. J'ai créé un custom PdfPageEventHelper pour ajouter un en-tête et pied de page) pour chaque page.
Mon problème est que je ne sais pas comment faire pour ajouter l'image afin qu'elle s'affiche dans la "zone en-tête". Je ne sais pas comment ajouter une image sur le contenu du document lui-même (si cela fait sens).
Voici quelques extraits de code ...
public static void main(String[] args) {
Rectangle headerBox = new Rectangle(36, 54, 559, 788);
/* ... */
Document document = new Document(PageSize.A4, 36, 36, 154, 54);
PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(FILENAME));
HeaderFooter event = new HeaderFooter();
writer.setBoxSize("headerBox", headerBox);
writer.setPageEvent(event);
document.open();
addContent();
document.close();
}
static class HeaderFooter extends PdfPageEventHelper {
public void onEndPage(PdfWriter writer, Document document) {
Rectangle rect = writer.getBoxSize("headerBox");
//add header text
ColumnText.showTextAligned(writer.getDirectContent(),
Element.ALIGN_RIGHT, new Phrase("Hello", fontHeader1),
rect.getLeft(), rect.getTop(), 0);
//add header image
try {
Image img = Image.getInstance("c:/mylogo.PNG");
img.scaleToFit(100,100);
document.add(img);
} catch (Exception x) {
x.printStackTrace();
}
}
}
Des suggestions sur la façon d'ajouter l'image de l'en-tête sont grandement appréciés!!
Rob
Devrait
C'est une faute de frappe, désolé -- mais merci pour le bon oeil.
writer
dans onEndPage
être échangés avec pdfWriter
?C'est une faute de frappe, désolé -- mais merci pour le bon oeil.
OriginalL'auteur Robert Hume | 2012-10-17
Vous devez vous connecter pour publier un commentaire.
Vous faites deux erreurs majeures.
Image
objet en dehors de laonEndPage()
de la méthode et de la réutiliser. De cette façon, l'image octets seront ajoutés au format PDF en une seule fois.Document
passé à laonEndPage()
méthode en tant que paramètre doit être considéré comme un paramètre en lecture seule. Il est interdit d'ajouter du contenu. C'est un objet différent de celui que vous avez créé avecnew Document(PageSize.A4, 36, 36, 154, 54)
. En réalité, il est une instance d'unePdfDocument
classe créé en interne par lePdfWriter
instance. Pour ajouter une image, vous avez besoin pour obtenir lePdfContentByte
de l'écrivain, et ajouter l'image à l'aide deaddImage()
.Erreurs de ce type peuvent facilement être évités par la lecture de la documentation. Vous pouvez économiser beaucoup de temps par la lecture de mon livre iText en Action.
Très utile! Merci. Je vais passer plus de temps avec votre livre. En attendant, ce que vous (et Denisk) a suggéré fonctionne, mais il a un effet secondaire. Lorsque j'ajoute le
img.setAbsolutePosition(35,742); writer.getDirectContent().addImage(img);
de mettre l'image en haut de chaque page, tous mes le contenu du document (à l'exception de l'en-tête) est poussé à la deuxième page. La première page est vide. Toute idée de ce que je fais mal? Je peux poster un nouveau stackoverflow question avec code si ça peut aider.De poster une nouvelle question est le chemin à parcourir
ma première hypothèse serait que vous utilisez onStartPage() au lieu de onEndPage(), mais je devrais voir plus de code...
ce qui a été downvoted? Pour être sûr, j'upvoted la question et la réponse.
OriginalL'auteur Bruno Lowagie
Pouvez-vous essayer
au lieu de
à l'intérieur de
onPageEnd
?Je suis totalement d'accord avec vous sur ce point
OriginalL'auteur Denis Kniazhev
J'ai mis abolute positions et l'alignement de l'image (dans ce cas, j'ai mis mon image dans l'en-tête)
J'ai aussi ajusté le les marges du document afin d'avoir un espace délimité dans l'en-tête et pied de page du document.
OriginalL'auteur Sericaia
Une solution générique pour ajouter une image en haut de la page. Nous pouvons le faire en avançant l'image vers le haut également. il peut résoudre votre exigence
}
document.add
, cf. par exemple, @Bruno réponse de la question 2. Ainsi, votre solution ne s'applique pas à la situation à portée de main.OriginalL'auteur Mohit Singh