>我有一个模板,我正在尝试将图片的来源从图像 1 更改为图像 2 - 但我希望图像 2 保持上传到服务器的原始大小。(我希望它位于图像 1 的位置,但它有自己的尺寸。
为此,我认为我需要使用adjust
参数 - 我已经尝试过了。adjust=100%
的描述是"图片调整为与原始大小成比例"——这听起来像是我需要做的。
但是,在我的docx输出中,这似乎将图像大小设置为页面宽度的100%,而不是与图像大小有关。(在单词图像属性中,它显示我的图像为 208%,所以我认为它与我的文件无关!
这是 opentbs 中的错误,还是我误解了文档?如果是这样,我应该怎么做,否则,任何人都可以变通吗?我尝试根本不使用adjust
,但是这似乎与adjust=inside
具有相同的行为 - 我认为这是默认设置。
正常感谢一个很棒的工具!
编辑:导致错误标记如下。我发现这个问题在从零开始时是可以重现的,并且只有单词文档中的图像。Word 2010,OpenTBS 1.8。
[onshow.logo;ope=changepic;tagpos=after;adjust=100%]
问题是由TbsPicAdjust()
函数引起的,该函数期望图像的尺寸以点而不是像素为单位提供,因为 PHP 的getimagesize()
函数正在返回。
通过将TbsPicGetDim_OpenXML_dml()
函数中的两个固定系数替换为 9,525 来解决,而不是最初编码的 12,700。(如果尺寸以磅为单位,而不是像素,这将是一个合适的值。
经过一些研究,从我所看到的,getimagesize()
总是以像素而不是点为单位返回大小,所以在我看来这可能是一个潜在的错误?
系数的其他来源,结合个人计算:http://openxmldeveloper.org/discussions/formats/f/15/p/396/933.aspx
解决方法:
这取决于您使用的是新 (.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中编辑主模板,而不会损坏真正的自定义部分。但是,使用这种技术,您可能会在子模板中的onload/onshow标签上遇到一些问题-我在子模板中更改的所有内容都由块控制。