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

时间:2019-03-05 19:16:08

标签: vba ms-word

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

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磅的文本将在结果图片中显示为12磅或类似的图像

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

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

其他信息:

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

2)图片生成使用标准字体的西里尔字母进行。到目前为止很好。

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

4)在我的情况下,没有被图形化的字体(但被某些标准系统字体的图片代替)是我以.otf格式获得的字体,但我将其转换为.ttf(因为我认为自己可以然后包括进入文档,但这也不起作用)。 -到目前为止,我没有测试它是否可以与原始otf一起使用,但是我对此表示怀疑,因为到目前为止,ttf和otf字体都没有问题。

问题:

我想了解为什么字体大小和某些字体。

当然,也欢迎提出解决方案的想法。

1 个答案:

答案 0 :(得分:1)

.PasteSpecial DataType:=wdPasteMetafilePicture

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

我建议您与其他paste data types一起玩,看看哪种最适合您。