XSL-fo与pdf的图像大小问题

3

我有大量使用docbook创建的XML文档,通过maven发布为HTML和PDF格式。生成工作正常,HTML看起来也不错。但是PDF版本中图片大小存在问题。这些图片包括全屏截图、大约2/3宽高比的截图以及小型搜索框等。很明显,我需要对imagedata的属性进行大规模重构。我想知道应该如何进行重构?我希望能够创建最多4种“类型”图像,并强制执行它们自己的大小。以下是一个示例图片:

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

它只适用于我的某些截图大小。

我尝试了scalefit、width和contentwidth/contentheight,它们似乎解决了问题的不同部分。我应该考虑查看视口吗?

注意:我可以在XSL中打开“排除属性”,因此不必担心破坏HTML生成。


Ace,你的问题不是很清楚。你似乎在谈论XSL-FO属性scale-to-fit、content-width等?我给你的问题打了xsl-fo标签,因为我认为这就是你所谈论的。你能详细说明一下你所说的“属性重构”是什么意思吗? - LarsH
我需要重构原始的DocBook XML和XSL-FO,一旦我知道如何正确处理图像。 - Ace
2个回答

4

虽然这不是你要求的严格意义上的回答,但是你是否已经将图像文件的DPI设置标准化了呢?尽管在HTML渲染中被忽略,但在docbook->PDF渲染中至关重要。

过去我处理类似问题时,修复DPI后就没有必要进一步调整DocBook源代码了。


将该属性添加到我的imagedata中就像这样简单吗? - Ace
1
@Ace,PNG文件中嵌入了DPI信息。您可以使用ImageMagick套件中的程序来操作该信息。例如,如果您有一个800像素宽的PNG图像,想要将其呈现为5英寸宽的图像,只需通过“mogrify -density 160 -units PixelsPerInch image.png”相应地更改DPI信息即可。 - Jukka Matilainen
似乎我的所有截图都是96*96 dpi。因此,一些较小的图像看起来宽而高,被严重拉伸,全屏截图似乎过度像素化。为什么这些图像不能像在MS Paint或其他软件中打开时那样呈现? - Ace

1

你有@scalefit="0"尝试使用@scalefit="1"

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

以下是使用缩放属性的一些指导。
- 要将图形缩放到给定的宽度,请在imagedata元素中设置contentwidth为该大小,例如contentwidth="8.5cm"。如果您指定一个没有单位的数字,则默认为像素。 - 要将图形缩放以适应打印输出中的可用宽度,请使用width="100%"和scalefit="1"属性。对于缩进文本(例如列表),可用宽度从当前缩进到右边距。 - 要保持图形在打印输出中以其自然大小显示,除非它太大而无法适应可用宽度,在这种情况下将其缩小以适应,请使用scalefit="1"、width="100%"和contentdepth="100%"属性。
一些XSL-FO处理器不支持所有这些属性。您可能需要进行实验以查看哪些属性有效。例如,FOP版本0.20.5将width视为contentwidth并忽略任何真正的contentwidth属性。

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


将scalefit="1" width="100%" contentdept="100%"添加到代码中可以适用于90%的屏幕。但仍有一些屏幕会超出页面页眉或页脚。对于这些屏幕,我该怎么办?它们似乎具有过多的高度,但我仍希望它们能够缩放到页面中。 - Ace

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接