将图像添加到Word文档,例如拖放

时间:2017-08-09 07:19:50

标签: ms-word vsto transparency

我需要能够通过我的.Net(VB)VSTO Word AddIn在Word文档中插入图像。

问题是我需要插入它,所以它的结果与用户使用'Drag&拖放'插入图像,而不是'插入图片'工具栏按钮。

通常我会这样做:

wdRange.InlineShapes.AddPicture(imagePath, LinkToFile:=False, SaveWithDocument:=True)

但这会复制“插入图片”按钮的行为。

我需要复制拖拽的原因丢弃方法,是在某些情况下打印时图片的反应不同。

我可以通过在文档标题中插入一个大的彩色矩形并将图像放在文档正文中来复制它,因此它最终会出现在彩色矩形的顶部。 如果插入的图像具有透明度(就像许多徽标一样),在某些情况下,在打印时,它将以深色背景结束,而不是完全透明。 (我还没有找到复制问题所需的确切情况,但似乎需要打印机驱动程序的某种组合,无论是PCL还是PS。)

只是为了让调试这个问题变得更加困难,打印到PDF打印机时看不到它,它似乎只出现在纸上。而且只是在一些罕见的配置。它可以在彩色和黑白打印机上发生,包括新打印机(<1年)和旧打印机。

打印时扫描上述场景的示例,在彩色矩形上放置两个图像。 一个图像(深色背景)插入“插入图片”按钮,另一个图像(透明度正确)通过拖动和放大器插入下降。 使用相同的.png文件插入两个图像。 (一个虽然比另一个缩放了一些,但我已经彻底测试过,缩放或移动图像不会影响问题。) Problem example

我在拖动时尝试录制宏。丢弃图像,但没有记录: - \

作为替代解决方案,也许可以更改插入图像的某些属性,以确保其行为类似于通过拖动和插入插入的图像。下降? 那是完全可以接受的!

注意:我无法在内部提供的8台打印机中复制此问题,并且只与少数(大型)客户在本地遇到此问题。 因此,测试建议的解决方案可能需要一些时间: - (

更新 事实证明,当使用Drag&amp; amp;时,我只能用正确的透明背景复制图片。从Windows 10下载到Word 2016。 Windows 7生成不同的结果,因此我之前的测试(在Windows 7中进行)无效。

在Word中选择时,两个图像元素(一个通过“插入图片”插入,一个通过“拖放”和“删除”)看起来不同。 错误的图片(“插入图片”)有白色选择标记,如下所示:

enter image description here

右图(从Windows 10拖放)有灰色选择标记,如下所示:

enter image description here

我用于测试的图像在这里('Transparent.gif'。两张图片都是相同的图像文件)

enter image description here

我检查了每个图像的OpenXML标记,它们非常不同。 错误的图片最终会像w:drawing元素一样:

<w:drawing>
    <wp:anchor distT="0" distB="0" distL="114300" distR="114300" simplePos="0" relativeHeight="251662336" behindDoc="0" locked="0" layoutInCell="1" allowOverlap="1">
        <wp:simplePos x="0" y="0"/>
        <wp:positionH relativeFrom="margin">
            <wp:align>left</wp:align>
        </wp:positionH>
        <wp:positionV relativeFrom="paragraph">
            <wp:posOffset>817245</wp:posOffset>
        </wp:positionV>
        <wp:extent cx="3048000" cy="647700"/>
        <wp:effectExtent l="0" t="0" r="0" b="0"/>
        <wp:wrapSquare wrapText="bothSides"/>
        <wp:docPr id="9" name="Billede 9"/>
        <wp:cNvGraphicFramePr>
            <a:graphicFrameLocks xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" noChangeAspect="1"/>
        </wp:cNvGraphicFramePr>
        <a:graphic xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main">
            <a:graphicData uri="http://schemas.openxmlformats.org/drawingml/2006/picture">
                <pic:pic xmlns:pic="http://schemas.openxmlformats.org/drawingml/2006/picture">
                    <pic:nvPicPr>
                        <pic:cNvPr id="9" name="Transparent.gif"/>
                        <pic:cNvPicPr/>
                    </pic:nvPicPr>
                    <pic:blipFill>
                        <a:blip r:embed="rId1">
                            <a:extLst>
                                <a:ext uri="{28A0092B-C50C-407E-A947-70E740481C1C}">
                                    <a14:useLocalDpi xmlns:a14="http://schemas.microsoft.com/office/drawing/2010/main" val="0"/>
                                </a:ext>
                            </a:extLst>
                        </a:blip>
                        <a:stretch>
                            <a:fillRect/>
                        </a:stretch>
                    </pic:blipFill>
                    <pic:spPr>
                        <a:xfrm>
                            <a:off x="0" y="0"/>
                            <a:ext cx="3048000" cy="647700"/>
                        </a:xfrm>
                        <a:prstGeom prst="rect">
                            <a:avLst/>
                        </a:prstGeom>
                    </pic:spPr>
                </pic:pic>
            </a:graphicData>
        </a:graphic>
        <wp14:sizeRelH relativeFrom="page">
            <wp14:pctWidth>0</wp14:pctWidth>
        </wp14:sizeRelH>
        <wp14:sizeRelV relativeFrom="page">
            <wp14:pctHeight>0</wp14:pctHeight>
        </wp14:sizeRelV>
    </wp:anchor>
</w:drawing>

右图最终为v:shape,标记少得多:

<v:shape id="_x0000_s2049" type="#_x0000_t75" style="position:absolute;margin-left:.3pt;margin-top:0;width:240pt;height:51pt;z-index:251661312;mso-position-horizontal:absolute;mso-position-horizontal-relative:text;mso-position-vertical:bottom;mso-position-vertical-relative:text;mso-width-relative:page;mso-height-relative:page">
    <v:imagedata r:id="rId2" o:title="Transparent"/>
    <w10:wrap type="square"/>
</v:shape>

到目前为止,我还无法通过VBA或VB.NET(通过VSTO AddIn)重新创建后者。

如果有人能弄明白,我确信问题已经解决了。

这是我正在使用的示例文档的链接,顶部图片打印正确,底部图片打印背景颜色较深(在某些打印机上,不幸的是不是我的。) Simple-test.docx (所有内容都放在页眉中,因为根据我的测试人员的说法,这可能是一个因素。)

1 个答案:

答案 0 :(得分:1)

要设置<a:noFill/>,您需要设置形状的填充属性。类似于以下内容应该这样做,其中inlShape是设置为插入图像的对象:

inlShape.Fill.ForeColor.RGB = -1
inlShape.Fill.Visible = False

请注意,必须同时设置ForeColor和Visible属性。只设置其中一个将不会产生您需要的结果。