Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > de.comp.lang.python > #4773
| 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> |
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
Re: [Python-de] Toll für PDF "Eindruck"? Hans-Peter Jansen <hpj@urpla.net> - 2017-05-05 13:27 +0200
csiph-web