From e085af32b5067b454c6d35f6e146798dd5057ead Mon Sep 17 00:00:00 2001 From: Chris McCormick Date: Mon, 13 Feb 2012 12:26:32 +0800 Subject: [PATCH 1/2] Added "rsmoorthy" .addJS() patch from here: http://blog.rsmoorthy.net/2012/01/add-javascript-to-existing-pdf-files.html --- pyPdf/pdf.py | 30 +++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/pyPdf/pdf.py b/pyPdf/pdf.py index bf60d01..74e3b3a 100644 --- a/pyPdf/pdf.py +++ b/pyPdf/pdf.py @@ -86,18 +86,43 @@ def __init__(self): }) self._info = self._addObject(info) + + # js object + js = DictionaryObject() + js.update({ + NameObject("/Type"): NameObject("/Action"), + NameObject("/S"): NameObject("/Javascript"), + NameObject("/JS"): NameObject(u"(app.alert({cMsg: 'Hello from PDF JavaScript', cTitle: 'Testing PDF JavaScript', nIcon: 3});)") + }) + # root object root = DictionaryObject() root.update({ NameObject("/Type"): NameObject("/Catalog"), NameObject("/Pages"): self._pages, + # NameObject("/OpenAction"): self._addObject(js), }) - self._root = self._addObject(root) + # self._root = self._addObject(root) + self._root = None + self.root = root def _addObject(self, obj): self._objects.append(obj) return IndirectObject(len(self._objects), 0, self) + def addJS(self, str): + js = DictionaryObject() + js.update({ + NameObject("/Type"): NameObject("/Action"), + NameObject("/S"): NameObject("/JavaScript"), + # NameObject("/JS"): NameObject(u"(app.alert({cMsg: 'Hello from PDF JavaScript', cTitle: 'Testing PDF JavaScript', nIcon: 3});)") + NameObject("/JS"): NameObject("(" + str + ")"), + }) + + self.root.update( { + NameObject("/OpenAction"): self._addObject(js) + } ) + def getObject(self, ido): if ido.pdf != self: raise ValueError("pdf must be self") @@ -240,6 +265,9 @@ def encrypt(self, user_pwd, owner_pwd = None, use_128bit = True): def write(self, stream): import struct + if(not self._root): + self._root = self._addObject(self.root) + externalReferenceMap = {} # PDF objects sometimes have circular references to their /Page objects From ae4a7bb94f998f9a320129ca289bd552efa2d76c Mon Sep 17 00:00:00 2001 From: Chris McCormick Date: Mon, 13 Feb 2012 12:28:47 +0800 Subject: [PATCH 2/2] Updated README to reflect addJS patch from "rmoorthy". --- README | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/README b/README index 3d7947a..e9b65d9 100644 --- a/README +++ b/README @@ -27,7 +27,10 @@ Example: page5.mediaBox.getUpperRight_y() / 2 ) output.addPage(page5) - + + # add some Javascript to launch the print window on opening this PDF + output.addJS("this.print({bUI:true,bSilent:false,bShrinkToFit:true});") + # print how many pages input1 has: print "document1.pdf has %s pages." % input1.getNumPages())