Comme il est mentionné dans this answer, un walkaround possible est d'ouvrir un sous-processus à utiliser ghostscript:
canvas.postscript(file="tmp.ps", colormode='color')
process = subprocess.Popen(["ps2pdf", "tmp.ps", "result.pdf"], shell=True)
Une autre solution serait d'utiliser ReportLab, mais depuis sa addPostScriptCommand
est pas très fiable, je pense que vous Vous devrez d'abord utiliser le Python Imaging Library pour convertir le fichier PS en une image, puis l'ajouter au ReportLab Canvas. Cependant, je suggère l'approche ghostscript.
Ceci est une preuve de base du concept que je l'habitude de voir si cela fonctionne:
"""
Setup for Ghostscript 9.07:
Download it from http://www.ghostscript.com/GPL_Ghostscript_9.07.html
and add `/path/to/gs9.07/bin/` and `/path/to/gs9.07/lib/` to your path.
"""
import Tkinter as tk
import subprocess
import os
class App(tk.Tk):
def __init__(self):
tk.Tk.__init__(self)
self.title("Canvas2PDF")
self.line_start = None
self.canvas = tk.Canvas(self, width=300, height=300, bg="white")
self.canvas.bind("<Button-1>", lambda e: self.draw(e.x, e.y))
self.button = tk.Button(self, text="Generate PDF",
command=self.generate_pdf)
self.canvas.pack()
self.button.pack(pady=10)
def draw(self, x, y):
if self.line_start:
x_origin, y_origin = self.line_start
self.canvas.create_line(x_origin, y_origin, x, y)
self.line_start = None
else:
self.line_start = (x, y)
def generate_pdf(self):
self.canvas.postscript(file="tmp.ps", colormode='color')
process = subprocess.Popen(["ps2pdf", "tmp.ps", "result.pdf"], shell=True)
process.wait()
os.remove("tmp.ps")
self.destroy()
app = App()
app.mainloop()
Je renvoie à [ce] (http://stackoverflow.com/questions/2252726/how-to- create-pdf-files-in-python) question pour info sur les modules qui peuvent le faire. Bonne chance! –