Word:CopyAsPicture方法中的VBA忽略文本大小以及某些字体

Word:CopyAsPicture方法中的VBA忽略文本大小以及某些字体,vba,ms-word,Vba,Ms Word,Word中VBA中的CopySpicture方法(我使用的是Word 2010和2016)是将给定的文本(文档中选择的某些字符串)转换为图片 Microsoft在其教程中提供了以下示例脚本: Sub CopyPasteAsPicture() 'Origin: https://docs.microsoft.com/en-us/office/vba/api/word.selection.copyaspicture ActiveDocument.Content.Select With Sel

Word中VBA中的CopySpicture方法(我使用的是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
为了测试CopySpicture方法,我使用了以下脚本,我在本论坛的一个相关问题中找到了该脚本:

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磅)将在生成的图片中呈现为12磅或类似的大小

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

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

其他信息:

1) 我为什么要这样做?我使用了一些人们通常没有的罕见字体,将它们包含在.docx中也无法可靠地工作。我必须与同事共享这些文档,他们也应该能够看到特殊字体中的字符

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

3) 图片生成也适用于具有剪贴画而非图片的字体(例如,儿童书籍或教科书中使用的特殊字体,用于训练阅读和写作)

4) 在我的例子中,没有图片化的字体(但被一些标准系统字体的图片所取代)是我得到的.otf字体,但我将其转换为.ttf(因为我认为我可以将其包含在文档中,但这也不起作用)到目前为止,我还没有测试它是否能与原始otf兼容,但我对此表示怀疑,因为ttf和otf字体之间还没有问题

问题:

我想了解为什么忽略了字体大小和一些字体

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

.PasteSpecial DataType:=wdPasteMetafilePicture
图元文件图片用于保留字体数据。因此,当在没有该字体的设备上打开文档时,Word将遵循其字体替换规则。我还隐约记得图元文件格式中有一个与字体相关的错误


我建议你和其他人一起玩,看看什么对你最合适。

你让我走上了正确的道路。我测试了所有的数据类型(排除了那些看起来显然不相关的数据类型,比如wdPasteHyperlink和wdPasteHTML)。我的运气都不好(包括wdPasteBitmap、wdPasteDeviceIndependentBitmap、wdPasteShape)。我想放弃,但仅仅是因为固执而受到考验,还有什么?事实上,这给了一个有用的结果,也与我的异国情调的字体。。。。但是,还有一个后续问题:粘贴的图片框具有整页宽度(即使只有一个字母显示)。此框可以通过鼠标手柄调整大小(字母保持大小),但这可能会导致大量工作。因此,问题是:有没有一种方法可以自动使画框适合实际图片的大小?这应该作为一个单独的问题来问。基本上,您需要确定要复制内容的最大宽度,然后将OLE对象设置为该宽度。创建文档时的黄金法则是只使用可以保证所有用户都已安装的字体。我意识到这不是你想听的,但确实如此。您可以联机找到随每个版本一起安装的字体列表。@ChristianGeiselmann使用OLE对象的问题是,打开文档的所有计算机上都需要OLE服务器。OLE服务器负责显示嵌入式OLE对象的内容。在这种情况下,如果生成的对象是嵌入到另一个Word文档中的Word文档,则它可能会在Word中打开文档。但是,如果字体在目标计算机上不可用,收件人可能仍然看不到您希望/期望的内容。屏幕截图可能是你最好的选择。。。