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


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

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

Started byHans-Peter Jansen <hpj@urpla.net>
First post2017-05-05 13:27 +0200
Last post2017-05-05 13:27 +0200
Articles 1 — 1 participant

Back to article view | Back to de.comp.lang.python

This discussion starts older than the indexed window; earlier articles aren't shown. The article labeled Started by below is the oldest one visible, not the original post.


Contents

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

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

FromHans-Peter Jansen <hpj@urpla.net>
Date2017-05-05 13:27 +0200
SubjectRe: [Python-de] Toll für PDF "Eindruck"?
Message-ID<mailman.633.1493984013.2951.python-de@python.org>
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

[toc] | [standalone]


Back to top | Article view | de.comp.lang.python


csiph-web