2013-06-05 4 views
1

J'utilise iText PDF 2.1.7 pour créer un PDF. Quelqu'un a une idée si étirer la hauteur d'un seul caractère (une accolade de fermeture, ASCII 125), est possible avec iText PDF?iText PDF Étirer un caractère

Stretched closing curly brace

La hauteur de l'entretoise étiré frisé dépendra de la hauteur de la hauteur de la cellule précédente. (Pardon mon image échantillon, l'accolade supérieure doit être plus grand que l'accolade inférieure.

Si l'étirement de la hauteur d'un seul caractère est impossible, toute autre solution que vous pourriez suggérer qui utilise encore la bibliothèque PDF iText?

Merci beaucoup

.


Curly brace

J'utilise maintenant la version 5.4.0 iText.

J'ai un problème avec la mise à l'échelle de la hauteur de l'image. En outre, l'image est sur la mauvaise position, bien que j'ai copié la position de la cellule. La partie inférieure de l'accolade n'est pas affichée. Savez-vous quel est le problème avec la façon dont je redimensionne l'image et comment je la positionne? Merci.

public void cellLayout(PdfPCell cell, Rectangle position, 
    PdfContentByte[] canvases) { 
    try { 

     BaseFont bf = BaseFont.createFont(
      CreatePDFCurlyBrace.DEFAULT_ENGLISH_FONT_TTF, BaseFont.IDENTITY_H, 
      BaseFont.EMBEDDED); 
     String curlyBrace = "}"; 
     float width = bf.getWidthPoint(curlyBrace, 12); 
     float height = bf.getAscentPoint(curlyBrace, 12) 
      - bf.getDescentPoint(curlyBrace, 12); 

     PdfTemplate template = this.cb.createTemplate(width, height); 
     template.beginText(); 
     template.setFontAndSize(bf, 12); 
        template.setTextMatrix(0, bf.getDescentPoint(curlyBrace, 12)); 
     template.showText(curlyBrace); 
     template.endText(); 

     // Scale the image so that its height corresponds 
     // with the height of the cell 
     Image img = Image.getInstance(template); 
     img.scaleToFit(1000f, position.getHeight()); 
     img.setAbsolutePosition(position.getRight(), position.getBottom()); 
        cb.addImage(img); 

    } catch (Exception e) { 
     throw new ExceptionConverter(e); 
    } 
} 

Répondre

0

Si la partie gauche est une cellule, et la partie droite est une cellule, et l'accolade est une sorte de la « frontière » entre les cellules, je définirais un événement cellulaire pour la gauche ou la bonne cellule.

Je créerais un simple PdfTemplate auquel j'ajouterais une accolade. Je baserais les dimensions du PdfTemplate sur les informations métriques de l'accolade (ascender - descender = height height). Je ne ferais pas attention à la taille de la police; nous avons juste besoin d'un objet PdfTemplate avec un glyphe d'accolade. Je voudrais envelopper le PdfTemplate dans un objet Image. Ne vous inquiétez pas: cela ne transforme pas votre modèle "vectoriel" en une image "raster". L'objet Image facilite simplement la manipulation du modèle. Je voudrais implémenter la méthode cellLayout() dans l'événement de cellule, et mettre à l'échelle l'image de sorte que sa hauteur corresponde à la hauteur de la cellule (pas de perte de résolution: vous avez utilisé un PdfTemplate, vous ajoutez des données vectorielles, pas une image raster) et ajoutez l'image à la position correcte (transmise à la méthode cellLayout() en utilisant le paramètre position).

Il va sans dire que je n'utiliserais pas iText 2.1.7 (une version qui a 4 ans!) Pour cette tâche, parce que j'ai corrigé un bug il y a quelques années qui a causé PdfPTable de perdre un rangée un dans un million de fois. Pour éviter ce bug, je ne voudrais pas tromper mon client en utilisant une version iText qui est considérée comme obsolète: http://lowagie.com/itext2

+0

Pouvez-vous me donner un exemple de code? Quelle interface je devrais implémenter pour le cellLayout() que vous avez mentionné? Merci. –

+0

Il y a beaucoup d'exemples de code sur http://itextpdf.com/book Vous avez besoin de http://itextpdf.com/themes/keyword.php?id=201 et http://itextpdf.com/themes/keyword.php? id = 149 –

+0

Bruno, j'ai suivi votre conseil, mais j'ai rencontré des problèmes avec la mise à l'échelle de ** Image **. Veuillez vérifier mon article contenant le code. Merci. –