我有一个模板,其中我试图将图片的来源从图像1更改为图像2 - 但我希望图像2保持其上传到服务器的原始大小。(我想要它在图像1的位置,但它自己的尺寸。)
要做到这一点,我想我需要使用adjust
参数 - 我试过了。 adjust=100%
的说明是“将图片调整为与原始尺寸成比例”。 - 这听起来像我需要做的。
但是,在我的docx输出中,这似乎将图像大小设置为页面宽度的100%,而不是与图像大小相关。 (在单词图像属性中,它显示我的图像为208%,所以我认为它与我的文件无关!)
这是opentbs中的错误,还是我误解了文档?如果是这样,我应该怎么做,或者其他任何事情都可以解决?我试图完全不使用adjust
,但这似乎与adjust=inside
具有相同的行为 - 我认为这是默认值。
正常感谢一个伟大的工具!
编辑:错误导致标记在下面。我发现这个问题在从零开始时可以重现,并且只有doc中的图像。 Word 2010,OpenTBS 1.8。
[onshow.logo;ope=changepic;tagpos=after;adjust=100%]
答案 0 :(得分:1)
解决方法:
这取决于您是使用新的(.docx)还是旧的(.doc)文档样式。如果您使用较新的样式,我不确定您是否可以在不将标记直接放入XML的情况下更改图像大小。较旧的(VML,我相信)样式使用<v:shape>
来描述图片而不是<pic:pic>
。使用v:shape
,您可以将CSS样式的字符串组合在一起,该字符串描述图像的大小等。类似的东西:
$imgStyle = "position:absolute;left:0;top:0;width:800;height:600"
然后,您的changepic
标记旁边只有一个标记;类似的东西:
[imgStyle;att=v:shape#style]
较新的样式不使用这样的样式字符串来定义和定位图像,pic:pic
元素中充满了描述图像的嵌套标记,因此很难获得详细信息(尽管您当然可以尝试)。我最终为我的图像切换创建了一个子模板,因为我的模板是新格式,兼容旧格式(所以我必须保留两个图像块)。这允许我直接为图像维度维护XML,但仍然可以在Word中编辑我的主模板。我只是在我的主模板中使用了一个包含子模板的标签,如:
[LineItem.template;block=w:r;file='img.xml']
分离手动控制的XML允许我在Word中编辑主模板而不会损坏真正的自定义部件。但是,使用这种技术,你可能会遇到subtemplate中onload / onshow标签的问题 - 我在子模板中更改的所有内容都由一个块控制。
答案 1 :(得分:1)
问题是由TbsPicAdjust()
函数引起的,因为php的getimagesize()
函数正在返回,期望图像的尺寸以点而不是像素提供。
通过将TbsPicGetDim_OpenXML_dml()
函数中的两个固定系数替换为9,525,而不是原始编码的12,700来解决。 (如果尺寸是以点为单位而不是像素,那么这将是一个合适的值。)
经过一些研究,从我所看到的情况来看,getimagesize()
总是返回一个像素而不是点的大小,所以在我看来这可能是一个潜在的错误?
系数的额外来源,结合个人计算:http://openxmldeveloper.org/discussions/formats/f/15/p/396/933.aspx