ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[分享] EXCEL VBA批量添加多个PDF文件文本水印

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2020-10-14 18:52 | 显示全部楼层 |阅读模式

我今天改善我们公司银行水单批量处理工作,
想实现银行水单批量把每一个水单对应的各自的会计凭证号码做成水印,印在pdf文件上
搜了一天案例都不甚理想,下午终于.......
找到这个文章(http://club.excelhome.net/thread-1238655-1-1.html),受其启发,找到 adobe公司论坛,
get了操作PDF水印专用函数:addWaterMarkFromText
(函数完整参数说明见PDF API用户手册272页:
手册下载地址  https://www.adobe.com/content/da ... s_api_reference.pdf)

下面是添加水印范本:(注意不支持中文水印,暂时我没有解决这个问题)
Sub pdfwatermark()
'添加PDF水印
Dim pdApp As Acrobat.AcroApp
Dim pdDoc As Acrobat.AcroPDDoc
Dim pdPage As Acrobat.AcroPDPage
Dim jso As Object

Set pdApp = CreateObject("AcroExch.App")
Set pdDoc = CreateObject("AcroExch.PDDoc")
pdDoc.Open ("D:\160.pdf") '这里加个循环变量就可以实现动态的打开指定的pdf文件
Set jso = pdDoc.GetJSObject

下面这个用法是添加系统日期时间,带各种水印参数:
Call jso.addWaterMarkFromText(Date, jso.app.Constants.Align.Center, jso.Font.Helv, 16, jso.Color.Black, 0, 0, True, True, True, jso.app.Constants.Align.Center, jso.app.Constants.Align.Center, 100, 100, False, 1, False, 0, 1)

下面这个用法是添加字符水印(watermarks TEST),带各种水印参数:
Call jso.addWaterMarkFromText("watermarks TEST", jso.app.Constants.Align.Center, jso.Font.Helv, 20, jso.Color.Black, 0, 0, True, True, True, jso.app.Constants.Align.Center, jso.app.Constants.Align.Center, 0, 0, False, 1, False, 45, 1)

下面这个用法是 加字符水印(AP-100),水印系统参数全部使用系统默认的:
jso.addWaterMarkFromText ("AP-100")

pdDoc.Save 1, "D:\160.pdf"   '这里可以是不同于打开的pdf文件名,相当于另存为;如果是和打开的pdf文件名相同,自动保存不提示
pdDoc.Close
Set pdDoc = Nothing
Set pdApp = Nothing

End Sub

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-10-14 19:55 | 显示全部楼层
本帖最后由 bluesky_0 于 2020-10-14 20:09 编辑

PDF水印函数参数.rar (10.77 KB, 下载次数: 178)

补上 水印参数中文说明

PDF水印函数参数说明

PDF水印函数参数说明

TA的精华主题

TA的得分主题

发表于 2020-10-17 20:28 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
如何使用呢?

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-10-18 01:36 | 显示全部楼层

TA的精华主题

TA的得分主题

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

在楼主启发下  整理了一下  写成了函数

只加了几个参数,  如果需要其他参数  可以自己加上去



  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

复制代码


评分

2

查看全部评分

TA的精华主题

TA的得分主题

发表于 2020-10-20 15:42 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2020-10-20 20:39 | 显示全部楼层
wudongxian 发表于 2020-10-20 15:42
无法创建部件,在哪里下载Acrobat.AcroApp控件?

安装 Adobe Acrobat  建议专业版!

TA的精华主题

TA的得分主题

发表于 2022-2-9 16:37 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
opiona 发表于 2020-10-20 20:39
安装 Adobe Acrobat  建议专业版!

把jso.Font.Helv改为"宋体"可以实现中文水印

TA的精华主题

TA的得分主题

发表于 2022-2-9 16:40 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
感谢分享,留名学习

TA的精华主题

TA的得分主题

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

本版积分规则

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

GMT+8, 2024-5-4 14:55 , Processed in 0.036201 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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