web-dev-qa-db-fra.com

iText orientation et positionnement du paysage?

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. 

  • Création de documents en paysage. Toutes les pages sont rendues en portrait.
  • Insérer des images sur une position donnée (nombre de millimètres en haut et à gauche).

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?

27
user1111929

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.

48
Bruno Lowagie
iTextSharp.text.Document pdfDoc = new iTextSharp.text.Document(iTextSharp.text.PageSize.A4.Rotate(), 10f, 10f, 10f, 0f);
2
Mahmaood ali
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

0
denis