最近需要批量打印巨量word文档,在网上找了很多教程,都不好用。问题主要集中在无法设置打印机的属性,因此自己研究了一个方法来批量打印word文档。
如果需要同时打印多份word文档,通常情况下,可以同时选中这些文件,然后点击鼠标右键,点击打印,即可同时打印多份文档。但是这样做有个问题在于,无法对打印机进行设置,比如设置打印单面/双面,或者纸张横向纵向等参数。
这里采用“曲线救国”的方式,使用VBA和pdf合并器对多份word文档进行打印。
主要分为两大步骤:
- 将需要打印的word文档先批量转换为pdf格式的文件
- 把这些pdf合并到同一个pdf中
最后只需要打印合成的这份pdf文件即可。
第一步 批量将word文档转为pdf格式的文件
使用VBA程序将word文档批量转为pdf,操作步骤如下:
- 随便打开一个word,按快捷键 Alt+F11 弹出“Microsoft Visual Basic for Applications”,即VBA编辑窗体。
- 点击菜单栏的 “插入”-“模块”
- 将下面的代码复制到编辑区域中:
将代码中的文件夹路径改成自己存放需要打印的word文档的文件夹路径,然后按F5运行程序即可。这段代码会将下面设置的文件夹中所有的word文档转成pdf文件,同时保存在该文件夹里。
Sub BatchConvertDocToPDF()
Dim folderPath As String
Dim docFile As String
Dim doc As Document
Dim pdfPath As String
' 设置文件夹路径
folderPath = "D:\downloads\" ' 将这里更改为你的word文档所在文件夹路径,路径最后必须包含 \ 符号!
' 获取文件夹中的第一个 Word 文档
docFile = Dir(folderPath & "*.doc*")
' 循环遍历文件夹中的所有 Word 文档
Do While docFile <> ""
' 打开文档
Set doc = Documents.Open(folderPath & docFile)
' 设置 PDF 文件路径
pdfPath = folderPath & Left(docFile, InStrRev(docFile, ".") - 1) & ".pdf"
' 保存为 PDF
doc.SaveAs2 pdfPath, wdFormatPDF
' 关闭文档,不保存更改
doc.Close SaveChanges:=wdDoNotSaveChanges
' 获取下一个文件
docFile = Dir
Loop
MsgBox "所有文档已转换为PDF!"
End Sub
第二步 将生成的pdf合并成同一个pdf文件
这一步方式较多,可以在网上找在线的pdf合并工具,也可以下载pdf的处理软件来处理。
在线版的推荐smallpdf:
软件推荐: PDFXEdit 软件,可以在网上搜到便携破解版的资源。
PDFXEdit软件合并pdf:点击菜单栏的“转换”-“从文件”-“合并文件为单个PDF”,选择相应的pdf即可合并。
得到合并后的pdf文档,最后打印这一个文档即可!
双面打印的处理
最后,如果是双面打印,而word文档的页码数又是奇数的话,不同文件的首尾页内容可能会打印到同一张纸里。针对这个问题,需要检查每个word文档的页数,如果页数为奇数页,则再插入一页空白页。
下面用vba进行处理:(vba代码的操作步骤同上面转pdf的步骤,这里略)
Sub AddBlankPageToOddPageDocs()
Dim folderPath As String
Dim fileName As String
Dim doc As Document
Dim totalPages As Integer
' 设置文件夹路径
folderPath = "D:\downloads\" ' 将这里更改为你的word文档所在文件夹路径,路径最后必须包含 \ 符号!
' 获取文件夹中的第一个文件
fileName = Dir(folderPath & "*.doc*")
' 遍历文件夹中的所有Word文件
Do While fileName <> ""
' 打开文档
Set doc = Documents.Open(folderPath & fileName)
' 计算文档的总页数
totalPages = doc.ComputeStatistics(wdStatisticPages)
' 检查页数是否为奇数
If totalPages Mod 2 <> 0 Then
' 将光标移到文档末尾
Selection.EndKey Unit:=wdStory
' 插入分页符以添加空白页
Selection.InsertBreak Type:=wdPageBreak
End If
' 保存并关闭文档
doc.Close SaveChanges:=wdSaveChanges
' 获取下一个文件
fileName = Dir
Loop
MsgBox "所有文档已检查完毕。若页数为奇数,则已添加空白页。"
End Sub