2017-07-05 7 views
1

Ich versuche, ein Rechteck zu zeichnen und es mit Ghostscript in ein PDF auszugeben. Wenn ich den folgenden Postscript-Code in einer Datei mit dem Namen rect.eps setzen, bekomme ich, was ich will:Rechteck mit Ghostscript zeichnen (mit PostScript-Sprache)

newpath 
100 100 moveto 
0 100 rlineto 
100 0 rlineto 
0 -100 rlineto 
-100 0 rlineto 
closepath 
gsave 
0 0 0 setrgbcolor 
fill 
stroke 
showpage 

Aber wenn ich versuche, zu schließen, dass Postscript in meinen Ghostscript-Befehl, bekomme ich nur eine leere Seite:

gs -o rect.pdf -sDEVICE=pdfwrite -g300x300 -c "newpath 100 100 moveto 0 100 rlineto 100 0 rlineto 0 -100 rlineto -100 0 rlineto closepath gsave 0 0 0 setrgbcolor fill stroke showpage" 

Was mache ich falsch, sollte es nicht möglich sein, ein Rechteck mit Ghostscript zu ziehen?

Mit freundlichen Grüßen Niclas

+0

Haben Sie versucht, Ihre Befehle Zeile für Zeile in die Ghostscript interteractive Eingabeaufforderung eingeben? – Alan

+0

Vielleicht möchten Sie Abschnitt 3.4 von https://subversion.american.edu/aisaac/wp/psdraw20030415.pdf sehen – Alan

+0

Die GSave ist nicht notwendig, es sei denn, Sie wollten den Pfad vor dem Schlag, den neuen Weg am Anfang ist nicht notwendig. Ich kann Ihren Effekt reproduzieren, aber der Grund scheint, dass das Dokument einfach zu klein ist. versuchen Sie -g2000x2000 oder -sPAPERSIZE = a4 zum Beispiel und Sie werden das Rechteck sehen. Musste wohl in Koordinatenräume tauchen um das zu erklären –

Antwort

2

Stefans Kommentar effektiv zu korrigieren.

Sie haben eine Mediengröße in Pixel von 300x300 festgelegt. Da die Standardauflösung des pdfwrite-Geräts 720 dpi beträgt und Sie dies nicht geändert haben, bedeutet dies, dass die Mediengröße in jeder Richtung weniger als einen halben Zoll beträgt.

Sie haben dann ein Rechteck gezeichnet, das 100.100 Einheiten auf der Seite ansteuert und um 100 Einheiten in jede Richtung erweitert. PostScritp-Einheiten sind 1/72 Zoll, also beginnt die untere linke Ecke Ihres Rechtecks ​​bei knapp über 1 Zoll nach oben und rechts.

Das liegt außerhalb des von Ihren Medien definierten Halbzolls. Das Ergebnis ist einfach, dass das Rechteck von der Seite abgezogen wird.

Wenn Sie die Mediengröße nicht einstellen, verwendet Ghostscript die Standardeinstellung, entweder A4 oder Letter, und Sie werden die Ausgabe sehen. Warum es funktioniert, wenn Sie eine EPS-Datei erstellen, ich habe keine Ahnung, ich vermute, dass es Inhalte in der EPS gibt, die Sie nicht geteilt haben, was einen Unterschied macht.

Beim Erstellen einer PDF-Datei, bei der es sich um ein auflösungsunabhängiges Format handelt, ist es besser, die Mediengröße in auflösungsunabhängigen Einheiten, wie PostScript-Einheiten, als Pixel anzugeben.

Beachten Sie, dass Ihr Code ein zusätzliches Problem hat, das auch von Stefan, dem baumelnden Gsave, erwähnt wird, das aussieht, als müsste es vor dem Strich einen Grestore haben. So wie es ist der Strich wird nichts tun, ich vermute, dass Sie wollen:

gsave 
0 0 0 setrgbcolor 
fill 
grestore 
stroke 
showpage 
Verwandte Themen