ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 17426|回复: 90

[分享] VBA代码转换PDF为其他文件格式,如docx/jpg/xlsx/txt等

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2022-3-14 14:49 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 游乐缘 于 2022-3-16 16:06 编辑

最近与PDF有缘,遇到一些PDF相关的需求。在此分享利用Acrobat库的JSO对象,在指定的PDF文件相同路径下,按照指定的类型另存文件。
支持转换的文件类型有:"eps", "html", "htm", "jpeg", "jpg", "jpe", "jpf", "jpx", "jp2", "j2k", "j2c", "jpc", "docx", "doc", "png", "ps", "rft", "xlsx", "xls", "txt", "tiff", "tif", "xml", "html"*
*新增转换类型"html"

作者水平有限,如有问题,欢迎反馈。
  1. Option Explicit
  2. 'Tools -> Reference -> Acrobat
  3. Sub test()
  4.     Dim sFilePathPDF As String, sFileExtension As String
  5.    
  6.     sFilePathPDF = "C:\Temp\testConvert.pdf"
  7.     sFileExtension = "jpg"
  8.    
  9.     ConvertPDF sFilePathPDF, sFileExtension
  10. End Sub

  11. Sub ConvertPDF(sFilePathPDF As String, sFileExtension As String)

  12.     Dim objAcroApp As New Acrobat.AcroApp
  13.     Dim objAcroAVDoc As New Acrobat.AcroAVDoc
  14.     Dim objAcroPDDoc As Acrobat.AcroPDDoc
  15.     Dim lRet As Long
  16.     Dim jso As Object
  17.     Dim sFilePath As String
  18.     Dim sExportFormat As String
  19.    
  20.     If Dir(sFilePathPDF) = "" Then
  21.         MsgBox "File not found!", _
  22.                 vbCritical, "File Path Error"
  23.         Exit Sub
  24.     End If
  25.     If LCase(Right(sFilePathPDF, 3)) <> "pdf" Then
  26.         MsgBox "Not PDF file!", vbCritical, "File Type Error"
  27.         Exit Sub
  28.     End If
  29.    
  30.     Select Case sFileExtension
  31.         Case "eps"
  32.             sExportFormat = "com.adobe.acrobat.eps"
  33.         Case "html", "htm"
  34.             sExportFormat = "com.adobe.acrobat.html"
  35.         Case "jpeg", "jpg", "jpe"
  36.             sExportFormat = "com.adobe.acrobat.jpeg"
  37.         Case "jpf", "jpx", "jp2", "j2k", "j2c", "jpc"
  38.             sExportFormat = "com.adobe.acrobat.jp2k"
  39.         Case "docx"
  40.             sExportFormat = "com.adobe.acrobat.docx"
  41.         Case "doc"
  42.             sExportFormat = "com.adobe.acrobat.doc"
  43.         Case "png"
  44.             sExportFormat = "com.adobe.acrobat.png"
  45.         Case "ps"
  46.             sExportFormat = "com.adobe.acrobat.ps"
  47.         Case "rft"
  48.             sExportFormat = "com.adobe.acrobat.rft"
  49.         Case "xlsx"
  50.             sExportFormat = "com.adobe.acrobat.xlsx"
  51.         Case "xls"
  52.             sExportFormat = "com.adobe.acrobat.spreadsheet"
  53.         Case "txt"
  54.             sExportFormat = "com.adobe.acrobat.accesstext"
  55.         Case "tiff", "tif"
  56.             sExportFormat = "com.adobe.acrobat.tiff"
  57.         Case "xml"
  58.             sExportFormat = "com.adobe.acrobat.xml-1-00"
  59.         Case "html"
  60.             sExportFormat = "com.adobe.acrobat.html-3-20"
  61.         Case Else
  62.             sExportFormat = "NA"
  63.     End Select
  64.    
  65.     If sExportFormat <> "NA" Then
  66.         sFilePath = Left(sFilePathPDF, InStrRev(sFilePathPDF, ".")) & sFileExtension
  67.         lRet = objAcroApp.Show
  68.         lRet = objAcroAVDoc.Open(sFilePathPDF, "")
  69.         Set objAcroPDDoc = objAcroAVDoc.GetPDDoc()
  70.         'JavaScript Object
  71.         Set jso = objAcroPDDoc.GetJSObject
  72.         jso.SaveAs sFilePath, sExportFormat
  73.    
  74.         lRet = objAcroAVDoc.Close(1)
  75.         lRet = objAcroApp.Hide
  76.         lRet = objAcroApp.Exit
  77.    
  78.         Set jso = Nothing
  79.         Set objAcroAVDoc = Nothing
  80.         Set objAcroApp = Nothing
  81.     End If
  82. End Sub
复制代码











评分

5

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-3-14 17:06 | 显示全部楼层
大家如有Acrobat的问题欢迎讨论!

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2022-3-14 17:13 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-3-14 19:42 来自手机 | 显示全部楼层
丸子不是小孩子 发表于 2022-3-14 17:13
感谢大神分享~~~

过奖过奖,学到用到的东西及时分享,这样代码的用处更大

TA的精华主题

TA的得分主题

发表于 2022-3-15 10:49 | 显示全部楼层
你好,这里出现了这个提示
Snipaste_2022-03-15_10-48-39.jpg

TA的精华主题

TA的得分主题

发表于 2022-3-15 10:54 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
游乐缘 发表于 2022-3-14 19:42
过奖过奖,学到用到的东西及时分享,这样代码的用处更大

经常看到楼主,是个好人!
想问一下,如果是后期绑定,应该如何引用
然后请问是否有Acrobat库的手册什么的可以分享一下
谢谢!

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-3-15 10:55 | 显示全部楼层
acc091 发表于 2022-3-15 10:49
你好,这里出现了这个提示

前期绑定,需要在“工具”->“引用”Acrobat库

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-3-15 11:19 | 显示全部楼层
morpheus126 发表于 2022-3-15 10:54
经常看到楼主,是个好人!
想问一下,如果是后期绑定,应该如何引用
然后请问是否有Acrobat库的手册什 ...

还没试过Acrobat的后期绑定。。可以试试定义对象变量的部分:
  1. Dim objAcroApp As New Acrobat.AcroApp
  2.     Dim objAcroAVDoc As New Acrobat.AcroAVDoc
  3.     Dim objAcroPDDoc As Acrobat.AcroPDDoc
复制代码
修改为:
  1. Dim objAcroApp As Object
  2.     Dim objAcroAVDoc As Object
  3.     Dim objAcroPDDoc As Object
  4.     Set objAcroApp = CreateObject("Acrobat.AcroApp")
  5.     Set objAcroAVDoc = CreateObject("Acrobat.AcroAVDoc")
  6.     Set objAcroPDDoc = CreateObject("Acrobat.AcroPDDoc")
复制代码

在参考资料《AcrobatSDK_IACGuide》中,介绍Acrobat会用到的各种对象属性方法,附件是英文版的,不太清楚有没有中文版。

AcrobatSDK_IACGuide.zip

1.45 MB, 下载次数: 125

评分

2

查看全部评分

TA的精华主题

TA的得分主题

发表于 2022-3-15 14:57 | 显示全部楼层
游乐缘 发表于 2022-3-15 10:55
前期绑定,需要在“工具”->“引用”Acrobat库

原来是这样
Snipaste_2022-03-15_14-55-47.jpg

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-3-16 16:08 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-9-30 04:25 , Processed in 0.048149 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表