ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[分享] 批量打印PDF文件(电信电子发票),PDF文件导出图片

[复制链接]

TA的精华主题

TA的得分主题

发表于 2018-9-1 15:39 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
上月因为电信缴费转我这里处理,缴费后收了上百个电子发票,都是PDF文件,傻眼了,写了个VBA去利用Acrobat的打印功能批量打印,结果出来的全部是A4纸,又因赶时间报销处理,就不理了,直接交财务,结果……不过最后就那样算了。
本月又来了,研究了一下,直接打印,很难设定打印纸型,换个思路咯,把PDF文件导出图片,然后引入Excel打印,方便修改尺寸,结果发现引入图片后,刚好是比A5纸大一点点,于是把引入的页面调整为95%打印,出来的效果超好。特意分享给大家使用,如果大家有更好的方法,不妨也分享一下。
  1. Sub PrintInvoice()
  2.     Dim vFile As Variant, sPath As String, sPDF As String, nI As Integer
  3.     Dim acroApp As Acrobat.acroApp
  4.     Dim acroAVDoc As Acrobat.acroAVDoc
  5.     Dim acroPDDoc As Acrobat.acroPDDoc
  6.     Dim oJSO As Object

  7.     Application.ScreenUpdating = False
  8.     Application.DisplayAlerts = False
  9.     vFile = Application.GetOpenFilename("PDF 文件,*.pdf")
  10.     If vFile = False Then Exit Sub
  11.     sPath = vFile
  12.     vFile = Split(sPath, "")
  13.     sPath = Left(sPath, Len(sPath) - Len(vFile(UBound(vFile))))
  14.    
  15.     sPDF = Dir(sPath & "*.pdf")
  16.     ReDim vFile(1 To 1)
  17.    
  18.     Do While sPDF <> ""
  19.         nI = nI + 1
  20.         ReDim Preserve vFile(1 To nI)
  21.         vFile(nI) = sPDF
  22.         sPDF = Dir
  23.     Loop
  24.     If nI = 0 Then Exit Sub
  25.    
  26.     Set acroApp = CreateObject("AcroExch.App")
  27.     Set acroAVDoc = CreateObject("AcroExch.AVDoc")
  28.     For nI = 1 To UBound(vFile)
  29.         If acroAVDoc.Open(sPath & vFile(nI), "文档转换") Then
  30.             Set acroPDDoc = acroAVDoc.GetPDDoc()
  31.             Set oJSO = acroPDDoc.GetJSObject
  32.             oJSO.SaveAs sPath & "发票.jpg", "com.adobe.acrobat.jpeg"
  33.             acroApp.CloseAllDocs
  34.             PrintPic sPath & "发票.jpg"
  35.         End If
  36.     Next
  37.     acroApp.Exit
  38.     Set oJSO = Nothing
  39.     Set acroPDDoc = Nothing
  40.     Set acroAVDoc = Nothing
  41.     Set acroApp = Nothing
  42.     If Dir(sPath & "发票.jpg") <> "" Then Kill sPath & "发票.jpg"
  43.     Application.DisplayAlerts = True
  44.     Application.ScreenUpdating = True
  45.     MsgBox "打印结束!"
  46. End Sub

  47. Private Sub PrintPic(ByVal sPicFile As String)
  48.     Dim oPicture As Object, nTop As Double, nLeft As Double
  49.    
  50.     With ActiveSheet
  51.         nTop = .[A1].Top
  52.         nLeft = .[A1].Left
  53.         For Each oPicture In .Shapes
  54.             If oPicture.Name <> "CommandButton1" Then oPicture.Delete
  55.         Next oPicture
  56.         Set oPicture = .Pictures.Insert(sPicFile)
  57.         With oPicture
  58.             .Name = "Invoice_IMG"
  59.             .Top = nTop
  60.             .Left = nLeft
  61.         End With
  62.         .PrintOut
  63.         oPicture.Delete
  64.     End With
  65. End Sub
复制代码


批量打印电信PDF文件电子发票(by.micro).rar

27 KB, 下载次数: 579

评分

4

查看全部评分

TA的精华主题

TA的得分主题

发表于 2020-1-14 22:28 | 显示全部楼层
本帖最后由 ageovb 于 2020-1-14 22:31 编辑

需要安装Acrobat么?这个是两张发票打印在一张A4纸上?

TA的精华主题

TA的得分主题

发表于 2020-8-1 10:59 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
ageovb 发表于 2020-1-14 22:28
需要安装Acrobat么?这个是两张发票打印在一张A4纸上?

非常好用,但因为装订的原因,可否将打印位置尽量向右靠呢?谢谢!

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-8-1 11:08 | 显示全部楼层
dzsrmyh 发表于 2020-8-1 10:59
非常好用,但因为装订的原因,可否将打印位置尽量向右靠呢?谢谢!

你可以把A列作为调整位置的地方,图片放在B列位置,就能实现你要的效果

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2020-8-1 11:27 来自手机 | 显示全部楼层
microyip 发表于 2020-8-1 11:08
你可以把A列作为调整位置的地方,图片放在B列位置,就能实现你要的效果

谢谢了,我试试看

TA的精华主题

TA的得分主题

发表于 2020-8-3 09:00 | 显示全部楼层
您好,我将图片放在B列位置可以达到我想要的效果了,可每张发票都多打了一张空白页,这个应该怎么解决呢?

TA的精华主题

TA的得分主题

发表于 2020-8-3 10:57 | 显示全部楼层
您好,我将图片放在B列位置,可以达到我想要的效果,可每张发票都多打了一张空白页,这个应该怎么解决呢?

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-8-3 18:14 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
dzsrmyh 发表于 2020-8-3 10:57
您好,我将图片放在B列位置,可以达到我想要的效果,可每张发票都多打了一张空白页,这个应该怎么解决呢?

适当把图片比例缩小一点点

TA的精华主题

TA的得分主题

发表于 2020-8-5 11:18 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2020-8-5 15:28 | 显示全部楼层
额。。。为什么不能合并PDF文件,打印的时候选择一张纸上打印多个文件呢。。。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-20 19:27 , Processed in 0.041582 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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