【问题标题】:VBA in Word: CopyAsPicture method ignores text size as well as some font facesWord 中的 VBA:CopyAsPicture 方法会忽略文本大小以及某些字体
【发布时间】:2019-03-07 01:15:54
【问题描述】:

Word 中 VBA 中的 CopyAsPicture 方法(我使用的是 Word 2010 和 2016)是将给定的一段文本(在文档中选择的一些字符串)转换为图片。

Microsoft 在其教程中提供了此示例脚本:

Sub CopyPasteAsPicture()

'Origin: https://docs.microsoft.com/en-us/office/vba/api/word.selection.copyaspicture

 ActiveDocument.Content.Select
  With Selection
   .CopyAsPicture
   .Collapse Direction:=wdCollapseEnd
   .PasteSpecial DataType:=wdPasteMetafilePicture
 End With
End Sub

为了测试 CopyAsPicture 方法,我使用了以下脚本,我在本论坛的相关问题中找到了该脚本:

Sub CopySelPasteAsPicture()
' Take a picture of a selection and paste it at the document end

' Source: https://stackoverflow.com/questions/8888145/convert-text-to-image-in-microsoft-word

With Selection
    .CopyAsPicture
End With

ActiveDocument.Content.Select
With Selection
    .Collapse Direction:=wdCollapseEnd
    .TypeParagraph
    .TypeParagraph
    .PasteSpecial DataType:=wdPasteMetafilePicture
End With

End Sub 

我对此进行了测试,但发现有两个问题:

1) 文本大小被忽略。文本大小,比如 28 pt 将在生成的图片中呈现为 12 pt 或类似的东西

2) 并非所有字体都被识别。我有一些特殊的字体(在 otf 和 ttf 中),我想用这种方式来描绘。这些字体被忽略,取而代之的是标准字体(Times New Roman 或其他)的图片。

我在 Microsoft 的 VBA 文档中找不到这些问题的帮助。

其他信息:

1) 我为什么要这样做?我使用了一些人们通常没有的稀有字体,并且将它们包含在 .docx 中也不能可靠地工作。我要和同事分享这些文件,他们应该也能看到特殊字体的字符。

2) 图片生成适用于标准字体的西里尔字符。到目前为止还不错。

3) 图片生成也适用于具有剪贴画而不是图片的字体(这种特殊字体用于儿童书籍或教科书,以供人们训练阅读和写作)

4) 在我的情况下没有被图片化的字体(但被一些标准系统字体的图片取代)是我作为 .otf 获得的字体,但我将其转换为 .ttf(因为我认为我可以包含到文件中,但这也不起作用)。 - 到目前为止,我没有测试它是否可以与原始 otf 一起使用,但我对此表示怀疑,因为到目前为止 ttf 与 otf 字体没有问题。

问题:

我想了解为什么字体大小和某些字体会被忽略。

当然,如何解决这个问题的想法也很受欢迎。

【问题讨论】:

    标签: vba ms-word


    【解决方案1】:
    .PasteSpecial DataType:=wdPasteMetafilePicture
    

    元文件图片旨在保留字体数据。因此,当在没有该字体的设备上打开文档时,Word 将遵循其字体替换规则。我也隐约记得图元文件格式有一个字体相关的bug。

    我建议你和其他paste data types 一起玩,看看什么最适合你。

    【讨论】:

    • 你让我走对了。我测试了所有的数据类型(排除了那些看起来明显不相关的数据类型,例如 wdPasteHyperlink 和 wdPasteHTML)。我对所有这些都倒霉(包括 wdPasteBitmap、wdPasteDeviceIndependentBitmap、wdPasteShape)。我想放弃但仅仅因为固执而测试了 wdPasteOLEObject 和什么?事实上,这也为我的异国字体提供了可用的结果。
    • ... 但是,有一个后续问题:粘贴的图片框是整页宽度(即使只显示一个字母)。这个盒子可以通过它的鼠标手柄来调整大小(字母保持它们的大小),但这可能会导致很多工作。因此问题:有没有办法自动使相框适合实际图片的大小?
    • 这真的应该作为一个单独的问题来问。本质上,您需要确定要复制的内容的最大宽度,然后将 OLE 对象设置为该宽度。
    • 创建文档时的黄金法则是只使用可以保证所有用户都已安装的字体。我意识到这不是你想听到的,但它确实存在。您可以在线找到每个版本安装的字体列表。
    • @ChristianGeiselmann 使用 OLE 对象的问题是在打开文档的所有机器上都需要 OLE 服务器。 OLE 服务器负责显示嵌入的 OLE 对象的内容。在这种情况下,如果生成的对象是嵌入在另一个 Word 文档中的 Word 文档,它可能会起作用,因为该文档将在 Word 中打开。但是,如果字体在目标机器上不可用,收件人可能仍然看不到您希望/期望的内容。屏幕截图可能是您最好的选择...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-10
    • 2011-10-24
    • 1970-01-01
    相关资源
    最近更新 更多