vba 打开adode pdf并通过添加文本框编辑页面
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/40422546/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Open adode pdf and edit a page by adding a text box
提问by chandu
I'm quite new to vba coding with adobe and can't get any code to work. I first need to open a pdf located in my documents (with adobe acrobat) and then edit the 5th page by adding a textbox/or a number of text boxes. I was wondering if this was possible and if there was code to do this. I have Adobe Acrobat XI Standard, which allows me to edit pdfs manually and create text boxes where needed. Any help would be much appreciated.
我对使用 adobe 进行 vba 编码很陌生,无法使用任何代码。我首先需要打开位于我的文档中的 pdf(使用 adobe acrobat),然后通过添加一个文本框/或多个文本框来编辑第 5 页。我想知道这是否可能,以及是否有代码可以做到这一点。我有 Adobe Acrobat XI Standard,它允许我手动编辑 pdf 并在需要的地方创建文本框。任何帮助将非常感激。
Thanks
谢谢
回答by ReFran
There a several ways to communicate with acrobat from vba/vbs (see Acrobat SDK / IAC section). But for me the best is to work with Acrobat Form API, which allows to work more ore less direct with js-code.
有几种方法可以从 vba/vbs 与 acrobat 通信(请参阅 Acrobat SDK / IAC 部分)。但对我来说最好的是使用 Acrobat Form API,它允许使用 js 代码进行更多或更少的直接工作。
Following you will find an vbs/vba example how to add text on the first page (zero based: first page = 0).
下面你会发现一个 vbs/vba 示例如何在第一页上添加文本(从零开始:第一页 = 0)。
Please look for further methods and properties and especially for defining the rect (place/array to set the box) at the "Acrobat JavaScript API Reference". Good luck, Reinhard
请在“Acrobat JavaScript API 参考”中查找更多方法和属性,尤其是用于定义矩形(用于设置框的位置/数组)的方法和属性。祝你好运,莱因哈德
Path = "D:\Test.pdf"
Set App = CreateObject("Acroexch.app")
app.show
Set AVDoc = CreateObject("AcroExch.AVDoc")
Set AForm = CreateObject("AFormAut.App") 'from AFormAPI
If AVDoc.Open(Path,"") Then
'// write some js code on a vbs variable
js = "f = this.addField(""newField"", ""text"", 0, [250,650,20,600]);" &vblf _
& "f.value = ""any Text""; " &vblf _
& "f.flatten"
'//execute the js code
AForm.Fields.ExecuteThisJavaScript js
end if
Set AForm = Nothing
Set AVDoc = Nothing
Set APP = Nothing
回答by chandu
After trawling through adobes documentation on OLE automation and API references, I found that you can actually code very well in VBA with acrobat. Enjoy and adapt to your needs. Here is a link to adobe's API reference: http://www.adobe.com/content/dam/Adobe/en/devnet/acrobat/pdfs/iac_api_reference.pdf
在浏览了有关 OLE 自动化和 API 参考的 adobes 文档后,我发现您实际上可以使用 acrobat 在 VBA 中很好地编码。享受并适应您的需求。以下是 adobe 的 API 参考链接:http: //www.adobe.com/content/dam/Adobe/en/devnet/acrobat/pdfs/iac_api_reference.pdf
Sub RMS_pdf()
Application.DisplayAlerts = False
Application.CutCopyMode = False
Set wb1 = Workbooks.Open(Filename:="\ldnfortunenet\fortunenetdocuments\William Hadman\Suitability\RMS\RMS Product Governance Reports\" & LongNewDate & "\RMS Product Governance Report.xlsm", UpdateLinks:=True)
Set ws1 = wb1.Sheets("Performance & Volatility")
Set ws2 = wb1.Sheets("Asset Allocation")
Set ws3 = wb1.Sheets("Detailed Contribution")
OpenPath = "\ldnfortunenet\fortunenetdocuments\William Hadman\Aushir Shah\RMS Product Governance Reports\RMS Product Governance Report - 2016-10-31 - CDF Direct Diversified Income.pdf"
SavePath = "\ldnfortunenet\fortunenetdocuments\William Hadman\Aushir Shah\RMS Product Governance Reports\RMS Product Governance Report - 2016-10-31 - CDF Direct Diversified Income v2.pdf"
'initialize the Acrobat interface
Set AcroApp = CreateObject("AcroExch.App")
Set gpdDoc = CreateObject("AcroExch.PDDoc")
'open the file
If gpdDoc.Open(OpenPath) Then
Set jso = gpdDoc.GetJSObject
End If
'get at the jso
If Not jso Is Nothing Then
If gpdDoc.Open(dest) Then
Set jso = gpdDoc.GetJSObject
End If
LastPage = gpdDoc.GetNumPages - 1
Set Box1 = jso.AddField("Performance Comment - " & StrategyName(4), "text", LastPage, Array(583.8, 706.32, 224.7, 583.2))
Box1.TextFont = "Helvetica"
Box1.TextSize = 8
Else
End If
If gpdDoc.Save(PDSaveFull, SavePath) = False Then
MsgBox "Unable to save image"
Else
End If