def pdf_fill(orig_pdf, new_pdf, vals): print "pdf_fill", orig_pdf, new_pdf, vals t0 = time.time() rd = PdfReader(orig_pdf) st = PdfStamper(rd, FileOutputStream(new_pdf)) form = st.getAcroFields() for k, v in vals.items(): try: form.setField(k, str(v)) except Exception, e: raise Exception("Field %s: %s" % (k, str(e)))
def pdf_fill(orig_pdf,new_pdf,vals): print "pdf_fill",orig_pdf,new_pdf,vals t0=time.time() rd=PdfReader(orig_pdf) st=PdfStamper(rd,FileOutputStream(new_pdf)) font=BaseFont.createFont("/usr/share/fonts/truetype/thai/Garuda.ttf",BaseFont.IDENTITY_H,BaseFont.EMBEDDED) form=st.getAcroFields() for k,v in vals.items(): try: form.setFieldProperty(k,"textfont",font,None) form.setField(k,v.decode('utf-8')) except Exception,e: raise Exception("Field %s: %s"%(k,str(e)))
def sign(self, inputstream, sign_keyname, sign_reason, visible=False): """Sign a PDF""" # This might raise a ValueError which will be catched one stack above key, chain = self.getKeychain(sign_keyname) reader = PdfReader(inputstream) outputstream = ByteArrayOutputStream() stp = PdfStamper.createSignature(reader, outputstream, "\0") sap = stp.getSignatureAppearance() sap.setCrypto(key, chain, None, PdfSignatureAppearance.WINCER_SIGNED) sap.setCertificationLevel(PdfSignatureAppearance.CERTIFIED_NO_CHANGES_ALLOWED) sap.setReason(sign_reason) sap.setLocation("Remscheid, Germany") # TODO: Configure if visible: sap.setVisibleSignature(Rectangle(100, 100, 200, 200), 1, None) stp.close() return outputstream
def addMetadata(self, inputstream, metadata): """Adds metadata to a PDF document""" reader = PdfReader(inputstream) outputstream = ByteArrayOutputStream() stp = PdfStamper(reader, outputstream, "\0") meta = reader.getInfo() for key in ('Subject', 'Author', 'Keywords', 'Title', 'Creator', 'CreationDate'): if key in metadata: meta.put(key, metadata[key]) stp.setMoreInfo(meta) stp.close() return outputstream
#!/bin/sh ''''exec "$(dirname "$0")"/../fiji --jython "$0" "$@" # (call again with fiji)''' from com.lowagie.text.pdf import PdfReader, PdfName, PdfNumber, PdfStamper from java.io import FileOutputStream import sys if len(sys.argv) != 3: print 'Usage:', sys.argv[0], 'source.pdf', 'target.pdf' sys.exit(1) reader = PdfReader(sys.argv[1]) for k in range(0, reader.getNumberOfPages()): reader.getPageN(k + 1).put(PdfName.ROTATE, PdfNumber(90)) print "rotated", k stamper = PdfStamper(reader, FileOutputStream(sys.argv[2])) stamper.close()