Word VBA:批量转PDF且保留书签
目录
一、前提说明
1.讨论范围
2.示例文档说明
二、Word自带转PDF方法
1.另存
2.打印
3.导出
(1)点击【文件】-【导出】-【创建PDF/XPS文档】
(2)点击上图右侧【创建PDF/XPS文档】,在弹出的导出按钮中,也有【选项】按钮,点击可以在对话框中设置导出PDF时的标签选项
三、VBA代码另存和导出和手动的差别
1.另存
2.导出
(1)方法
(2)参数
(3)示例代码
四、批量操作代码
1.示例代码
2.注意
一、前提说明
1.讨论范围
这里只讨论通过Word软件自带的方法完成生成PDF时创建PDF标签的方法,外部插件不在探讨和研究范围
2.示例文档说明
示例文档里面有两处标题和一处书签。
二、Word自带转PDF方法
1.另存
点击【文件】-【另存为】,格式选【PDF】
可以看到在保存选项中,有根据标题和Word书签创建书PDF签选项的选项。
2.打印
点击【文件】-【打印】,选择虚拟打印机最好的微软自带的
可以看到,在【打印机属性】中是没有PDF标签的设置选项的
3.导出
(1)点击【文件】-【导出】-【创建PDF/XPS文档】
(2)点击上图右侧【创建PDF/XPS文档】,在弹出的导出按钮中,也有【选项】按钮,点击可以在对话框中设置导出PDF时的标签选项
综上测试与观察,得出结论:
手动方式中,可以通过另存和导出两种方式,完成Word转PDF时根据Word标题或书签创建PDF标签的任务。
手动创建PDF的方式 |
能否根据Word标题或标签创建PDF书签 |
---|---|
另存 |
是 |
打印 |
否 |
导出 |
是 |
三、VBA代码另存和导出和手动的差别
注:这里以另存激活文档(当前正打开的文档)为PDF举例
1.另存
另存至少需要写两个参数:文件名和格式
Sub 另存PDF_不能创建书签() ActiveDocument.SaveAs2 fileName:="E:\Zhuomian_CJ\Test01.PDF", fileFormat:=wdFormatPDF
End Sub
但是,Word VBA另存的方法中是没有创建PDF书签的参数的,通过官方文档也可以证实:
此外,我们打开一个用上述这段代码另存的一个文件:
也可以再次证实上述结论。
至此,可以总结:
如果需要用VBA批量操作,我们就只能通过【导出】的方式达到生成PDF同时创建PDF书签的要求。
VBA创建PDF的方式 |
能否根据Word标题或标签创建PDF书签 |
---|---|
另存 |
否 |
打印 |
否 |
导出 |
是 |
2.导出
(1)方法
我们可以通过【ExportAsFixedFormat】或者【ExportAsFixedFormat2】方法进行导出,二者的区别中此处可以不用管。
(2)参数
通过官方文档,可以看到所有参数
这里,前两个参数是导出的文件路径和文件格式,必须要写。
这里,剪头标记的参数【CreateBookmarks】,通过说明可以看到就是选择生成PDF时书签的参数。
具体怎么设置呢?点击紫色文字
继续看一下官方文档:
可以清楚看到,三类书签选项的枚举常量名称、值及其说明,此参数根据需要选择即可。
(3)示例代码
A.根据Word标题创建PDF书签
我们将文档导出到前面演示相同的位置,格式为PDF,书签参数选择上图中的第1种
Sub 导出PDF_根据Word标题创建书签()ActiveDocument.ExportAsFixedFormat2 outputfilename:="E:\Zhuomian_CJ\Test01.PDF", _ExportFormat:=wdExportFormatPDF, createBookMarks:=wdExportCreateHeadingBookmarks
End Sub
我们看看生成的PDF文件
可以看到,PDF中只有Word文档中两处标题对应的书签。
B.根据Word书签创建PDF书签
我们将文档导出到前面演示相同的位置,格式为PDF,书签参数选择上图中的第3种
Sub 导出PDF_根据Word书签创建书签()ActiveDocument.ExportAsFixedFormat2 outputfilename:="E:\Zhuomian_CJ\Test01.PDF", _ExportFormat:=wdExportFormatPDF, createBookMarks:=wdExportCreateWordBookmarks
End Sub
我们看到生成的PDF书签效果:
可以看到只有Word书签的内容,和官方说明文档完全一样,没有问题。
四、批量操作代码
1.示例代码
Rem 这里是主程序,会对主文件夹及其各级文件夹下所有Word文件执行导出操作'可以先把要操作的文件整理有一个文件夹下,以免有多余文件导出
Sub 批量导出PDF主程序()Dim fd As FileDialogDim fso As ObjectDim arr() '存储每次遍历到的文件夹的子文件夹Dim brr() '临时存储每次遍历到的文件夹的子文件夹Dim crr() '存储所有文件夹Dim drr() '存储所有Word文件路径Dim myFolder As ObjectDim subFolder As VariantDim i As LongDim j As LongDim m As LongDim myFile As ObjectDim 后缀 As StringDim t0 As SingleDim 书签类型 As Longt0 = Timeri = 0: j = 0: m = 0Set fd = Application.FileDialog(msoFileDialogFolderPicker)Set fso = CreateObject("Scripting.FileSystemObject")With fd.Title = "选择主文件夹"If .Show Theni = i + 1ReDim Preserve crr(1 To i)crr(i) = .SelectedItems(1)arr = crr书签类型 = CLng(Trim(InputBox("请输入书签类型:" & vbCrLf & "0--不创建书签" _& vbCrLf & "1--根据Word标题创建书签" & vbCrLf & "2--根据Word书签创建书签", "书签类型", 1)))Do While Not InStr("012", CStr(书签类型)) > 0Select Case MsgBox("输入不符合要求,请:" & vbCrLf & "重新输入(是)" & vbCrLf & "退出程序(否):", vbInformation + vbYesNo, "错误提示")Case vbYes书签类型 = CLng(Trim(InputBox("请输入书签类型:" & vbCrLf & "0--不创建书签" _& vbCrLf & "1--根据Word标题创建书签" & vbCrLf & "2--根据Word书签创建书签", "书签类型", 1)))Case vbNoExit SubEnd SelectLoopOn Error Resume NextDo While Err.Number = 0For j = LBound(arr) To UBound(arr)Set myFolder = fso.GetFolder(arr(j))If myFolder.subFolders.Count > 0 ThenFor Each subFolder In myFolder.subFoldersi = i + 1ReDim Preserve crr(1 To i)crr(i) = subFolder.Pathm = m + 1ReDim Preserve brr(1 To m)brr(m) = subFolder.PathNextEnd IfNextm = 0arr = brrErase brrLoopOn Error GoTo 0i = 0For j = LBound(crr) To UBound(crr)
' Debug.Print j, crr(j)Set myFolder = fso.GetFolder(crr(j))For Each myFile In myFolder.Files后缀 = fso.GetExtensionName(myFile.Path)If 后缀 Like "doc*" And Not 后缀 Like "*~$*" Theni = i + 1ReDim Preserve drr(1 To i)drr(i) = myFile.PathEnd IfNextNextFor j = LBound(drr) To UBound(drr)Rem 此处以下为调用的处理过程Application.ScreenUpdating = FalseCall 导出PDF_创建书签(drr(j), 书签类型)Application.ScreenUpdating = TrueRem 此处以上为调用的处理过程Debug.Print Format(j, String(Len(CStr(UBound(drr))), "0")), drr(j), "导出完成"NextEnd IfEnd WithSet fd = NothingSet fso = NothingSet myFolder = NothingOn Error Resume NextDebug.Print "完成 共导出" & UBound(drr) & "个文件为PDF 用时" & Timer - t0 & "秒"
End SubSub 导出PDF_创建书签(文件名, 书签类型 As Long)Dim aDoc As DocumentDim fso As ObjectDim 文件名1 As StringSet aDoc = Documents.Open(文件名)Set fso = CreateObject("Scripting.FileSystemObject")文件名1 = fso.GetBaseName(文件名)aDoc.ExportAsFixedFormat2 outputfilename:=aDoc.Path & "\" & 文件名1 & ".PDF", _ExportFormat:=wdExportFormatPDF, CreateBookMarks:=书签类型aDoc.Close wdDoNotSaveChangesSet aDoc = NothingSet fso = Nothing
End Sub
2.注意
会对所选主文件夹及其各级文件夹下所有Word文件执行导出操作。(注释也有说明)
Word VBA:批量转PDF且保留书签相关推荐
- Word VBA批量格式转换:docx转pdf、doc、rtf、txt以及反向转换
有时候需要把大量的docx文件另存为其它格式,比如pdf.doc.rtf.txt,或者反向转换,可以用VBA批量处理.启动word,按下Alt+F11,打开Microsoft Visual Basic ...
- Word如何批量转PDF?分享一个批量转换方法
怎么把Word文档批量转换成PDF文件格式呢?Word文档和PDF文件一直都是我们办公和学习常用的两种文件,在一定程度上来说,他们两者之间存在着相辅相成的关系,一个可以方便编辑文件内容,一个可以用来放 ...
- python合并pdf 加书签_使用Python批量合并PDF文件(带书签功能)
1 #!/usr/bin/env python3 2 #-*- coding: utf-8 -*- 3 ''' 4 #文件名:pdfmerge.py5 本脚本用来合并pdf文件,输出的pdf文件按输入 ...
- Word文件批量转PDF格式超实用
工作或者生活中难免会遇到需要将word文件转换成pdf格式来使用,那么一个两个的倒还好,如果是需要几十上百个的话就很棘手了,那么就可以用到这一个vbs脚本,轻轻松松让你体验行云流水的感觉! 首先我们先 ...
- 多个word vba批量替换文字(一个文件夹)
多个word批量替换word文字! Sub 替换N个word文档()Dim Dm As DocumentDim MyPath As StringDim MyName As StringDim N As ...
- Word VBA(批量复制Excel表格和Word表格到Word中)
Function Test() '使用双字典 SearchPath = FolderDialog("请选择文件夹") If SearchPath = & ...
- PPT VBA:批量转PDF
目录 一.思路 1.获取文件列表 2.遍历文件列表中的文件 3.调用相应过程进生成PDF 4.完成 二.示例代码 三.补充 一.思路 1.获取文件列表 通过fso对象逐层获取主文件夹下的各层子文件夹, ...
- 关于python:如何将Word文档批量转换为PDF文档
Q: 我们在实际工作中很容易发现,有些时候我们需要将Word文档转换为PDF文档,如果只是一个文件,我们也只是需要通过Word提供的转换为PDF文档的功能就可以实现了.但是WPS需要收 ...
- PDF 书签制作和 Word 文档转 PDF 生成书签保留目录超链接的方法
根据 PDF 文档创建性质来制作书签 主要有两类 由可编辑文档创建 由不可编辑的图片创建 第一部分 由可编辑文档创建的 PDF 书签制作方法 1.Word 文档目录转 PDF 生成书签 Word自带转 ...
- Word控件Spire.Doc 【书签】教程(4): 使如何在 DOCX 到 PDF 转换中保留书签
Spire.Doc for .NET是一款专门对 Word 文档进行操作的 .NET 类库.在于帮助开发人员无需安装 Microsoft Word情况下,轻松快捷高效地创建.编辑.转换和打印 Micr ...
最新文章
- 共阳极数码管动态扫描c语言,《C语言编程实训》实训指导书三
- dotnet安装包时找不到依赖关系_孩子总找妈妈,小心单方父母过渡依赖症,4个方法让父母更平等...
- WAIC2020开幕在即,第四范式亮点抢先看
- linux用户的根目录_为什么Linux允许用户删除根目录?
- 六元均匀直线阵的各元间距为_给棉花地选购滴灌带时记住这几点,不再为棉花滴水时发愁...
- Idea 插件 lombok 的安装和使用
- idea报“Usage of API documented as @since 1.7”这一问题的解决方法
- Linux GDB Debugging
- linux 挂载windows共享目录 is not a valid block device
- raw转bmp程序c语言,求指导,如何用c语言实现读取*.raw格式图像
- mongodb 命令补充
- Background Intelligent Transfer Service 服务错误(BITS服务失败) 的修复解决方案
- 用electron实现播放flash小游戏
- 股票历史数据-A股所有股票历史数据下载
- linux下go语言代理
- Java中WeakHashMap实现原理深究
- 基于阿里云生活物联网平台的智能家居(物联网,智能家居,STM32,阿里云生活物联网平台,人脸识别,语音识别,语音交互)
- 日期转换 NSDate 格式 格林尼治时间 时差
- SpringBoot 入门
- 利用 clip-path 绘制不规则的图形
热门文章
- Tensorflow-(4)使用Tensorflow加载csv,pandas dataframes,图像,文本文件
- 全面质量管理 TQM、六西格玛、CMMI、ISO9000 关系
- 使用wePE安装系统
- “华为杯”第十八届中国研究生数学建模竞赛历程及感悟
- SHA256算法C++实现
- 中国联通5G-NR 900MHz基站设备技术白皮书(2022)
- sqluldr2 用法简述
- 全球时报英语新闻爬虫
- Nginx工作原理(Master+Worker)
- Virtual Display Manager(windows虚拟显示器软件)官方中文版V3.3.2.44650 | Win7/win10虚拟显示器下载