Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > de.comp.lang.python > #4773

Re: [Python-de] Toll für PDF "Eindruck"?

From Hans-Peter Jansen <hpj@urpla.net>
Newsgroups de.comp.lang.python
Subject Re: [Python-de] Toll für PDF "Eindruck"?
Date 2017-05-05 13:27 +0200
Message-ID <mailman.633.1493984013.2951.python-de@python.org> (permalink)
References <33b0598f-7a26-b5a9-1970-590405851397@goebel-consult.de> <3236541.ZOMqQDfe6K@xrated>

Show all headers | View raw


On Donnerstag, 4. Mai 2017 11:18:22 Hartmut Goebel wrote:
> Hallo,
> 
> ich suche ein Tool, mit dem man einen "Eindruck" in ein PDF machen kann,
> oder ein Tool, um ein PDF mit einem Text-Block an einer bestimmten
> Stelle der Seite zu erzeugen. Es muss auch nicht Python sein.
> 
> Kennt jemand was in die Richtung?
> 
> Wenn ich es slesbt schreiben würde, würde ich ungefähr folgendes machen:
> 
> - mit ReportLab eine PDF-Seite mit dem "Eindruck" erstellen
> - mit PyPDF2 diese Seite mit der Vorlage übereinander legen.
> 
> Der aufwändigere Teil wäre Schritt eins :-)

Dies habe ich mal fürs "Eindrucken" von Timestamps in PDFs verwendet.

Die Idee war: ersetze eine Dummy-Zeichenfolge durch die Richtige in einem PS-
File, generiert aus dem LO-Template, und überlagere alle Seiten des zu 
druckenden PDFs mit dem PDF-Overlay.

Hier ein paar Rudimente, die Dich weiterbringen könnten.

Sicherlich sind da ein paar fragwürdige Ansätze enthalten, z.B. die sed nach 
ps2pdf Pipe, aber Du weist ja, wie es im richtigen Leben läuft...

Damals waren die Python PDF Bibliotheken noch nicht so weit.

Hat über mehrere Jahre erstaunlich gut funktioniert.
Wenn Du das ganze Projekt möchtest, sag Bescheid.


class config:
    tstemplate = 'timestamp-template.ps'
    # not propagated to config file
    tspattern = '31322E33342E353637382039303A31323A3334'


class PDFOverlay:
    def pdftimestamp(self, fpath):
        tstemp = os.path.join(config.appdir, config.tstemplate)
        if not os.path.exists(tstemp):
            log.error("pdftimestamp: %s not found" % tstemp)
            return fpath
        tsfd, tsfn = tempfile.mkstemp(suffix='.pdf', dir='/var/tmp')
        config.tmpfiles.append(tsfn)
        encts = tohex(time.strftime("%d.%m.%Y %H:%M:%S"))

        # generate a timestamp pdf from ps template
        cmd = "LANG=C sed -e 's;%s;%s;g' < '%s' | ps2pdf - '%s'" % 
(config.tspattern, encts, tstemp, tsfn)
        log.debug("cmd: %s" % repr(cmd))
        try:
            p = Popen(cmd, shell = True, stdout=PIPE, stderr=PIPE)
        except OSError, e:
            log.error("failed to run %s: %s" % (repr(cmd), e))
            return fpath
        stdout, stderr = p.communicate()
        if p.returncode:
            log.error(u"%s: %s" % (cmd, stderr))
            return fpath

        # overlay original file and timestamp pdf       
        pdffd, pdffn = tempfile.mkstemp(suffix='.pdf', dir='/var/tmp')
        config.tmpfiles.append(pdffn)
        cmd = "LANG=C pdftk '%s' stamp '%s' output '%s'" % (fpath, tsfn, 
pdffn)
        log.debug("cmd: %s" % repr(cmd))
        try:
            p = Popen(cmd, shell = True, stdout=PIPE, stderr=PIPE)
        except OSError, e:
            log.error("failed to run %s: %s" % (repr(cmd), e))
            return fpath
        stdout, stderr = p.communicate()
        if p.returncode:
            log.error(u"%s: %s" % (cmd, stderr))
            return fpath
       
        return pdffn



SG,
Hans-Peter

Back to de.comp.lang.python | Previous | Next | Find similar


Thread

Re: [Python-de] Toll für PDF "Eindruck"? Hans-Peter Jansen <hpj@urpla.net> - 2017-05-05 13:27 +0200

csiph-web