2010-07-23 6 views
4

J'utilise une police truetype personnalisée dans un pdf généré par xhtmlrenderer soucoupe volante.soucoupe volante (xhtmlrenderer) ne gras ma police?

ITextRenderer renderer = new ITextRenderer(); 
renderer.getFontResolver().addFont("myfont.ttf", BaseFont.CP1252, BaseFont.EMBEDDED); 
renderer.setDocument(XMLResource.load(in).getDocument(), url); 
renderer.layout(); 
renderer.createPDF(out); 

et dans le code HTML étant rendu, je donne les résultats suivants (par exemple)

<html> 
<head> 
<style type="text/css"> 
*{font-family:myfont;} /* <-- this works, trust me */ 
</style> 
</head> 
<body> 
<p>some plain text<b>some bold text</b> <span style="font-weight:bold;">more bold</span></p> 
</body> 
</html> 

mais même avec le <b> et font-weight:bold je ne peux pas le texte à venir gras.

Maintenant, je sais que cela devrait fonctionner parce que j'ai un projet similaire (héritage) qui utilise la même police, et ancienne plaine itext (pas de xhtmlrenderer) et il ne produit pdfs avec le texte en gras par:

myFont = BaseFont.createFont("myfont.ttf", BaseFont.CP1252, BaseFont.EMBEDDED); 
Font boldFont = new Font(myFont); 
boldFont.setStyle(Font.BOLD); 

com.lowagie.text.Document document = ...; 
document.add(new Paragraph("plain", myFont)); 
document.add(new Paragraph("bold", boldFont)); 

quelqu'un peut-il expliquer pourquoi je ne peux pas utiliser gras avec xhtmlrenderer, et peut-être un moyen de surmonter ce problème?

merci, p.

+0

Je voudrais ajouter + dix à cette question pour l'exemple de code que vous avez fourni parce que j'ai le même problème mais de plus je dois changer dynamiquement le doc tout en le rendant. J'ai passé de nombreuses heures à tester le code du voleur, mais ce n'est que lorsque j'ai vu votre extrait que je me suis rendu compte qu'il serait beaucoup plus facile de m'amuser avec itext. Je vous remercie. – sdespolit

Répondre

4

Je ne suis pas un expert, mais si votre police n'a pas de variante en gras, alors Flying Saucer peut simplement "ne pas le mettre en gras". Lorsque vous mettez en gras la police par programmation, vous utilisez une classe de police qui pourrait être (en coulisses) rendre la police plus "audacieuse" en utilisant un mécanisme interne. Un bon exemple dans le monde réel est Photoshop: si vous avez une police qui n'a pas une variété audacieuse, vous ne pouvez pas la mettre en gras, mais Photoshop a une option "simulé gras" qui va aller et épaissir les symboles sans vraiment utiliser un "vrai" visage gras.

Un bon moyen de diagnostiquer ceci est de changer la police que vous utilisez dans Flying Saucer mais garder le même document. Si la nouvelle police n'est pas non plus en gras, le problème est moins d'actualité. Si cela devient gras, c'est parce qu'il n'y a pas de version en gras de votre police.

Espérons que cela aide.

+0

soucoupe volante utilise itext pour générer le pdf. Je supposais que la soucoupe volante utiliserait le même mécanisme (ie font.setStyle) pour appliquer la transformation 'bold'. clairement je me trompe, et je ne conteste pas votre réponse en fait je suis d'accord 100% mais je cherche une solution pas une explication. mon prochain arrêt passe par le code source de la soucoupe volante, mais je paierais 50 rep pour quelqu'un d'autre pour le faire;) merci quand même. – pstanton

+0

J'ai trouvé un fichier ttf qui a fourni la variante en gras et en ajoutant cela a résolu mon problème. – pstanton

2

Si votre ancien code iText peut produire une police en gras, il semble probable que le fichier TTF contienne effectivement une variante en gras, même si Flying Saucer ne l'utilise pas. Vous pouvez utiliser la variante en gras dans Flying Saucer si vous spécifiez le nom exact de la variante en gras dans votre feuille de style CSS.

Par exemple:

<style type="text/css"> 
* {font-family:myfont;} 
b {font-family:"myfont bold";} 
</style> 

Vous devriez être en mesure de trouver le nom exact de la police en ouvrant un fichier PDF généré par le code existant dans Adobe Reader. Allez dans Fichier -> Propriétés ... -> Polices pour voir une liste de toutes les polices dans le document. Il y aura probablement une entrée "myfont" ainsi qu'une entrée "myfont bold", ou similaire. Utilisez ce dernier dans votre feuille de style.

Questions connexes