2010-11-23 37 views
3

J'ai un grand nombre de documents XML qui sont créés dans docbook et, par le biais de maven, sont publiés à la fois dans un formulaire html pour et un formulaire pdf. Les générations fonctionnent bien, et le HTML a l'air bien. Le problème que j'ai est dans la taille des images dans la version pdf. Les images sont une collection de captures d'écran, certaines sont en plein écran, certaines sur la largeur et la hauteur de 2/3rds, et d'autres sont de petites boîtes de recherche. Il est évident que j'ai besoin de refactoriser massivement les attributs de l'imagedata. Je me demandais à quoi devrais-je le refactoriser? Je suis à la recherche d'un moyen de créer jusqu'à 4 'types' d'images et de les faire respecter. Un exemple d'une image ressemble à ceci:XSL-fo Problème de taille d'image avec pdfs

<section><title>Screenshot</title> 
    <mediaobject> 
     <imageobject> 
     <imagedata fileref="./views/screenshots/editNote.png" scalefit="0" width="100%"/> 
     </imageobject> 
    </mediaobject> 
    </section> 

Et il ne fonctionne que pour certains de mes tailles de capture d'écran.

J'ai joué avec scalefit, width, et contentwidth/contentheight et ils semblent résoudre différentes parties du problème. Dois-je aussi regarder dans les rétroviseurs?

REMARQUE: Il n'y a pas de risque de rupture de la génération html puisque je peux activer les 'propriétés d'exclusion' dans le XSL.

+0

Ace, ce n'est pas réel clairement ce que vous demandez. Vous semblez parler des attributs XSL-FO scale-to-fit, content-width, etc.? J'ai tagué votre question avec xsl-fo parce que je pense que c'est de cela que vous parlez. Pouvez-vous préciser ce que vous entendez par "* refactor * des attributs"? – LarsH

+0

J'ai besoin de refactoriser l'original docbook xml, et le xsl-fo une fois que je sais comment je dois faire des images correctement. – Ace

Répondre

1

Vous avez @scalefit="0" essayer avec @scalefit="1":

<section><title>Screenshot</title> 
    <mediaobject> 
     <imageobject> 
     <imagedata fileref="./views/screenshots/editNote.png" 
        scalefit="1" width="100%" contentdept="100%"/> 
     </imageobject> 
    </mediaobject> 
    </section> 

Voici quelques conseils pour l'utilisation des attributs mise à l'échelle.

  • à l'échelle d'un graphique à une largeur donnée, régler le contentWidth dans l'élément imagedata à cette taille, par exemple contentWidth = « 8.5cm ». Si vous spécifiez un nombre sans unités, il est supposé être pixels.

  • à l'échelle d'un graphique en fonction de la largeur disponible en sortie imprimée, utiliser width = "100%" et scalefit = "1" attributs. Pour le texte en retrait comme dans une liste , la largeur disponible est comprise entre le retrait actuel et la marge de droite.

  • Pour conserver une image pour la sortie imprimée à sa taille normale, à moins qu'il ne soit trop grand pour adapter à la largeur disponible, en auquel cas rétractable pour l'adapter, utiliser scalefit = « 1 », width = "100 % ", et contentdepth =" 100% "attributs.

...

  • Certains processeurs XSL-FO ne prennent pas en charge tous ces attributs. Vous aurez peut-être besoin de pour expérimenter pour voir ce qui fonctionne. Pour l'exemple , FOP version 0.20.5 traite largeur comme si elle était contentwidth et ignore tout véritable attribut de largeur de contenu .

http://www.sagehill.net/docbookxsl/ImageSizing.html

+0

L'ajout de scalefit = "1" width = "100%" contentdept = "100%" fonctionne pour 90% de mes écrans. J'ai encore quelques-uns qui vont au-delà de l'en-tête de la page ou au-delà du pied de page. Que dois-je faire pour ceux-là? Ils semblent avoir une hauteur excessive, mais je veux toujours qu'ils évoluent dans la page – Ace

4

Ce n'est pas strictement ce que vous demandez, mais avez-vous normalisé les paramètres DPI dans vos fichiers image? Bien qu'ils soient ignorés dans le rendu HTML, ils sont cruciaux dans le rendu docbook-> PDF.

Lorsque je me suis occupé de cela par le passé, la réparation du DPI m'a laissé sans besoin de modifier davantage la source DocBook.

+0

Est-ce aussi simple que d'ajouter cet attribut à mon imagedata? – Ace

+1

@Ace, les fichiers PNG intègrent des informations DPI. Vous pouvez manipuler ces informations par exemple avec des programmes de la suite ImageMagick. (Ainsi, par exemple, si vous avez un PNG de 800 px de large que vous voulez présenter comme une image de 5 pouces de large, vous pouvez simplement modifier les informations DPI en conséquence 'mogrify -density 160 -units PixelsPerInch image.png'.) –

+0

Il semble que toutes mes captures d'écran ont un 96 * 96 dpi. Ainsi, certaines des images plus petites semblent larges et grandes étant mal étirées et les prises de vue en plein écran semblent être sur pixellisées. Pourquoi ces images n'apparaissent-elles pas comme quand je les ouvre dans MS Paint ou quelque chose comme ça? – Ace