Graphik - von Turtle erstellt - drucken

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Floydl1
User
Beiträge: 12
Registriert: Montag 12. Februar 2018, 23:51
Wohnort: Wolfenbüttel

Hi Freunde.
Ich möchte eine Graphik, die von Turtle erstellt wurde, ausdrucken.
Ich schreibe dazu das Ergebnis auf die Platte mit:

Code: Alles auswählen

turtle.getcanvas().postscript(file="D:/Daten/Picture.ps")
Nach meinen Google Ergebnissen soll diese Datei von einem Bildverarbeitungsprogramm, z.B. von GIMP, eingelesen und konvertiert werden können.
GIMP sagt leider: PostScript-Datei »D:\Daten\Picture.ps« konnte nicht interpretiert werden".

Kann mir jemand helfen?
Danke für Euer Interesse, Floydl
Musik beflügelt das Leben!
Benutzeravatar
peterpy
User
Beiträge: 188
Registriert: Donnerstag 7. März 2013, 11:35

Hallo Floydl1

Du bist auf gutem Weg.
Nun kannst Du das Postscript mit ghostscript das file in ein pdf wandeln.
Geht auch in Python:

Code: Alles auswählen

import subprocess
import os
arbeitsverzeichnis = os.getcwd()
ovz = os.path.split(arbeitsverzeichnis)[0]## oberverzeichnis

class Blatt_drucken(object):

    """
    Testklasse zum Drucken
    """
    
    #Aufruf von Menueleiste
    def __init__(self,masterfenster, fenster):
        self.masterfenster = masterfenster#root
        self.fenster = fenster #canvas
        self.filename = "%s%s" %(ovz, "/Temp/temp.ps")

    def generate_ps(self):
        """
        Postscript aus dem Canvas erstellen
        """
        print("Modul drucken, Klasse Blatt_drucken, Methode generate_ps")
        #Aufruf von Menueleiste
        filename = "Test1.ps"
        self.fenster.postscript(file = self.filename, colormode='color', 
                                x = -25, y = 25, height = "210m", 
                                width = "297m", rotate = True )       
        self.erstelle_pdf()

    def erstelle_pdf(self):
        """
        pdf aus Postscript erstellen
        """
        print("Modul drucken, Klasse Blatt_drucken, Methode erstelle_pdf")
        befehl = "ps2pdf"
        quelle = self.filename
        ziel = "%s%s" %(ovz,"/Temp/result.pdf")
        option1 = "-sPAPERSIZE=a4"
        option2 = "-sBORDERWIDTH=1000"
       
        process = subprocess.Popen([befehl, option1, quelle, ziel],)        
        process.wait()
Gruss
Peter
Sirius3
User
Beiträge: 17747
Registriert: Sonntag 21. Oktober 2012, 17:20

@peterpy: wenn Du schon ein so schönes Wort wie `oberverzeichnis` erfindest, dann kürze das nicht mit `ovz` ab.
Für das Basisverzeichnis kennt os.path.basename, `split` ist falsch.
Pfade setzt man auch nicht mit dem veralteten %-Operator zusammen, sondern benutzt os.path.join, oder eigentlich gar nicht mehr os.path sondern ersetzt alles durch pathlib.Path.
Woher weißt Du, dass es im Oberverzeichnis einen Unterordner mit dem Namen Temp gibt?
Die Klasse ist eigentlich keine Klasse, das hört man schon am Namen: `Blatt_drucken` ist eine Tätigkeit also eine Funktion.
Statt das PS-Ergebnis in eine Datei zu schreiben, kann man es auch direkt per Stdin an ps2pdf schicken.
Wenn Du eigentlich nichts mit dem Popen-Objekt machst, kannst Du auch `subprocess.run` benutzen.

Code: Alles auswählen

import subprocess

def blatt_drucken(fenster, ziel):
    postscript = fenster.postscript(colormode='color', x=-25, y=25, height="210m", width="297m", rotate=True)
    subprocess.run(["ps2pdf", "-sPAPERSIZE=a4", "-sBORDERWIDTH=1000", "-", ziel], input=postscript)
Benutzeravatar
__blackjack__
User
Beiträge: 13100
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Die 210m bekommt man vielleicht noch mit Endlospapier hin, aber 297m breit? *Den* Drucker möchte ich ja mal gerne sehen. 😎
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Benutzeravatar
peterpy
User
Beiträge: 188
Registriert: Donnerstag 7. März 2013, 11:35

Hallo Sirius,
Du hast ja so recht, ich habs mir einfach gemacht und nur einen Teil eines "alten" Auswerteprogramms hier rein kopiert. Zu dem Programm gehört auch eine Verzeichnisstruktur, welche bei Bedarf erstellt wird.
Natürlich ist vieles zu verbessern. Ursprünglich hab ich's in Python 2.5 geschrieben, vor ein paar Jahren dann auf 3.5 angepasst.

Gruss
Peter
Benutzeravatar
peterpy
User
Beiträge: 188
Registriert: Donnerstag 7. März 2013, 11:35

Hallo __blackjack__
Den* Drucker möchte ich ja mal gerne sehen
In tkinter bezeichnet "m" Milimeter
https://anzeljg.github.io/rin2/book2/24 ... sions.html
Gruss
Peter
Floydl1
User
Beiträge: 12
Registriert: Montag 12. Februar 2018, 23:51
Wohnort: Wolfenbüttel

Ja, danke Peter!
Ich bin etwas überwältigt (überfordert)!
Bevor ich mich wieder dazu melde, muß ich etwas Zeit investieren!

Grüße, Floydl
Musik beflügelt das Leben!
Antworten