如何自动执行“粘贴为 JPEG”操作以在 Word 中粘贴图片,从而减小整个文档的大小?

如何自动执行“粘贴为 JPEG”操作以在 Word 中粘贴图片,从而减小整个文档的大小?

我在 Word 2013 中准备文档。每份文档都有 100 多页,其中包括 50 多页表格格式的照片。表格有三列:

序号...照片...描述

每页大约有 3 张照片。

我使用 ImageResizer (Microsoft powertoy) 将原始图像的大小调整为 320 x 480 像素。这样做会将图片的大小从 3 MB 减小到大约 100 KB。

当我在文档中复制并粘贴大约 200 张图片时,文件大小将在 10 MB 到 50 MB 之间。但如果我对每张图片进行剪切 + 选择性粘贴 + 粘贴为 JPEG,文件大小将减少到不到 5 MB。

有没有办法让我从文件夹中复制图片并直接粘贴为 JPEG?或者更好的是,有没有办法批量编辑文档中的所有图片,以便一次性将它们全部粘贴为 jpeg?

由于我花费了大量的时间和精力来选择每张图片并将其粘贴为 jpeg,因此这方面的任何提示都将有很大帮助。

编辑:我应该说一下,在技术方面我完全是新手。我可以点击一系列按钮等,但代码和其他东西我完全不懂。

答案1

您是否尝试过-Compress pictures下的选项?在对话框中,您可以选择不同的压缩量,并且有一个复选框。取消选中此选项,文档中的所有图像都将被压缩。 有关图像和更多信息,请参阅Picture toolsFormatApply only to this picture
文章(“压缩图片”,几乎在底部)。

答案2

所以...这里是另一个有点 hacky 的解决方案:

  1. 将您的文档保存为 docx 格式(如果您有这种格式,请转到步骤 2);
  2. 将文档的扩展名更改为 zip(前面可以保留 docx,例如你的文档名称.docx.zip);如果您愿意,您可以在执行任何操作之前创建原始文档的备份;
  3. tmp使用 WinRAR 或其他程序将 zip 文件的内容解压到一个文件夹(我们来命名它);
  4. 在您解压 zip 的文件夹中,查找一个名为的文件夹word
  5. word文件夹中,有一个media文件夹,里面存放着该文档的图片;
  6. 使用您现有的工具对每个 png 图像进行批量转换;
  7. 检查文件夹中是否没有旧的 png 图像(如果将它们留在那里,文件大小会增加而不是减少,但我认为这是明确的);
  8. 如果文件夹中有转换后的 jpg 图像media,请返回文件夹word,然后转到_rels
  9. 在文件夹中,使用记事本或您最喜欢的文本编辑器(Sublime Text、Notepad++ 等)_rels打开文件;document.xml.rels
  10. 在文件中,有不同的Relationship节点,在需要的属性中将所有“png”扩展名替换为“jpg” Target(例如 Target="media/image4.png" -> Target="media/image4.jpg";大多数编辑器都有一个全部替换在他们的选择查找/替换对话);
  11. 保存编辑后的文件,返回根文件夹(tmp),全选,将其压缩回 zip 文件(重要提示:不要包含tmp文件夹,只包含其内容!,zip 文件应该看起来像原始文件 - 从 docx 重命名 - zip 文件);
  12. 重命名新的zip 文件转换为 docx (例如你的文档名称.docx),你就完成了!:)


可能有更简单的方法可以做到这一点,但这应该可行。如果我有更多时间,我会创建一个工具来以编程方式完成所有这些工作,有时它也对我有用...或者网上有这样的工具,我不知道。(我还没有遇到过这样的事情。)

答案3

您可以创建一个新的启用宏的模板。在“开发人员”选项卡上(您可能需要自定义功能区以使其可见 - 默认情况下不显示)。然后单击 Visual Basic 按钮。这将带您进入 VBA 编辑器。插入一个新模块,并将以下宏代码复制并粘贴到模块中。保存并关闭。将您的 .dotm 文件保存到 Word Startup 文件夹中,以便所有文档都可以访问它。将包含照片的文档作为活动打开的文档,按 Alt F8 并从列表中选择宏(您可能将其从“测试”重命名)。

宏代码:

Sub test()
Dim shp As InlineShape
If ActiveDocument.InlineShapes.Count = 0 Then Exit Sub
For i = ActiveDocument.InlineShapes.Count To 1 Step -1
   Set shp = ActiveDocument.InlineShapes(i)
    If shp.Type = wdInlineShapePicture Then
        shp.Select
        Selection.Cut
        Selection.PasteSpecial Link:=False, DataType:=15, Placement:=wdInLine, _
        DisplayAsIcon:=False
    End If
Next
End Sub

相关内容