ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: opiona

[分享] PDF插件 for VBA 合并,提取,旋转等

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2023-3-21 10:08 | 显示全部楼层
本帖已被收录到知识树中,索引项:其他编程应用
这是个好东西果断收藏 感谢大神分享

TA的精华主题

TA的得分主题

发表于 2023-3-21 11:20 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2023-3-21 13:40 来自手机 | 显示全部楼层
opiona 发表于 2023-3-19 20:52
控件 本身不支持形状的导出
据说最新版 9.2.6  可以导出表格  但是我没有破解版

能否来个一键转PPT的
现在AI热的很,WORD都一键生成PPT了

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-3-23 20:32 | 显示全部楼层
本帖最后由 opiona 于 2023-4-1 12:37 编辑
aman1516 发表于 2023-3-21 13:40
能否来个一键转PPT的
现在AI热的很,WORD都一键生成PPT了

现有的插件版本 4.8.8 和谐版 不支持

新版本的和谐版  还未找到

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-3-28 17:48 | 显示全部楼层
本帖最后由 opiona 于 2023-4-1 12:40 编辑

vba 导出PDF的文本   不需要DLL
但是不支持扫描件的识别, 只支持Excel,Word另存为的PDF文件
(DLL内函数可以识别扫描件)
要求安装专业版 引用:Adobe Acrobat 10.0 Type Library  (版本可能不一样 专业版即可)

  1. Sub TEST()
  2.     Path = ThisWorkbook.Path & "\葛覃.pdf"
  3.     PATHTEXT = ThisWorkbook.Path & "\Temp.TXT"
  4.     MsgBox PDF2TXT(Path, PATHTEXT)
  5. End Sub

  6. Rem 将可编辑PDF转为:文本文件==============================================================
  7. Rem 参数:strPdfFile    Pdf文件全路径
  8. Rem 参数:strTXTFile    文本文件全路径
  9. Rem 输出:Boolean       打不开,或者中途出错,输出:False
  10. Public Function PDF2TXT(ByVal strPdfFile As String, ByVal strTXTFile As String) As Boolean
  11.     Application.ScreenUpdating = False
  12.     Err.Clear
  13.    
  14.     Dim app As Acrobat.AcroApp
  15.     Dim jso As Object
  16.     Dim avDoc As Acrobat.AcroAVDoc
  17.     Dim pdDoc As Acrobat.AcroPDDoc
  18.     Set app = CreateObject("AcroExch.App")          '//定义:Adobe  要求安装专业版 引用:Adobe Acrobat 10.0 Type Library  (版本可能不一样)
  19.     Set avDoc = CreateObject("AcroExch.AVDoc")      '//定义:一个打开的PDF文件
  20.    
  21.     Rem '//打开制定的PDF文件
  22.     If Not avDoc.Open(strPdfFile, "文档转换") Then
  23.         '        MsgBox "不能打开指定的 " & strPdfFile & " 文档!", vbOKOnly + vbCritical, "系统信息"
  24.         Set avDoc = Nothing
  25.         Set app = Nothing
  26.         Application.ScreenUpdating = True
  27.         PDF2TXT = False
  28.         Exit Function
  29.     End If
  30.    
  31.     Rem 先删除文本文件
  32.     Dim FSO
  33.     Set FSO = CreateObject("Scripting.FileSystemObject")
  34.     If FSO.FolderExists(strTXTFile) = True Then
  35.         Kill strTXTFile
  36.     End If
  37.    
  38.    
  39.     Set pdDoc = avDoc.GetPDDoc()
  40.     Set jso = pdDoc.GetJSObject
  41.     On Error Resume Next
  42.     jso.SaveAs strTXTFile, "com.adobe.acrobat.plain-text"
  43.     app.CloseAllDocs
  44.     app.Exit
  45.     Set jso = Nothing
  46.     Set pdDoc = Nothing
  47.     Set avDoc = Nothing
  48.     Set app = Nothing
  49.    
  50.     Application.ScreenUpdating = True
  51.    
  52.     If Err.Number <> 0 Then
  53.         PDF2TXT = False
  54.     Else
  55.         PDF2TXT = True
  56.     End If
  57.    
  58. End Function
复制代码



TA的精华主题

TA的得分主题

 楼主| 发表于 2023-3-30 19:36 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-3-31 13:47 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 opiona 于 2023-3-31 22:39 编辑


添加PDF动态图章

1.png

2.png

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-4-1 12:33 | 显示全部楼层
本帖最后由 opiona 于 2023-4-5 10:51 编辑

双面打印多个PDF文件
VBA套用多个DLL函数来实现

这段代码应该是有Bug: 页码顺序,如果总数是奇数 可能会串页  没有打印机没有测试
实际最好是将这些PDF合并成一个,然后打印机双面打印


  1. Sub TEST_双面打印()
  2.     Dim ARX
  3.     Dim StrPrintName, PathXPS, PassWord, ZCM As String
  4.    
  5.     StrPrintName = ""
  6.     PathXPS = ""
  7.     PassWord = ""
  8.     ZCM = "QQ14885553"
  9.    
  10.     ReDim ARX(0 To 3)
  11.     ARX(0) = ThisWorkbook.Path & "\PDF\A14.PDF"
  12.     ARX(1) = ThisWorkbook.Path & "\PDF\A1.PDF"
  13.     ARX(2) = ThisWorkbook.Path & "\PDF\A2.PDF"
  14.     ARX(3) = ThisWorkbook.Path & "\PDF\A3.PDF"
  15.    
  16.     Call GA_双面打印多个PDF文件(ARX, StrPrintName:=StrPrintName, PathXPS:=PathXPS, PassWord:=PassWord, ZCM:=ZCM)
  17.    
  18.     MsgBox "双面打印完成", vbInformation, "北极狐工作室QQ: 14885553"
  19.    
  20. End Sub

  21. Sub GA_双面打印多个PDF文件(ByVal ARX, Optional ByVal StrPrintName As String = "", Optional ByVal PathXPS As String = "", Optional ByVal PassWord As String = "", Optional ByVal ZCM As String = "")
  22.     Rem ARX                    数组  需要打印的PDF文件全路径
  23.     Rem StrPrintName      打印机名称 默认="" 默认打印机
  24.     Rem PathXPS             打印机名="Microsoft XPS Document Writer" 需要指定保存文件的路径
  25.     Rem PassWord           PDF文件密码 默认="" 没有密码
  26.     Rem ZCM                   注册码
  27.     Rem 使用方法             Call GA_双面打印多个PDF文件(ARX, StrPrintName:=StrPrintName, PathXPS:=PathXPS, PassWord:=PassWord, ZCM:=ZCM)
  28.    
  29.     Dim PDFDLL As Object
  30.     Dim ERX, ZAC, ZAD
  31.     Dim I, X, LB, INTX, IntPages As Long
  32.     Dim StrPages As String
  33.     Dim BL As Boolean
  34.    
  35.     Rem 创建函数类对象 CreateObject  不需要提前引用
  36.     Set PDFDLL = CreateObject("GTDPDFPlugIn.PDFClass")    'DLL文件内Class的名称 现在如无意外,就可以创建一个MyDLLClass对象,YEAH!
  37.    
  38.     Rem 获取全部页面 正面反面
  39.     Set ZAC = CreateObject("Scripting.Dictionary")
  40.     Set ZAD = CreateObject("Scripting.Dictionary")
  41.     INTX = 0
  42.     LB = LBound(ARX)
  43.     For X = LB + 0 To UBound(ARX)
  44.         IntPages = PDFDLL.GetNumPagesPDF(PathPDF:=ARX(X), PassWord:=PassWord, ZCM:=ZCM)
  45.         For I = 1 To IntPages
  46.             INTX = INTX + 1
  47.             If INTX Mod 2 = 1 Then
  48.                 If ZAC.EXISTS(ARX(X)) = False Then
  49.                     ZAC(ARX(X)) = I
  50.                 Else
  51.                     ZAC(ARX(X)) = ZAC(ARX(X)) & "," & I
  52.                 End If
  53.             Else
  54.                 If ZAD.EXISTS(ARX(X)) = False Then
  55.                     ZAD(ARX(X)) = I
  56.                 Else
  57.                     ZAD(ARX(X)) = ZAD(ARX(X)) & "," & I
  58.                 End If
  59.             End If
  60.         Next
  61.     Next
  62.     Rem  打印单数页
  63.     ERX = ZAC.KEYS
  64.     For X = 0 To UBound(ERX)
  65.         StrPages = ZAC(ERX(X))
  66.         INTX = PDFDLL.PrintPagesPDF(PathPDF:=ERX(X), StrPages:=StrPages, StrPrintName:=StrPrintName, PathXPS:=PathXPS, PassWord:=PassWord, ZCM:=ZCM)
  67.     Next
  68.    
  69.     Rem  打印双数页
  70.     BL = False
  71.     If MsgBox("所选PDF单数页 打印完成" & vbCrLf & "请将纸张翻转  准备打印双数页" & vbCrLf & vbCrLf & "请确认: 已准备好, 开始打印双数页?", vbInformation + vbDefaultButton2 + vbYesNo, "北极狐工作室QQ: 14885553") = vbYes Then
  72.         BL = True
  73.     Else
  74.         If MsgBox("确认不需要打印 双数页 吗?" & vbCrLf & vbCrLf & "不打印 点击: 是   打印 点击: 否", vbInformation + vbDefaultButton2 + vbYesNo, "北极狐工作室QQ: 14885553") = vbNo Then
  75.              BL = True
  76.         End If
  77.     End If
  78.    
  79.     If BL = True Then
  80.         ERX = ZAD.KEYS
  81.         For X = 0 To UBound(ERX)
  82.             StrPages = ZAD(ERX(X))
  83.             INTX = PDFDLL.PrintPagesPDF(PathPDF:=ERX(X), StrPages:=StrPages, StrPrintName:=StrPrintName, PathXPS:=PathXPS, PassWord:=PassWord, ZCM:=ZCM)
  84.         Next
  85.     End If
  86.    
  87.     Rem 释放对象
  88.     Set PDFDLL = Nothing
  89.    
  90. End Sub

复制代码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2023-4-1 15:11 | 显示全部楼层
opiona 发表于 2023-3-31 13:47
添加PDF动态图章

找到一个  Spire.Office v6.10.3 已经测试 Spire.Pdf.dll 激活就可以用(没有 10页限制)
1.png

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2023-4-1 16:43 | 显示全部楼层
我想问一下,更新的功能是不是要把旧注册的删了重新注册才可以
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-6-3 07:58 , Processed in 0.039839 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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