求助:如何用VBA代码在同一PDF文件内复制指定页面(现有代码异常)
同一PDF内复制页面的VBA正确实现
问题根源
你当前的代码有两个致命问题:
- 页面索引错误:Acrobat API里页面是从0开始计数的,你的原PDF只有5页(页码1-5对应索引0-4),代码里写的
5,5指向的是不存在的页面。 - 目标文档误用:
CopyPagesTo是把页面复制到另一个PDF文档,你传入源文件路径,导致程序把原文档所有页面复制到自身,最终出现全页重复的结果。
正确代码实现
要在同一PDF内复制页面,用Acrobat提供的JS对象操作最可靠,代码如下:
Private Sub CommandButton17_Click() ' 复制指定页面到同一PDF的指定位置 Dim pdDoc As Acrobat.AcroPDDoc Dim jso As Object Dim filePath As String filePath = "D:\test.PDF" Set pdDoc = CreateObject("AcroExch.PDDoc") ' 打开目标PDF If pdDoc.Open(filePath) Then Set jso = pdDoc.GetJSObject ' 复制第5页,插入到第1页之后(参数都是1-based页码,和日常页码一致) ' 语法:duplicatePages(起始页码, 结束页码, 插入位置(插在该页之后)) jso.duplicatePages 5, 5, 1 ' 保存修改(1代表完整保存) pdDoc.Save 1, filePath pdDoc.Close Else MsgBox "无法打开指定PDF文件" End If ' 释放对象 Set jso = Nothing Set pdDoc = Nothing End Sub
参数说明
duplicatePages的三个参数都是1-based页码(和我们日常说的页码一致,不用转成0索引):
- 前两个参数:要复制的页面范围,比如
5,5就是只复制第5页 - 第三个参数:复制的页面插入到哪一页之后,比如
1就是插在第1页后面;如果要插在文档最开头,传0即可
效果示例
原PDF页面:1,2,3,4,5
运行代码后页面:1,5,2,3,4,5
内容的提问来源于stack exchange,提问作者OLDwong
相关产品推荐
相关产品推荐

