ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

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

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2023-12-18 10:11 | 显示全部楼层
本帖已被收录到知识树中,索引项:其他编程应用
膜拜大神,

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-1-2 10:52 | 显示全部楼层
本帖最后由 opiona 于 2024-1-2 10:54 编辑
liujunwei4321 发表于 2023-12-17 23:09
PDFium库是开源的,有没有可能换成这个库?

现有插件式侧重操作PDF, 可以直接代码返回属性或执行


PDFium库侧重的是PDF的浏览  
他主要在控件层面引用, 还不会从vb.net控件在VBA环境内的应用




TA的精华主题

TA的得分主题

发表于 2024-1-10 16:42 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
太牛了,一定好好学习!

TA的精华主题

TA的得分主题

发表于 2024-1-20 09:15 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
opiona 发表于 2023-8-3 10:58
纯VBA代码  合并多个PDF文件成一个PDF文件

是需要Adobe库吗

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-1-20 11:03 | 显示全部楼层

纯VBA需要安装, 插件版本不需要

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-1-28 01:34 | 显示全部楼层
本帖最后由 opiona 于 2024-2-20 19:24 编辑

纯VBA代码实现添加水印文字


  1. Sub TEST()
  2.     Dim Path, PathB, StrX As String
  3.     Dim IntAngle, IntFont As Integer
  4.     Dim DouZoom, DouTSC As Double
  5.     Path = ThisWorkbook.Path & "\1.pdf"
  6.     PathB = ThisWorkbook.Path & "\4.pdf"
  7.     StrX = "Watermarks TEST"
  8.    
  9.     IntFont = 40
  10.     IntAngle = 30
  11.     DouZoom = 1.5
  12.     DouTSC = 0.3
  13.     Call PDFWatermark(Path:=Path, StrX:=StrX, PathB:=PathB, IntFont:=IntFont, DouZoom:=DouZoom, IntAngle:=IntAngle, DouTSC:=DouTSC)
  14. End Sub

  15. Sub PDFWatermark(ByVal Path As String, ByVal StrX As String, Optional ByVal PathB As String = "", Optional ByVal IntFont As Integer = 20, Optional ByVal DouZoom As Double = 1, Optional ByVal IntAngle As Integer = 45, Optional ByVal DouTSC As Double = 0.3)
  16.     Rem 添加PDF水印
  17.     Rem Path           原始PDF文件全路径
  18.     Rem StrX            水印文字;  参数1: 水印内容,换行使用 \r     好像汉字会乱码
  19.     Rem PathB         保存PDF文件全路径
  20.      Rem IntFont      字体大小=20;   参数4: 字体大小
  21.     Rem DouZoom  显示倍数=1;    参数16: 水印的比例,其中1.0是100%。-1指定水印应适合于页面,同时保持其比例。默认值是1
  22.     Rem IntAngle     旋转度数=45;  参数18: 逆时针旋转度数,默认0
  23.     Rem DouTSC      透明度数=0.3;  参数19: 水印是否(0,1)透明,默认1不透明
  24.    
  25.     Rem  引用:    Adobe Acrobat X.0 Type Library  和 AcroBrokerLib
  26.     Rem  Call PDFWatermark(Path, StrX, PathB)
  27.    
  28.     Rem 下面这个用法是 加字符水印(AP - 100), 水印系统参数全部使用系统默认的:
  29.     Rem  jso.addWaterMarkFromText ("AP-100")
  30.    
  31.     Rem 下面这个用法是添加字符水印(watermarks TEST),带各种水印参数:
  32.     Rem 1=文本,2=对齐,3=字体,4=字体大小
  33.     Rem 5=颜色,6=开始页,7=结束页,8=真值在水印上
  34.     Rem 9=屏幕显示水印,10=打印时有水印,11=水印水平位置,12=水印垂直位置
  35.     Rem 13=水平位移值,或百分比,14=垂直位移值,或百分比,15=位移适用百分比,16=显示倍数
  36.     Rem 17=保持水印自身大小,18=角度,19=透明度或灰度
  37.    
  38.     Dim pdApp As Acrobat.AcroApp
  39.     Dim pdDoc As Acrobat.AcroPDDoc
  40.     Dim pdPage As Acrobat.AcroPDPage
  41.     Dim jso As Object
  42.     Dim IntPageCount, IntStarPage, IntEndPage As Integer   '//页码
  43.    
  44.     Set pdApp = CreateObject("AcroExch.App")
  45.     Set pdDoc = CreateObject("AcroExch.PDDoc")
  46.     pdDoc.Open (Path) '这里加个循环变量就可以实现动态的打开指定的pdf文件
  47.     Set jso = pdDoc.GetJSObject
  48.    
  49.     IntPageCount = pdDoc.GetNumPages   '//页码总数量
  50.     IntStarPage = 0       '//参数:6=开始页 第一页从0 开始
  51.     IntEndPage = IntPageCount - 1    '//参数:7=结束页  从0 开始  所以 -1

  52.     Call jso.addWaterMarkFromText(StrX, jso.app.Constants.Align.Center, jso.Font.Helv, IntFont _
  53.         , jso.Color.Black, IntStarPage, IntEndPage, True _
  54.         , True, True, jso.app.Constants.Align.Center, jso.app.Constants.Align.Center _
  55.         , 0, 0, False, DouZoom _
  56.         , False, IntAngle, DouTSC)
  57.    
  58.     If PathB = "" Then PathB = Path
  59.     pdDoc.Save 1, PathB  '这里可以是不同于打开的pdf文件名,相当于另存为;如果是和打开的pdf文件名相同,自动保存不提示
  60.     pdDoc.Close
  61.     Set pdDoc = Nothing
  62.     Set pdApp = Nothing
  63.    
  64. End Sub

复制代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-2-20 17:54 | 显示全部楼层


纯VBA代码: 打印PDF文件  可以指定页码  需要安装Adobe

  1. 'Rem **********************************
  2. 'Rem *******  北极狐工作室出品  ******
  3. 'Rem *******  QQ:14885553       *****
  4. 'Rem **********************************
  5. Option Explicit  '//强制声明变量

  6. Sub TEST()
  7.     Dim PathPDF  As String
  8.     PathPDF = ThisWorkbook.Path & "\630.PDF"
  9.     Call PrintPDFFile(PathPDF:=PathPDF, FirstPage:=1, LastPage:=5)
  10. End Sub

  11. Sub PrintPDFFile(ByVal PathPDF As String, Optional ByVal FirstPage As Long = 1, Optional ByVal LastPage As Long = 0)
  12.     Rem PathPDF   需要打印的PDF文件的全路径
  13.     Rem FrstPage   要打印的第一页 默认=1
  14.     Rem LastPage  要打印的最后一页 默认=0 全部
  15.     Rem 必要时需引用:Adobe Acrobat 10.0 Type Library  (版本可能不一样)
  16.    
  17.     Dim AcroExchApp As Acrobat.CAcroApp
  18.     Dim AcroExchAVDoc As Acrobat.CAcroAVDoc
  19.     Dim AcroExchPDDoc As Acrobat.CAcroPDDoc
  20.     Dim NumPage As Long
  21.     Set AcroExchApp = CreateObject("AcroExch.App")
  22.     Set AcroExchAVDoc = CreateObject("AcroExch.AVDoc")
  23.     Rem 打开PDF Open the [PathPDF] pdf file
  24.     AcroExchAVDoc.Open PathPDF, "1"
  25.     Rem 转为另一个对象 主要是获取页码 Get the PDDoc associated with the open AVDoc
  26.     Set AcroExchPDDoc = AcroExchAVDoc.GetPDDoc
  27.     Rem 获取页码, 第一页=0  Get the number of pages for this pdf
  28.     NumPage = AcroExchPDDoc.GetNumPages - 1
  29.     Rem 内部的页码是从0开始的  就是第一页的序号=0
  30.     If FirstPage > 0 Then FirstPage = FirstPage - 1
  31.     If LastPage > 0 Then
  32.         LastPage = LastPage - 1
  33.     Else
  34.         LastPage = NumPage
  35.     End If
  36.     Rem 防止指定的最后一页 超过实际页数
  37.     If LastPage > NumPage Then LastPage = NumPage
  38.     Rem 开始打印
  39.     Rem Call AcroExchAVDoc.PrintPages(FirstPage, LastPage, 2, 1, 1)  '//打印指定范围的页面,显示打印对话框。PrintPages始终使用 WIN中的默认打印机设置?INI?
  40.     Call AcroExchAVDoc.PrintPagesSilent(FirstPage, LastPage, 2, 1, 1)   '//打印指定范围的页面而不显示任何对话框
  41.     Rem 关闭Adobe对象
  42.     AcroExchApp.Exit
  43.     AcroExchAVDoc.Close (False)
  44.     AcroExchPDDoc.Close
  45. End Sub
复制代码


TA的精华主题

TA的得分主题

 楼主| 发表于 2024-2-20 21:30 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 opiona 于 2024-2-21 09:54 编辑


重复发帖  删除了


TA的精华主题

TA的得分主题

发表于 2024-2-21 14:51 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
opiona 发表于 2024-1-20 11:03
纯VBA需要安装, 插件版本不需要

感谢回复,合并PDF的功能我已经实现了

TA的精华主题

TA的得分主题

发表于 2024-2-23 16:33 | 显示全部楼层
本帖最后由 wnwbaa 于 2024-2-23 16:34 编辑

       这个很有用,特别是在没有安装adobe acrobat dc 的电脑上。今天回去逐个测试学习一下,谢谢大神!
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-16 11:51 , Processed in 0.047162 second(s), 6 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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