Je viens tout juste de commencer à utiliser iText (5.4.2, dernière version) et il y a deux choses que je n'ai pas encore réussi à comprendre.
J'ai le code ci-dessous.
Document d = new Document(PageSize.A4_LANDSCAPE,0,0,0,0);
PdfWriter writer = PdfWriter.getInstance(d, new FileOutputStream("C:/test.pdf"));
document.open();
document.newPage();
Image img = Image.getInstance(String.format("C:/file.png"));
img.scaleToFit(400,240);
document.left(100f);
document.top(150f);
document.add(img);
document.close();
Mais la page est rendue en Portrait (pas en Paysage) et l'image est placée dans le coin supérieur gauche (à 10 et 15 unités de la distance demandée). Qu'est-ce que je fais mal?
Vous utilisez PageSize.A4_LANDSCAPE
, une variable introduite par un contributeur et qui n'aurait jamais dû être ajoutée à la version principale. Merci d'utiliser PageSize.A4.rotate()
à la place.
Ce que vous voulez réaliser avec les lignes n'est pas clair:
document.left(100f);
document.top(150f);
Ce sont des accesseurs, pas des setters. Il semble que vous supposiez que PDF est similaire à HTML. Cette hypothèse est fausse.
Si vous souhaitez que l'image soit placée à 10 unités utilisateur de la gauche et 15 unités du haut (auquel cas 100 et 150 sont des valeurs incorrectes), vous pouvez remplacer les valeurs 0 dans votre constructeur de document pour définir une marge gauche 10 unités d'utilisateur et la marge supérieure 15 unités d'utilisateur.
Une autre méthode consiste à définir une position absolue pour l’image avec la méthode setAbsolutePosition()
. Dans ce cas, vous devez savoir que le système de coordonnées est orienté de telle sorte que le coin inférieur gauche de la page présente la coordonnée x = 0, y = 0 pour les documents créés à partir de rien.
iTextSharp.text.Document pdfDoc = new iTextSharp.text.Document(iTextSharp.text.PageSize.A4.Rotate(), 10f, 10f, 10f, 0f);
Document d = new Document(PageSize.A4.rotate(), 10f, 10f, 10f, 0f);
cela a fonctionné pour moi je viens de pirater quelques morceaux de celui ci-dessus