Path: csiph.com!fu-berlin.de!uni-berlin.de!not-for-mail From: Hans-Peter Jansen Newsgroups: de.comp.lang.python Subject: Re: [Python-de] =?utf-8?q?Toll_f=C3=BCr_PDF_=22Eindruck=22=3F?= Date: Fri, 05 May 2017 13:27:34 +0200 Lines: 97 Message-ID: References: <33b0598f-7a26-b5a9-1970-590405851397@goebel-consult.de> <3236541.ZOMqQDfe6K@xrated> Mime-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable X-Trace: news.uni-berlin.de hgaYSv+C8oPszNwgsR+inQuIDHL1HJ/YPK/SG28oEfOg== Return-Path: X-Original-To: python-de@python.org Delivered-To: python-de@mail.python.org X-Virus-Scanned: amavisd-new at lisa.loc User-Agent: KMail/4.14.10 (Linux/4.10.13-9-default; KDE/4.14.28; x86_64; ; ) In-Reply-To: <33b0598f-7a26-b5a9-1970-590405851397@goebel-consult.de> X-Provags-ID: V03:K0:az8fO6+a6qcAv8fCCEGKP/cgCCH2kMraCz1WJktAOkkx9BkQvRM jM1aG/3y7HF/1qg6jjm2diQDZ747Gu+DwH6114XqyDOxdDKrZa1T76yGKMQLx8h9V3NpkYH G/tJScb9JPlByQk3m1xjx6nye5fx6nhEdT71bjdDY1CsaPoVN3xjHmbOxLn09IgriAff9NB QILnklhcOMM9rMKICupXg== X-UI-Out-Filterresults: notjunk:1;V01:K0:rfgK94wkZKw=:KT5201D55asaC6p3xBTlO4 EdRfKTKFq1FdMFeyQ3qOhNxMH2VcfyYlrVjLtM7nE8393Sl6RnTY9IuvnQVNNaJKEhUMebUsd o53ozK/1j/VByIKgm8+Vc3dtVpcma3mfjUpK4wETWBXkxO726hUXdR7p1YgGQiQN74JtoBtOD J3YuzsAYMyLfF8w0G1SKXB6qfKGrmcT4aMcSLk+tpAQxCw2lBmPX8hTUDVuiGPTVJMyBqtKiX W2iQKq4FscwhXJLCwztIVtqLyDsltcvaRxeQEmAHaguDs8kIy3KJftKuXWbLRl2cT1Jz6TMsu hpViUFvEaWZ09Jq1ryjSHw99OkIVubtoLRcJBZMC05Xqur3XZ9fsw4dnMsufWUvb9bLZ6fjEJ yHx2EU3SFAnBWkWLRtXozCW3AybiaNOyKsQk5MY4mijrbkw8LX6PxeSZlLjrhJg179B55r7OZ OHzx7g+iUxaQOeQRGDlHB6Vva3EB2HytEr51817sywdLMYqiP2MxmBPJ+rzIM/hPxDH1U8WJG ZOKTdE/W3Drfp3njJP0hNxsSDJtRGS9+aBC2e82BjLORDYEonj1C7DEPaelK4KwceQDxu420o c91zR/kn58nnf8UIj/eQY99ZdWViGoqX7J6Z22Y6qtM/NXjKtGy7mjSxw0vCliiCcWCxP+NHc 8kmq7FS3h811RaUYY9RSywaIpTl76+CvcA9UZ1hfPhPncMOHICWiznXBgts8BWv+0zPM= X-Mailman-Approved-At: Fri, 05 May 2017 07:33:33 -0400 X-Content-Filtered-By: Mailman/MimeDel 2.1.23 X-BeenThere: python-de@python.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Die Deutsche Python Mailingliste List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Mailman-Original-Message-ID: <3236541.ZOMqQDfe6K@xrated> X-Mailman-Original-References: <33b0598f-7a26-b5a9-1970-590405851397@goebel-consult.de> Xref: csiph.com de.comp.lang.python:4773 On Donnerstag, 4. Mai 2017 11:18:22 Hartmut Goebel wrote: > Hallo, >=20 > ich suche ein Tool, mit dem man einen "Eindruck" in ein PDF machen ka= nn, > oder ein Tool, um ein PDF mit einem Text-Block an einer bestimmten > Stelle der Seite zu erzeugen. Es muss auch nicht Python sein. >=20 > Kennt jemand was in die Richtung? >=20 > Wenn ich es slesbt schreiben w=FCrde, w=FCrde ich ungef=E4hr folgende= s machen: >=20 > - mit ReportLab eine PDF-Seite mit dem "Eindruck" erstellen > - mit PyPDF2 diese Seite mit der Vorlage =FCbereinander legen. >=20 > Der aufw=E4ndigere Teil w=E4re Schritt eins :-) Dies habe ich mal f=FCrs "Eindrucken" von Timestamps in PDFs verwendet.= Die Idee war: ersetze eine Dummy-Zeichenfolge durch die Richtige in ein= em PS- File, generiert aus dem LO-Template, und =FCberlagere alle Seiten des z= u=20 druckenden PDFs mit dem PDF-Overlay. Hier ein paar Rudimente, die Dich weiterbringen k=F6nnten. Sicherlich sind da ein paar fragw=FCrdige Ans=E4tze enthalten, z.B. die= sed nach=20 ps2pdf Pipe, aber Du weist ja, wie es im richtigen Leben l=E4uft... Damals waren die Python PDF Bibliotheken noch nicht so weit. Hat =FCber mehrere Jahre erstaunlich gut funktioniert. Wenn Du das ganze Projekt m=F6chtest, sag Bescheid. class config: tstemplate =3D 'timestamp-template.ps' # not propagated to config file tspattern =3D '31322E33342E353637382039303A31323A3334' class PDFOverlay: def pdftimestamp(self, fpath): tstemp =3D os.path.join(config.appdir, config.tstemplate) if not os.path.exists(tstemp): log.error("pdftimestamp: %s not found" % tstemp) return fpath tsfd, tsfn =3D tempfile.mkstemp(suffix=3D'.pdf', dir=3D'/var/tm= p') config.tmpfiles.append(tsfn) encts =3D tohex(time.strftime("%d.%m.%Y %H:%M:%S")) # generate a timestamp pdf from ps template cmd =3D "LANG=3DC sed -e 's;%s;%s;g' < '%s' | ps2pdf - '%s'" %=20= (config.tspattern, encts, tstemp, tsfn) log.debug("cmd: %s" % repr(cmd)) try: p =3D Popen(cmd, shell =3D True, stdout=3DPIPE, stderr=3DPI= PE) except OSError, e: log.error("failed to run %s: %s" % (repr(cmd), e)) return fpath stdout, stderr =3D p.communicate() if p.returncode: log.error(u"%s: %s" % (cmd, stderr)) return fpath # overlay original file and timestamp pdf =20 pdffd, pdffn =3D tempfile.mkstemp(suffix=3D'.pdf', dir=3D'/var/= tmp') config.tmpfiles.append(pdffn) cmd =3D "LANG=3DC pdftk '%s' stamp '%s' output '%s'" % (fpath, = tsfn,=20 pdffn) log.debug("cmd: %s" % repr(cmd)) try: p =3D Popen(cmd, shell =3D True, stdout=3DPIPE, stderr=3DPI= PE) except OSError, e: log.error("failed to run %s: %s" % (repr(cmd), e)) return fpath stdout, stderr =3D p.communicate() if p.returncode: log.error(u"%s: %s" % (cmd, stderr)) return fpath =20 return pdffn SG, Hans-Peter