目录

一、前提说明

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文档】

导出-1

​(2)点击上图右侧【创建PDF/XPS文档】,在弹出的导出按钮中,也有【选项】按钮,点击可以在对话框中设置导出PDF时的标签选项

导出-2

​综上测试与观察,得出结论:

手动方式中,可以通过另存和导出两种方式,完成Word转PDF时根据Word标题或书签创建PDF标签的任务。

手动创建PDF方式比较

手动创建PDF的方式

能否根据Word标题或标签创建PDF书签

另存

打印

导出

三、VBA代码另存和导出和手动的差别

注:这里以另存激活文档(当前正打开的文档)为PDF举例

1.另存

另存至少需要写两个参数:文件名和格式

Sub 另存PDF_不能创建书签() ActiveDocument.SaveAs2 fileName:="E:\Zhuomian_CJ\Test01.PDF", fileFormat:=wdFormatPDF
End Sub

但是,Word VBA另存的方法中是没有创建PDF书签的参数的,通过官方文档也可以证实:

​另存方法概览

​另存【SaveAs2】参数1

​另存【SaveAs2】参数2

此外,我们打开一个用上述这段代码另存的一个文件:

​查看【另存】方法的PDF文件有无书签

也可以再次证实上述结论。

至此,可以总结:

如果需要用VBA批量操作,我们就只能通过【导出】的方式达到生成PDF同时创建PDF书签的要求。

Word VBA创建PDF方式比较

VBA创建PDF的方式

能否根据Word标题或标签创建PDF书签

另存

打印

导出

2.导出

(1)方法

我们可以通过【ExportAsFixedFormat】或者【ExportAsFixedFormat2】方法进行导出,二者的区别中此处可以不用管。

(2)参数

通过官方文档,可以看到所有参数

​导出函数和参数概览

导出【ExportAsFixedFormat2】的参数-1

​这里,前两个参数是导出的文件路径和文件格式,必须要写。

导出【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文件

Word标题生成的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书签生成的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且保留书签相关推荐

  1. Word VBA批量格式转换:docx转pdf、doc、rtf、txt以及反向转换

    有时候需要把大量的docx文件另存为其它格式,比如pdf.doc.rtf.txt,或者反向转换,可以用VBA批量处理.启动word,按下Alt+F11,打开Microsoft Visual Basic ...

  2. Word如何批量转PDF?分享一个批量转换方法

    怎么把Word文档批量转换成PDF文件格式呢?Word文档和PDF文件一直都是我们办公和学习常用的两种文件,在一定程度上来说,他们两者之间存在着相辅相成的关系,一个可以方便编辑文件内容,一个可以用来放 ...

  3. python合并pdf 加书签_使用Python批量合并PDF文件(带书签功能)

    1 #!/usr/bin/env python3 2 #-*- coding: utf-8 -*- 3 ''' 4 #文件名:pdfmerge.py5 本脚本用来合并pdf文件,输出的pdf文件按输入 ...

  4. Word文件批量转PDF格式超实用

    工作或者生活中难免会遇到需要将word文件转换成pdf格式来使用,那么一个两个的倒还好,如果是需要几十上百个的话就很棘手了,那么就可以用到这一个vbs脚本,轻轻松松让你体验行云流水的感觉! 首先我们先 ...

  5. 多个word vba批量替换文字(一个文件夹)

    多个word批量替换word文字! Sub 替换N个word文档()Dim Dm As DocumentDim MyPath As StringDim MyName As StringDim N As ...

  6. Word VBA(批量复制Excel表格和Word表格到Word中)

    Function Test()  '使用双字典          SearchPath = FolderDialog("请选择文件夹")     If SearchPath = & ...

  7. PPT VBA:批量转PDF

    目录 一.思路 1.获取文件列表 2.遍历文件列表中的文件 3.调用相应过程进生成PDF 4.完成 二.示例代码 三.补充 一.思路 1.获取文件列表 通过fso对象逐层获取主文件夹下的各层子文件夹, ...

  8. 关于python:如何将Word文档批量转换为PDF文档

    Q:         我们在实际工作中很容易发现,有些时候我们需要将Word文档转换为PDF文档,如果只是一个文件,我们也只是需要通过Word提供的转换为PDF文档的功能就可以实现了.但是WPS需要收 ...

  9. PDF 书签制作和 Word 文档转 PDF 生成书签保留目录超链接的方法

    根据 PDF 文档创建性质来制作书签 主要有两类 由可编辑文档创建 由不可编辑的图片创建 第一部分 由可编辑文档创建的 PDF 书签制作方法 1.Word 文档目录转 PDF 生成书签 Word自带转 ...

  10. Word控件Spire.Doc 【书签】教程(4): 使如何在 DOCX 到 PDF 转换中保留书签

    Spire.Doc for .NET是一款专门对 Word 文档进行操作的 .NET 类库.在于帮助开发人员无需安装 Microsoft Word情况下,轻松快捷高效地创建.编辑.转换和打印 Micr ...

最新文章

  1. 共阳极数码管动态扫描c语言,《C语言编程实训》实训指导书三
  2. dotnet安装包时找不到依赖关系_孩子总找妈妈,小心单方父母过渡依赖症,4个方法让父母更平等...
  3. WAIC2020开幕在即,第四范式亮点抢先看
  4. linux用户的根目录_为什么Linux允许用户删除根目录?
  5. 六元均匀直线阵的各元间距为_给棉花地选购滴灌带时记住这几点,不再为棉花滴水时发愁...
  6. Idea 插件 lombok 的安装和使用
  7. idea报“Usage of API documented as @since 1.7”这一问题的解决方法
  8. Linux GDB Debugging
  9. linux 挂载windows共享目录 is not a valid block device
  10. raw转bmp程序c语言,求指导,如何用c语言实现读取*.raw格式图像
  11. mongodb 命令补充
  12. Background Intelligent Transfer Service 服务错误(BITS服务失败) 的修复解决方案
  13. 用electron实现播放flash小游戏
  14. 股票历史数据-A股所有股票历史数据下载
  15. linux下go语言代理
  16. Java中WeakHashMap实现原理深究
  17. 基于阿里云生活物联网平台的智能家居(物联网,智能家居,STM32,阿里云生活物联网平台,人脸识别,语音识别,语音交互)
  18. 日期转换 NSDate 格式 格林尼治时间 时差
  19. SpringBoot 入门
  20. 利用 clip-path 绘制不规则的图形

热门文章

  1. Tensorflow-(4)使用Tensorflow加载csv,pandas dataframes,图像,文本文件
  2. 全面质量管理 TQM、六西格玛、CMMI、ISO9000 关系
  3. 使用wePE安装系统
  4. “华为杯”第十八届中国研究生数学建模竞赛历程及感悟
  5. SHA256算法C++实现
  6. 中国联通5G-NR 900MHz基站设备技术白皮书(2022)
  7. sqluldr2 用法简述
  8. 全球时报英语新闻爬虫
  9. Nginx工作原理(Master+Worker)
  10. Virtual Display Manager(windows虚拟显示器软件)官方中文版V3.3.2.44650 | Win7/win10虚拟显示器下载