5 Stimmen

Grafiken in Python drucken

Ich muss "Wheel Tags" aus Python drucken. Rad-Tags haben Bilder, Zeilen und Text.

Das Python-Tutorial enthält zwei Absätze über die Erstellung von Postscript-Dateien mit der Image Lib. Nachdem ich es gelesen habe, weiß ich immer noch nicht, wie ich die Daten anordnen soll. Ich hatte gehofft, dass jemand Beispiele dafür hat, wie man Bilder, Text und Zeilen anordnet?

Danke für jede Hilfe.

3voto

Hugh Bothwell Punkte 52831

見る http://effbot.org/imagingbook/psdraw.htm

Beachten Sie das:

  1. das PSDraw-Modul scheint seit 2005 nicht mehr aktiv gepflegt zu werden; ich würde vermuten, dass die meisten Bemühungen stattdessen in die Unterstützung des PDF-Formats geflossen sind. Sie sind vielleicht glücklicher, wenn Sie stattdessen pypdf verwenden;

  2. der Quelltext enthält Kommentare wie '# FIXME: unvollständig' und 'NOT YET IMPLEMENTED'.

  3. es scheint keine Möglichkeit zu geben, die Seitengröße einzustellen - was, wenn ich mich recht erinnere, bedeutet, dass sie standardmäßig auf A4 (8,26 x 11,69 Zoll) eingestellt ist

  4. alle Maße sind in Punkten angegeben, mit 72 Punkten pro Zoll.

Sie müssen etwa so vorgehen:

import Image
import PSDraw

# fns for measurement conversion    
PTS = lambda x:  1.00 * x    # points
INS = lambda x: 72.00 * x    # inches-to-points
CMS = lambda x: 28.35 * x    # centimeters-to-points

outputFile = 'myfilename.ps'
outputFileTitle = 'Wheel Tag 36147'

myf = open(outputFile,'w')
ps = PSDraw.PSDraw(myf)
ps.begin_document(outputFileTitle)

ps ist nun ein PSDraw-Objekt, das PostScript in die angegebene Datei schreibt, und der Dokumentenkopf wurde geschrieben - Sie können nun mit dem Zeichnen beginnen.

So fügen Sie ein Bild hinzu:

im = Image.open("myimage.jpg")
box = (        # bounding-box for positioning on page
    INS(1),    # left
    INS(1),    # top
    INS(3),    # right
    INS(3)     # bottom
)
dpi = 300      # desired on-page resolution
ps.image(box, im, dpi)

Zum Hinzufügen von Text:

ps.setfont("Helvetica", PTS(12))  # PostScript fonts only -
                                  # must be one which your printer has available
loc = (        # where to put the text?
    INS(1),    # horizontal value - I do not know whether it is left- or middle-aligned
    INS(3.25)  # vertical value   - I do not know whether it is top- or bottom-aligned
)
ps.text(loc, "Here is some text")

Um eine Zeile hinzuzufügen:

lineFrom = ( INS(4), INS(1) )
lineTo   = ( INS(4), INS(9) )
ps.line( lineFrom, lineTo )

... und ich sehe keine Optionen zur Änderung des Hubgewichts.

Wenn Sie fertig sind, müssen Sie die Datei wie folgt abschließen:

ps.end_document()
myf.close()

Bearbeiten: Ich habe mich ein wenig mit der Einstellung von Hubgewichten beschäftigt und bin dabei auf ein anderes Modul gestoßen, psfile: http://seehuhn.de/pages/psfile#sec:2.0.0 Das Modul selbst sieht ziemlich minimalistisch aus - er schreibt eine Menge rohes Postskriptum - aber es sollte Ihnen eine bessere Vorstellung davon geben, was hinter den Kulissen vor sich geht.

2voto

nakedfanatic Punkte 2898

Ich empfehle die Open-Source-Bibliothek Reportlab für diese Art von Aufgabe.

Es ist sehr einfach zu bedienen und wird direkt im PDF-Format ausgegeben.

Ein sehr einfaches Beispiel aus der offiziellen Dokumentation:

from reportlab.pdfgen import canvas
def hello(c):
    c.drawString(100,100,"Hello World")
c = canvas.Canvas("hello.pdf")
hello(c)
c.showPage()
c.save()

Solange PIL installiert ist, ist es auch sehr einfach, Bilder zu Ihrer Seite hinzuzufügen:

canvas.drawImage(self, image, x,y, width=None,height=None,mask=None)

wobei "image" entweder ein PIL-Image-Objekt oder der Dateiname des zu verwendenden Bildes ist.

Zahlreiche Beispiele in der Dokumentation auch.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X