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