2011-01-14 24 views
5

Potrzebuję wydrukować "Tagi kół" z Pythona. Znaczniki kół będą zawierać obrazy, linie i tekst.Drukowanie grafiki w języku Python

Samouczek w języku Python ma dwa akapity dotyczące tworzenia plików postscriptowych z biblioteką obrazów. Po przeczytaniu tego nadal nie wiem, jak rozłożyć dane. Miałem nadzieję, że ktoś może mieć próbki, jak układać obrazy, tekst i linie?

Dzięki za pomoc.

Odpowiedz

3

Zobacz http://effbot.org/imagingbook/psdraw.htm

zauważyć, że:

  1. moduł PSDraw nie wydaje się aktywnie utrzymywana od 2005 roku; Sądzę, że większość wysiłków została przekierowana na obsługę formatu PDF. Możesz być bardziej zadowolony z używania programu pypdf;

  2. to komentarze typu „# FIXME: niekompletne” i „jeszcze nie zaimplementowane” w źródle

  3. nie wydaje się mieć żadnego sposobu ustalania rozmiaru strony - co jak pamiętam Oznacza to domyślne do A4 (8,26 x 11,69 cala)

  4. wszystkie pomiary są w punktach, w 72 punktach na cal.

Trzeba będzie zrobić coś takiego:

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 jest teraz obiektem PSDraw który napisze PostScript do określonego pliku, a nagłówek dokument został napisany - jesteś gotowy do rozpoczęcia rysowanie rzeczy.

Aby dodać zdjęcie:

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) 

aby dodać tekst:

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") 

Aby dodać linię:

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

... i nie widzę żadnych opcji do zmiany wagi obrysu.

Gdy skończysz, trzeba zamknąć plik off jak:

ps.end_document() 
myf.close() 

EDIT: robiłem trochę czytania na ustawienie skoku ciężary, i natknąłem innego modułu, psfile : http://seehuhn.de/pages/psfile#sec:2.0.0 Sam moduł wygląda dość minimalnie - pisze dużo surowego postscriptu - ale powinien dać ci lepszy obraz tego, co dzieje się za kulisami.

1

Polecam bibliotekę open source Reportlab dla tego rodzaju zadania.

Jest bardzo prosty w użyciu i bezpośrednio odtwarza do formatu PDF.

bardzo prosty przykład z oficjalnej dokumentacji:

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() 

Dopóki jest zainstalowany PIL, jest również bardzo łatwo dodać zdjęcia do swojej strony:

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

gdzie „obraz” jest obiektem obrazu PIL lub nazwą pliku obrazu, którego chcesz użyć.

Wiele przykładów w documentation również.