在Microsoft Word中将文本转换为图像

时间:2012-01-17 00:19:46

标签: vba word-vba

我有一本用Microsoft Word编写的大书,想要创建一个宏,它将使用预定义的样式查找所有文本并将该文本转换为内嵌图像。本文将使用阿拉伯文,一般不超过4-5行。这可能吗?

更新:这是一个显示我所指的内容的例子:

enter image description here

我想用图像替换阿拉伯语中的整行(就好像我将此附加图像裁剪为仅包含阿拉伯语,然后用图像替换阿拉伯语中的行)。

我希望宏或脚本执行此操作的原因是因为有数百个这样的行并且逐个更新它们很麻烦,以后会使修改变得困难。

UPDATE2:我在这里找到了一个有趣的选项:http://windowssecrets.com/forums/showthread.php/31344-Convert-Text-to-an-Image-of-Text-in-VBA-(Office-2000-Sr1a)

看起来你可以剪切一段文字,然后将“选择性粘贴”作为图像。因此,如果有一种方法可以自动化那可能有用的方法。

3 个答案:

答案 0 :(得分:1)

在开始这些说明之前,请按Microsoft Word宏编辑器中的记录,以便查看VBA代码。

我想知道如果将docx文件转换为.rtf(富文本格式)并用图像替换该行会更容易吗?转到文件>另存为..>将其命名为“old.rtf”,然后将该行替换为图像并再次另存为..并将其命名为“new.rtf”,然后下载Beyond Compare或您喜欢的差异程序以查看发生了什么。如果您选择,应该很容易以编程方式执行此操作。我认为使用文本工作比微软的二进制格式更容易,除非你能找到一个好的库来修改他们的doc或docx格式。

答案 1 :(得分:1)

这不是答案,但我希望它会成为社区的答案。目前,它正在探索解决问题所需的内容。

我从讨论中知道,当这个问题发布在超级用户身上时,阿卜杜拉希望在Kindle上发表他的书。因此,问题在于如何获得英文和阿拉伯文的文件,以便作为电子书出版。

Kindle不支持阿拉伯语。它支持的语言数量正在缓慢增加,但没有证据表明亚马逊计划在可预见的未来增加阿拉伯语。

亚马逊电子书背后的格式是HTML的缩减版本。如果将包含阿拉伯字母的Word文档导出为HTML,则阿拉伯字母将作为字符实体包含在内;例如:“ﭐ &安培; #amp; 64337; &安培;#64338; &安培;#64339;”。将原始Word或HTML版本导入Kindle会导致前导位被丢弃,因此这些字符显示为P,Q,R和S而不是“ٱٱٻٻ”(Alef Wasla孤立形式,Alef Wasla最终形式,Beeh Wasla分离形式和Beeh Wasla最终形式)。

我尝试过Abdullah的想法,即在PNG文件中保存一些阿拉伯字母并创建包含<p> … </p> <img src= “Arabic.png” > <p> … </p>的HTML文件。我的Kindle 2上的这个文件的外观是完全可以接受的,所以这有可能成为一个解决方案。问题是:如何进行必要的转换?

我们需要从Word文档或其HTML等效文件中提取每个阿拉伯字符串,并将其导入到可以将它们转换为PNG文件的程序中。

我知道自动执行此操作的唯一方法是将每个字符串复制到PowerPoint中的幻灯片。使用PowerPoint的SaveAs选项,可以将每张幻灯片另存为单独的PNG文件。幻灯片按顺序命名为:SLIDE1.PNG,SLIDE2.PNG,SLIDE3.PNG等,这将允许宏将结果与原始字符串相关联。然后可以用图像元素替换HTML文件中的阿拉伯字符串。这些都不会太难以自动化,但幻灯片的问题都是PowerPoint页面的大小。页面可以做得很小,但我们需要的是将每个幻灯片裁剪为比幻灯片的文本更大。我想不出任何自动化裁剪的方法。

有没有人比将每个阿拉伯语短语转换为PNG文件更好?

我一直在寻找具有某种命令行界面的PNG编辑器,但是找不到比使用PowerPoint更容易的东西。有谁知道PowerPoint的替代品?

有没有人有任何关于自动裁剪每张图片的建议?当一个字符串被放置在PowerPoint幻灯片中时,可以将其宽度设置为6.5厘米(在我的Kindle上看起来很好)并获得由PowerPoint确定的高度。如果有人知道如何使用它,可以保存以供以后使用。

实施解决方案

在提出改进上述方法的任何建议之前,下面概述了我将如何实施它。

我不会尝试处理Word文档。我会将其保存为Web Page, Filtered HTML文件,这是创建Kindle电子书的必要步骤,并进行处理。

在从我的测试文档创建的HTML文件中,阿拉伯语短语如下:

<p class="MsoNormal"></p>
<p class="MsoNormal" align="center" style="text-align:center"><span dir="RTL"
style="font-size:24.0pt;font-family:Arial">
&amp;#64336;&amp;#64337;&amp;#64338;&amp;#64339;&amp;#64340;&amp;#64341;
&amp;#64342;&amp;#64343;&amp;#65153;&amp;#65154;&amp;#65276;&amp;#65275;
&amp;#65274;&amp;#65273;&amp;#65246;&amp;#65226;&amp;#65227;&amp;#65228;
</span><span style="font-size:24.0pt"></span></p>
<p class="MsoNormal"></p>
<p class="MsoNormal"></p>

我认为阿卜杜拉的文件会产生类似的结果。注1:以上是阿拉伯字母的随机集合。注2:它们在阅读顺序中从左到右保持,即使在显示或打印时,它们是从右向左阅读。

整个这个区块必须替换为:

<br><imc src="xxxx.png"><br>

其中文件xxxx.png包含阿拉伯文字的图像。

文件名,例如xxxx.png,可能是系统性的(A001.png,A002.png,...),但我原本认为将该短语的前十个或二十个字符音译为阿拉伯语到英语字母和使用结果,带有数字后缀,因为文件名会更方便。

我会保留在Excel工作表中管理流程所需的记录。我会将VBA代码放在同一个工作簿中。

我设想的转化过程中的步骤是:

  1. VBA宏从最新的HTML文件中提取阿拉伯字符串,并将新字符串添加到Excel工作表中。 (稍后将详细介绍Excel工作表。)
  2. 用于创建PowerPoint文件的VBA宏,每个新字符串一张幻灯片,并使用PNG格式的SaveAs在放弃PowerPoint文件之前为每张幻灯片创建一个PNG文件。
  3. 人工裁剪每个PNG文件。 (似乎没有办法自动裁剪,因此可以通过使用Excel工作表中的数据来最小化此任务。)
  4. VBA宏将每张幻灯片从SLIDEnnn.PNG重命名为其永久名称,并在Excel工作表中记录永久名称。
  5. VBA宏通过将包含阿拉伯语短语的块替换为相应的HTML IMG元素来更新最新的HTML文件。
  6. Excel工作表需要两列:阿拉伯语短语和PNG文件名。如果工作表在步骤2和步骤4之间有任何分类风险,我们可能还需要一个序列号。

    宏1将从HTML文件中提取阿拉伯语短语,在工作表中查找该短语的列表,如果该短语尚不存在,则在底部添加短语。

    宏2将在工作表中查找没有PNG文件名的短语。这些新短语是要写入PowerPoint演示文稿的短语。也就是说,一个短语只会进入此过程一次。

    任务3,裁剪每个PNG文件,将是一件痛苦的事。我只能说每个短语只会出现一次。

    Macro 4将假设SLIDE001.PNG,SLIDE002.PNG,...在工作表中没有PNG文件的短语序列中。如果这可能不正确(因为工作表已经排序),我们将需要序列号或保留PowerPoint文件。宏将为每个新短语指定一个唯一的名称,在工作表中记录此名称并重命名PNG文件。

    宏5使用工作表的内容创建最新HTML文件的新副本,以确定要用哪个PNG文件替换哪个短语。

    这个过程并不理想,但它会达到预期的效果,并且没有明显的并发症。有任何改进建议吗?

答案 2 :(得分:0)

Sub CopySelPasteAsPicture()
' Take a picture of a selection and paste it at the
' document end
    With Selection
        .CopyAsPicture
    End With
    ActiveDocument.Content.Select
    With Selection
        .Collapse Direction:=wdCollapseEnd
        .TypeParagraph
        .TypeParagraph
        .PasteSpecial DataType:=wdPasteMetafilePicture
    End With
End Sub