如何在不调整图像大小的情况下通过 docx4j 将图像注入 Word 模板

How to inject images into a Word template via docx4j without getting them resized

我的程序将文本和图片插入到 Word 模板中。这通过内容控制数据绑定非常有效(感谢 docx4j 和 Content-Control-Toolkit)。

我的问题是,图像在注入后会调整大小。我真正想要的是杰森在这里描述的行为:http://www.docx4java.org/forums/data-binding-java-f16/picture-content-control-size-t634.html

The current behaviour is to just let it be whatever its natural size is (at a given dpi), unless that is greater than page width, in which case it is scaled down.

据此 post,docx4j 的行为已更改,因此图片始终符合内容控件的大小比例。 是否有可能恢复 "old" 行为?我必须自己做,还是 Jason 写到的开关已经实现了?

如对How to force Docx4j to refresh a replaced image file的回答所述,图片的大小存储在主文档部分。目前,我只使用 XPath 在自定义 XML 部分设置内容。如果有可能在不直接接触文档 XML 的情况下获得我需要的东西,我真的很希望这样做。在 Word 中打开文档后设置大小的宏不适合我。

首先要注意的是,现在我们更喜欢在富文本内容控件中显示图片,而不是图片内容控件。

这是因为 Word 限制了您 "float" 图片内容控件的能力。

对此的处理由包含 'od:Handler=picture' 的 w:tag 触发:datastorage/bind.xslt#L165

基本行为是,如果 w:sdtContent 包含现有的 w:drawing/wp:inline/a:graphic 然后重用它,因此使用任何这样配置的格式。

但是对于不包含 a:blip 的 "legacy" 图片内容控件(这将是什么时候?),调用 xpathInjectImage 并传入 wp:extent(参见 bind.xslt#L240).

在第 1143 行,if (cxl==0 || cyl==0) // 让 BPAI 计算大小

因此,如果您希望图像保持自然大小,您可以尝试删除 bind.xslt#L212

处的 when 子句

顺便说一句,我们也可以绑定转义的XHTML。但是在那里,我们努力使任何图像不仅适合页面宽度,而且如果在 table 单元格中,也适合它。