明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 10128|回复: 11

请问高手:在VB或者VBA中,能否对adobe acrobat进行对象编程?

  [复制链接]
发表于 2007-9-1 23:31 | 显示全部楼层 |阅读模式

这个问题困扰我很长时间了。

是这样的:一张cad图纸中有很多a3大小的图纸,现在我已经将这些图纸分别打印为pdf文件,想把它们组合成一个文件,死办法就是打开adobe acrobat程序,然后依次对这些pdf文件进行插入操作,最终组合成一个pdf文件,本人觉得这办法效率不高,想通过编程达到这个目的。我在vb中的引用库中找到了关于adobe acrobat的库,用对象浏览器察看了其成员及方法,但是上面的提示过于简单,无法操作。请问有没有高手通过VB或者VBA对adobe acrobat进行对象编程,请大家给出操作示例,本人借此学习学习,谢谢各位高手!!

发表于 2007-10-2 09:36 | 显示全部楼层
本帖最后由 作者 于 2007-10-2 9:44:30 编辑

下面是一个追加pdf的函数, 合并也一样的

' Append PDF files to a single PDF file

' Alvin 2/10/2007

'Thanks for the idea of johnsonm

Public Function AppendPDFs(arrPdfFiles() As String, strFileName As String) As Boolean
Dim AcroApp As CAcroApp
Dim avCodeFile As CAcroAVDoc
Dim PDDoc1 As CAcroPDDoc
Dim PDDoc2 As CAcroPDDoc
Dim i As Long
Dim lngPage As Long
Dim lngPageNum1 As Long
Dim lngPageNum2 As Long
Dim lngPageNum3 As Long

lngPageNum1 = 0
lngPageNum2 = 0
lngPageNum3 = 0

'Start Acrobat in the background
Set AcroApp = CreateObject("AcroExch.App")

AcroApp.Hide

Set avCodeFile = CreateObject("AcroExch.AVDoc")

avCodeFile.Open strFileName, strFileName
Set PDDoc1 = avCodeFile.GetPDDoc
lngPageNum1 = PDDoc1.GetNumPages
lngPageNum3 = 0

For i = LBound(arrPdfFiles) To UBound(arrPdfFiles)
Set PDDoc1 = avCodeFile.GetPDDoc

Set PDDoc2 = CreateObject("AcroExch.PDDoc")
PDDoc2.Open arrPdfFiles(i)

lngPage = PDDoc1.GetNumPages - 1
If lngPage < 0 Then lngPage = 0

PDDoc1.InsertPages lngPage, PDDoc2, 0, PDDoc2.GetNumPages, 0
lngPageNum3 = lngPageNum3 + PDDoc2.GetNumPages
Next i

PDDoc1.Save 1, strFileName
lngPageNum2 = PDDoc1.GetNumPages
PDDoc1.Close
PDDoc2.Close
avCodeFile.Close 0

'Exit Acrobat
AcroApp.Exit


Set AcroApp = Nothing
Set avCodeFile = Nothing
Set PDDoc1 = Nothing
Set PDDoc2 = Nothing

If lngPageNum2 - lngPageNum1 = lngPageNum3 Then
    AppendPDFs = True
    Else
    AppendPDFs = False
End If

End Function

回复 支持 1 反对 0

使用道具 举报

发表于 2020-4-27 21:13 | 显示全部楼层
alin 发表于 2007-10-11 11:43
Acrobat Prof. 6 should be OK. The type library file is acrobat.tlb which comes with the full version ...

AcroExch对象需要基于一个拥有授权的Acrobat才能创建
发表于 2007-9-2 20:52 | 显示全部楼层

不用一个个文件插入吧,我们用的是adobe acrobat 8.0 Professional. 在pdf输出目录了选择要合并的文件,右键弹出菜单里有“合并”选择文件的选项。当然如果能在批量出图时即生成合并的文件是最好的,我也想有这样的功能。

发表于 2007-9-12 15:50 | 显示全部楼层
还是自己编写吧,不过,在VB中对arobat编程十分烦人,尤其是用惯了VB的人。给你提个小建议,可以用excel vba来写。
 楼主| 发表于 2007-9-15 22:17 | 显示全部楼层

to Mrqq18:

你的意思是:通过excel vba对arobat编程?

能否给个例子学习啊!!谢谢!!

 楼主| 发表于 2007-9-29 22:25 | 显示全部楼层
顶一下!!
 楼主| 发表于 2007-10-9 21:12 | 显示全部楼层

谢谢alin 版主:

你的这个AppendPDFs函数是在vb环境下运行还是在autocad ide的vba环境下运行?另外“Dim AcroApp As CAcroApp”中的CAcroApp引用的是什么库?此外,该函数具体怎么调用,能给个示例吗?

另外我发帖的意思是:一张cad图纸中有很多a3大小的图纸(按照第一页,第二页,...已经排好序),现在我已经将这些图纸分别打印为pdf文件,文件名依次为1,2,3...,本人想把它们组合成一个pdf文件(此pdf文件的第一页为已经打印好的cad图纸中的第一页,依次按照顺序合并),而不是随机合并,本人想通过编程达到这个依次目的,不知道能否实现?谢谢各位高手!!

发表于 2007-10-10 11:53 | 显示全部楼层

我的机器安装了 Acrobat Prof. 8.0, 引用如下图

你的想法应该可以实现。我是在AutoCAD VBA IDE中运行的,VB应该也可以。至于对象的属性方法等我也是按F2查看。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
 楼主| 发表于 2007-10-10 21:49 | 显示全部楼层
alin 版主:是不是机器一定要安装Acrobat Prof. 8.0才行,我机器上装的是adobe acrobat 6.0 Prof.,这个版本行不?另外假如我用vba对Acrobat Prof. 8.0进行编程,别人的机器是不是一定要安装Acrobat Prof. 8.0才能运行这个vba程序?假如是的话,那岂不这个vba程序的运行还要受adobe acrobat 版本的限制?有没有好的解决办法?谢谢!
发表于 2007-10-11 11:43 | 显示全部楼层

Acrobat Prof. 6 should be OK. The type library file is acrobat.tlb which comes with the full version of Acrobat only. The free reader does not expose the COM interfaces. And I don't think you can packed the acrobat.tlb into your program. Somebody have tried and returned an error when it was trying to create the object.

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-5-4 06:10 , Processed in 0.240322 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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