Benutzer-Werkzeuge

Webseiten-Werkzeuge


postscript_ps

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
postscript_ps [2025-05-27 15:49:38] manfredpostscript_ps [2025-10-16 18:16:31] (aktuell) david
Zeile 1: Zeile 1:
 +====== PostScript (PS) ======
 +
 +  * **[[https://de.wikibrief.org/wiki/PostScript_fonts|PostScript-Schriften]]**
 +    * In PDF sind die folgenden 14 Schriftarten vom Typ 1 als Standardschriftarten definiert:
 +      * Kurier (normal, schräg, fett, fett schräg)
 +      * Helvetica (normal, schräg, fett, fett schräg)
 +      * Symbol
 +      * Zeiten (römisch, kursiv, fett, fett kursiv)
 +      * ITC Zapf Dingbats
 +      * //In neueren Versionen von Adobe Acrobat Reader wurden Helvetica und Times jedoch intern durch Arial bzw. Times New Roman ersetzt.//
 +  * [[http://karl-haller.de/PostScript/Dv2-04.pdf|Dr. K. Haller - Datenverarbeitung II - Kap. 04: Einblick in PostScript]]
 +  * [[https://www.itp.uni-hannover.de/467.html|In PostScript selber programmieren?]]
 +  * [[https://www-cdf.fnal.gov/offline/PostScript/PLRM2.pdf]]
 +  * **[[https://riptutorial.com/postscript]]**
 +  * [[https://staff.science.uva.nl/a.j.p.heck/Courses/Mastercourse2005/tutorial.pdf]]
 +  * [[https://youtu.be/JOLD9Q1DylE|Einar Høst - A PostScript to functional geometry | Code Mesh LDN 18]]
 +  * [[http://pscript.dubmun.com/tutorial2.html|Creating Basic Grapics With Postscript (1 of 2)]]
 +  * [[http://pscript.dubmun.com/tutorial3.html|Creating Basic Grapics With Postscript (2 of 2)]]
 +
 +
 +  - 1984: **''PostScript Level 1''** — Dies wurde als residentes Betriebssystem des Apple LaserWriter-Laserdruckers auf den Markt gebracht und leitete die Desktop Publishing-Ära ein.
 +  - 1988: **''Display PostScript''** — Mit Display PostScript entwickelte das Unternehmen NeXT 1987 in Zusammenarbeit mit Adobe eine Technik, in der die Bildschirmdarstellung mit PostScript erfolgt. Dadurch sollte ein besseres WYSIWYG erreicht werden, da Bildschirm- und Druckausgabe auf Basis derselben Beschreibungssprache erfolgen. Das System wurde zusammen mit dem Unternehmen Adobe entwickelt und später als Adobe-Produkt vertrieben. Verwendet wurde Display PostScript von NeXTStep, dem Betriebssystem der NeXTcube/NeXTstation, einem von Steve Jobs' NeXT entwickelten Computer. Display PostScript enthielt jedoch kein Window-System, sondern war zum Betrieb in Verbindung mit einem existierenden Fenstersystem gedacht, zum Beispiel X Window. In dieser Form wurde Display PostScript auch von Unternehmen wie Sun Microsystems, IBM und SGI auf deren Workstations eingesetzt. //Das Betriebssystem macOS von Apple nutzt mit Quartz ein ähnliches System zur Bildschirmdarstellung, im Gegensatz zu Display PostScript wird hier nicht PostScript als Datenquelle benutzt, sondern das ''Portable Document Format'' (PDF) verwendet.//
 +  - 1991: **''PostScript Level 2''** — Dies enthielt mehrere wichtige Verbesserungen für Level 1, einschließlich Unterstützung für Bilddekomprimierung (JPEG), In-RIP-Trennung, automatisch wachsende Wörterbücher, Speicherbereinigung, benannte Ressourcen und binäre Codierungen des PostScript-Programm-Streams.
 +  - 1997: **''PostScript Level 3''** //Der Begriff „Level“ wurde gestrichen.// -> **''PostScript 3''** — Die neueste und vielleicht am weitesten verbreitete Version. Sie enthält auch einige Importverbesserungen gegenüber Level 2 wie Smooth Shading. Der Begriff „Level“ wurde gestrichen.
 +  - 2023: [[https://helpx.adobe.com/de/fonts/kb/postscript-type-1-fonts-end-of-support.html|Die Unterstützung für das Authoring mit Type 1-Schriften wird in Adobe-Applikationen nach dem Januar 2023 eingestellt. Type 1-Schriften (auch als PostScript, PS1, T1, Adobe Type 1, Multiple Master, oder MM bekannt) bezeichnen ein Format innerhalb der Schriftenbranche, das durch Formate ersetzt wurde, das größere Glyphensätze unterstützt.]]
 +
 +
 +===== PDF-Dateien zusammenfassen =====
 +
 +  * benötigt ghostscript cli: ''gs''
 +  * [[https://ghostscript.readthedocs.io/en/latest/Use.html]]
 +  * [[https://ghostscript.readthedocs.io/en/latest/Devices.html]]
 +  * [[https://ghostscript.readthedocs.io/en/latest/VectorDevices.html]]
 +  * [[https://en.wikipedia.org/wiki/PDF/A#Standards]]
 +
 +So kann man mehrere PDF-Dateien zu einer einzigen zusammenfassen und gleichzeitig optimieren / komprimieren, funktioniert auch mit nur einer einzigen Datei:
 +
 +vector (text markierbar):
 +  > gs -dBATCH -dNOPAUSE -dQUIET -dPDFA=2 -dPDFACompatibilityPolicy=1 -dColorConversionStrategy=/RGB -dInterpolateControl=0 -dPDFSETTINGS=/printer -sPAPERSIZE=a4 -sDEVICE=pdfwrite -o combine.pdf -f 1.pdf 2.pdf 3.pdf
 +
 +bitmap/raster (text nicht markierbar):
 +  > gs -dBATCH -dNOPAUSE -dQUIET -dPDFA=2 -dPDFACompatibilityPolicy=1 -dColorConversionStrategy=/RGB -dInterpolateControl=0 -dPDFSETTINGS=/printer -sPAPERSIZE=a4 -sDEVICE=pdfimage24 -dDownScaleFactor=2 -r600 -o combine.pdf -f 1.pdf 2.pdf 3.pdf
 +
 +  * Eine interne Auflösung von 600 ppi (''-r600'') & ein Herunterskalierungsfaktor von 2 (''-dDownScaleFactor=2'') ergeben eine finale Auflösung von 300 ppi (ohne Skalierung könnte Text weniger scharf aussehen)
 +  * ''pdfimage32'' statt ''pdfimage24'' nutzen, falls Transparenz benötigt wird (selten für Textdokumente)
 +
 +pdf metadata: 
 +  > gs -dBATCH -dNOPAUSE -dQUIET -dPDFA=2 -dPDFACompatibilityPolicy=1 -dColorConversionStrategy=/RGB -dInterpolateControl=0 -dPDFSETTINGS=/printer -sPAPERSIZE=a4 -sDEVICE=pdfwrite -o combine.pdf -f 1.pdf 2.pdf 3.pdf -c "[ /Author (My Name) /Keywords () /Subject () /Title (Title) /DOCINFO pdfmark"
 +
 +==== alternative Optionen ====
 +
 +PDF/A Versionen:
 +
 +  * PDF/A-1 (2005, PDF 1.4): ''%%-dPDFA=1%%''
 +  * PDF/A-2 (2011, PDF 1.7): ''%%-dPDFA=2%%''
 +  * PDF/A-3 (2012, PDF 1.7): ''%%-dPDFA=3%%''
 +  * PDF/A-4 (2020, PDF 2.0): ''%%-dPDFA=4%%''
 +
 +Presets für "distiller parameters" (siehe oben für link zu docs mit vergleichstabelle):
 +
 +  * ''%%-dPDFSETTINGS=/default%%''
 +  * ''%%-dPDFSETTINGS=/screen%%''
 +  * ''%%-dPDFSETTINGS=/ebook%%''
 +  * ''%%-dPDFSETTINGS=/printer%%'' (empfohlen)
 +  * ''%%-dPDFSETTINGS=/prepress%%'' (empfohlen)
 +
 +
 +===== PDF-Dateien in TXT-Dateien umwandeln =====
 +
 +
 +==== der direkte Weg ====
 +
 +Normalerweise geht das auf diese Weise:
 +  pdf2ps Datei.pdf Datei.ps
 +  ps2ascii Datei.ps Datei.txt
 +
 +Das funktioniert das zum Beispiel bei Kontoaszügen der Postbank, bei Kontoauszügen der Commerzbank dagegen,
 +endet alles in unleserlichen Zeichen, wie diese hier:
 +<code>
 +Kreditkarten-Service der Commerzbank AG,Postfach 110347, 60038 Frankfurt
 +...
 +
 +\Gamma \Delta  \Theta \Lambda \Upsilon ! \Gamma \Lambda  \Theta \Lambda o/*`'ffiffl`'"""AEo/\Psi fiaeo/\Phi !i\Sigma `AE\Upsilon ` \Delta ,O/\Theta
 +\Gamma \Delta  \Theta \Lambda \Upsilon ! \Gamma \Lambda  \Theta \Lambda o/*`'ffiffl`'"""AEo/\Psi fiaeo/\Phi !i\Sigma `AE\Upsilon ` fl,_\Theta
 +\Gamma \Delta  \Theta \Lambda \Upsilon ! \Gamma \Lambda  \Theta \Lambda i'ff`\Omega '`ff\Upsilon ! !\Pi ffl' \Pi ae'\Omega  _#oeoe`^ \Gamma \Theta ,**
 +...
 +
 +50 Euro Startguthaben und ein komfortabler Konto-Umzugsservice- das kostenlose Girokonto* der Commerzbank zahlt sich aus!Unser Angebot: Sie zahlen dauerhaft keine Kontogebu"hren und wir erledigen den gesamten Schriftverkehr fu"r Sie - kostenlos und schnell.
 +
 +...
 +
 +Zahlungsempfa"nger:            Commerzbank AGBankverbindung:
 +
 +Commerzbank AGVerwendungszweck:
 +
 +So fu"llen Sie den U"berweisungstra"ger aus:
 +IBAN:BIC:
 +...
 +</code>
 +
 +Am [[http://bugs.ghostscript.com/show_bug.cgi?id=689107#c13|2007-07-26]] hat sich darüber bereits jemand bei [[http://ghostscript.com/|GhostScript]] beschwert, leider ohne Erfolg:
 +  * [[http://bugs.ghostscript.com/show_bug.cgi?id=689107|PDF->PS->Text conversion does not retain new lines]]
 +    * [[http://bugs.ghostscript.com/attachment.cgi?id=3215|new-output-category.txt]]
 +
 +Der [[http://bugs.ghostscript.com/show_bug.cgi?id=689107#c23|Bug-Report]] wurde trotzdem mit der folgenden Bemerkung geschlossen:
 +<code>
 +...
 +The \Delta, \Lambda, etc. strings mentioned in comment #13 continue in the 
 +output, but these are non-ascii characters and it's not clear what Ghostscript 
 +should be doing for these cases.
 +...
 +</code>
 +
 +Komisch nur, dass diese Zeichen ins HTML-Format übersetzt werden können und ins TXT-Format nicht...
 +
 +
 +==== der alternative Weg, um die oben genannten Probleme zu umgehen ====
 +
 +es hat sich gezeigt, dass die Zeichen so ordentlich umgewandelt werden und lesbar bleiben:
 +  pdftohtml Datei.pdf
 +
 +braucht man die Bilder nicht und will alles in einer einzigen datei haben, dann ist das hier besser geeignet:
 +  pdftohtml -enc UTF-8 -c -s -i -noframes -nodrm -hidden Datei.pdf
 +  cat Datei.html
 +
 +jetzt muss man nur noch ein geeignetes Programm für die Umwandlung ins Text-Format verwenden, hier ein paar Beispiele:
 +  lynx -dump Datei.html > Datei.txt
 +  links -dump links.html > Datei.txt
 +  abiword -t txt Datei.html
 +
 +Das alles in Skript-Form könnte zum Beispiel so aussehen:
 +<file bash pdf_zu_text.sh>
 +#!/bin/bash
 +
 +### einen Namen ohne Klammern und ohne Leerzeichen erzeugen
 +NEUERNAME="$(echo "${1}" | sed 's/[( )][( )]*/_/g')"
 +
 +### die Datei ggf. umkopieren, weil es sich mit Dateien,
 +### die Leerzeichen bzw. Klammern im Namen haben, schlecht arbeiten lässt
 +cp "${1}" ${NEUERNAME} 2>/dev/null
 +
 +### vom Namen die Endung abtrennen, um die Dateinamen von den automatisch erzeugten Dateien zu raten
 +DATEINAME="$(echo "${NEUERNAME}" | rev | sed 's/.*[.]//' | rev)"
 +
 +### PDF -> HTML
 +pdftohtml -enc UTF-8 -c -s -i -noframes -nodrm -hidden ${NEUERNAME}
 +
 +### HTML -> TXT
 +abiword -t txt --to-name=${DATEINAME}.txt ${DATEINAME}.html
 +
 +### Ergebnisse präsentieren
 +ls -lha ${DATEINAME}.txt ${DATEINAME}.html
 +</file>
 +
 +oder ins XML-Format:
 +  pdftohtml -c -i -xml -enc UTF-8 -noframes -nodrm -hidden Datei.pdf Datei_alles.xml
 +  pdftohtml -c -i -xml -enc UTF-8 -noframes -nodrm -hidden -f 1 -l 1 Datei.pdf Datei_Seite_1.xml
 +  pdftohtml -c -i -xml -enc UTF-8 -noframes -nodrm -hidden -f 2 -l 2 Datei.pdf Datei_Seite_2.xml
 +  pdftohtml -c -i -xml -enc UTF-8 -noframes -nodrm -hidden -f 3 -l 3 Datei.pdf Datei_Seite_3.xml
 +
 +**Allerdings gehen bei der Umwandlung vom HTML- ins TXT-Format die Positionen/Spalteninformationen verlohren, in der HTML- und XML-Datei sind sie noch vorhanden.**
 +
 +
 +===== PostScript-Code selber erstellen =====
 +
 +hilfreiche Literatur:
 +  * Das "Red Book", die Standardreferenz von Adobe, beschreibt PostScript Level 1 und 2 in allen Einzelheiten. "PostScript Language Reference Manual", Addison-Wesley, ISBN 0201-18127-4.
 +  * Das "Blue Book" ist die Einführung von Adobe in PostScript anhand einfacher Beispiele. "PostScript Language Tutorial and Cookbook", Addison-Wesley, ISBN 0201-10179-3.
 +  * Das "Green Book" ist eine Diskussion des Designs von PostScript-Programmen. "PostScript Language Program Design", Addison-Wesley, ISBN 0201-14396-8.
 +  * Aus meinem Kursskript ist eine erweiterte und umfassende Referenz und Einführung in die Sprache hervorgegangen, die 1995 im Hanser-Verlag erschienen ist. "PostScript - Einführung, Workshop, Referenz", Ingo Klöckl, Carl Hanser-Verlag 1995, ISBN 3-446-1838-17.
 +  * Einführender Artikel "Verkanntes Genie - Einführung in die PostScript-Programmierung", DOS International 4/1996 
 +  * Merz, Thomas / Drümmer, Olaf - "Die PostScript- & Acrobat-Bibel - Was Sie schon immer über PostScript und Acrobat/PDF wissen wollten" 2. Auflage 2002; 640 Seiten; ISBN 3-935320-01-9
 +
 +
 +==== Ausgabe ====
 +
 +**''# WARNING: The convert command is deprecated in IMv7, use "magick" instead of "convert" or "magick convert"''**
 +
 +  # ImageMagick7 in FreeBSD 14.2 installieren:
 +  > pkg install graphics/ImageMagick7
 +
 +so kann man die Ausgabe, mit Hilfe von //Ghostscript//, direkt am Bildschirm betrachten (Die bekannten "DEVICES" müssen in //Ghostscript// einkompiliert sein!):
 +  > gs -sDEVICE=x11 -sPAPERSIZE=a4 beispielseite.ps
 +
 +so kann man mit //ImageMagic// die programmierte Seite in ein Bild umwandeln (beim erstellen einer PNG-Datei muß der Farbraum mit angegeben werden):
 +  > gs -sDEVICE=png16m -r300 -o beispielseite.png beispielseite.ps
 +  > magick beispielseite.ps beispielseite.jpg
 +  > magick -page a4 -colorspace RGB -density 72 beispielseite.ps beispielseite.png
 +
 +**''# WARNING: The convert command is deprecated in IMv7, use "magick" instead of "convert" or "magick convert"''**
 +
 +so kann man mit //ImageMagic// die programmierte Seite in ein Dokument umwandeln:
 +  > magick -page a4 -density 72 beispielseite.ps beispielseite.pdf
 +
 +den Koordinatennullpunkt definiert man mit ''-gravity'', der Wert ''SouthWest'' bedeutet "unten links":
 +  > magick -gravity SouthWest -page a4 -density 72 beispielseite.ps beispielseite.pdf
 +
 +Für die Bildformate JPEG und MPEG beträgt die Qualität 1 (niedrigste Bildqualität und höchste Komprimierung) bis 100 (beste Qualität, aber am wenigsten effektive Komprimierung). Standardmäßig wird die geschätzte Qualität Ihres Eingabebildes verwendet, sofern diese bestimmt werden kann, andernfalls 92. Wenn die Qualität 90 oder höher ist, werden die Chroma-Kanäle nicht heruntergesampelt.
 +  > magick -gravity SouthWest -colorspace RGB -page a4 -quality 100 -density 72 beispielseite.ps beispielseite.png
 +
 +  127 DPI ergeben genau 05 Punkte pro mm
 +      für eine A4-Blattgröße ergibt das eine Auflösung von genau 1050x1485
 +  
 +  254 DPI ergeben genau 10 Punkte pro mm
 +      für eine A4-Blattgröße ergibt das eine Auflösung von genau 2100x2970
 +  
 +  381 DPI ergeben genau 15 Punkte pro mm
 +      für eine A4-Blattgröße ergibt das eine Auflösung von genau 3150x4455
 +
 +
 +==== Formatierung ====
 +
 +  At this time, the known paper sizes, defined in the initialization file
 +  "gs_statd.ps", are:
 +  
 +  
 +  PAPERSIZE    X inches   Y inches   X cm      Y cm      X dot   Y dot
 +  --------------------------------------------------------------------
 +  a0           33.0556    46.7778    83.9611   118.816
 +  a1           23.3889    33.0556    59.4078   83.9611
 +  a2           16.5278    23.3889    41.9806   59.4078
 +  a3           11.6944    16.5278    29.7039   41.9806
 +  a4           8.26389    11.6944    20.9903   29.7039   595     842
 +  a5           5.84722    8.26389    14.8519   20.9903   421     595
 +  a6           4.125      5.84722    10.4775   14.8519   297     421
 +  a7           2.91667    4.125      7.40833   10.4775   210     297
 +  a8           2.05556    2.91667    5.22111   7.40833
 +  a9           1.45833    2.05556    3.70417   5.22111
 +  a10          1.02778    1.45833    2.61056   3.70417
 +  b0           39.3889    55.6667    100.048   141.393
 +  b1           27.8333    39.3889    70.6967   100.048
 +  b2           19.6944    27.8333    50.0239   70.6967
 +  b3           13.9167    19.6944    35.3483   50.0239
 +  b4           9.84722    13.9167    25.0119   35.3483
 +  b5           6.95833    9.84722    17.6742   25.0119
 +  archA        9          12         22.86     30.48
 +  archB        12         18         30.48     45.72
 +  archC        18         24         45.72     60.96
 +  archD        24         36         60.96     91.44
 +  archE        36         48         91.44     121.92
 +  flsa         8.5        13         21.59     33.02
 +  flse         8.5        13         21.59     33.02
 +  halfletter   5.5        8.5        13.97     21.59
 +  note         7.5        10         19.05     25.4
 +  letter       8.5        11         21.59     27.94
 +  legal        8.5        14         21.59     35.56
 +  11x17        11         17         27.94     43.18
 +  ledger       17         11         43.18     27.94
 +
 +
 +==== Schriftarten (Font) ====
 +
 +um alle verfügbaren Schriftarten einsehen zu können, muß man sich die Suchpfade für die Schriftarten ausgeben lassen:
 +  > gs -h
 +  ...
 +  Search path:
 +     /usr/local/share/ghostscript/9.52/Resource/Init :
 +     /usr/local/share/ghostscript/9.52/lib :
 +     /usr/local/share/ghostscript/9.52/Resource/Font :
 +     /usr/local/share/ghostscript/fonts : /usr/local/share/fonts
 +  Ghostscript is also using fontconfig to search for font files
 +  For more information, see /usr/local/share/doc/ghostscript/9.52/Use.htm.
 +  Please report bugs to bugs.ghostscript.com.
 +
 +nun kann man in den einzelnen Pfaden nach Schriftarten suchen:
 +  > ls /usr/local/share/ghostscript/9.52/Resource/Font
 +  C059-BdIta                      NimbusRoman-Bold                NimbusSansNarrow-BoldOblique    URWBookman-DemiItalic
 +  C059-Bold                       NimbusRoman-BoldItalic          NimbusSansNarrow-Oblique        URWBookman-Light
 +  C059-Italic                     NimbusRoman-Italic              NimbusSansNarrow-Regular        URWBookman-LightItalic
 +  C059-Roman                      NimbusRoman-Regular             P052-Bold                       URWGothic-Book
 +  D050000L                        NimbusSans-Bold                 P052-BoldItalic                 URWGothic-BookOblique
 +  NimbusMonoPS-Bold               NimbusSans-BoldItalic           P052-Italic                     URWGothic-Demi
 +  NimbusMonoPS-BoldItalic         NimbusSans-Italic               P052-Roman                      URWGothic-DemiOblique
 +  NimbusMonoPS-Italic             NimbusSans-Regular              StandardSymbolsPS               Z003-MediumItalic
 +  NimbusMonoPS-Regular            NimbusSansNarrow-Bold           URWBookman-Demi
 +
 +  > less /usr/local/share/ghostscript/fonts/Fontmap
 +  ...
 +  % Actual fonts
 +  
 +  /URWBookmanL-DemiBold   (b018015l.pfb)  ;
 +  /URWBookmanL-DemiBoldItal       (b018035l.pfb)  ;
 +  /URWBookmanL-Ligh       (b018012l.pfb)  ;
 +  /URWBookmanL-LighItal   (b018032l.pfb)  ;
 +  
 +  /NimbusMonL-Regu        (n022003l.pfb)  ;
 +  /NimbusMonL-ReguObli    (n022023l.pfb)  ;
 +  /NimbusMonL-Bold        (n022004l.pfb)  ;
 +  /NimbusMonL-BoldObli    (n022024l.pfb)  ;
 +  
 +  /URWGothicL-Book        (a010013l.pfb)  ;
 +  /URWGothicL-BookObli    (a010033l.pfb)  ;
 +  /URWGothicL-Demi        (a010015l.pfb)  ;
 +  /URWGothicL-DemiObli    (a010035l.pfb)  ;
 +  
 +  /NimbusSanL-Regu        (n019003l.pfb)  ;
 +  /NimbusSanL-ReguItal    (n019023l.pfb)  ;
 +  /NimbusSanL-Bold        (n019004l.pfb)  ;
 +  /NimbusSanL-BoldItal    (n019024l.pfb)  ;
 +  
 +  /NimbusSanL-ReguCond    (n019043l.pfb)  ;
 +  /NimbusSanL-ReguCondItal        (n019063l.pfb)  ;
 +  /NimbusSanL-BoldCond    (n019044l.pfb)  ;
 +  /NimbusSanL-BoldCondItal        (n019064l.pfb)  ;
 +  
 +  /URWPalladioL-Roma      (p052003l.pfb)  ;
 +  /URWPalladioL-Ital      (p052023l.pfb)  ;
 +  /URWPalladioL-Bold      (p052004l.pfb)  ;
 +  /URWPalladioL-BoldItal  (p052024l.pfb)  ;
 +  
 +  /CenturySchL-Roma       (c059013l.pfb)  ;
 +  /CenturySchL-Ital       (c059033l.pfb)  ;
 +  /CenturySchL-Bold       (c059016l.pfb)  ;
 +  /CenturySchL-BoldItal   (c059036l.pfb)  ;
 +  
 +  /NimbusRomNo9L-Regu     (n021003l.pfb)  ;
 +  /NimbusRomNo9L-ReguItal (n021023l.pfb)  ;
 +  /NimbusRomNo9L-Medi     (n021004l.pfb)  ;
 +  /NimbusRomNo9L-MediItal (n021024l.pfb)  ;
 +  
 +  /StandardSymL   (s050000l.pfb)  ;
 +  
 +  /URWChanceryL-MediItal  (z003034l.pfb)  ;
 +  
 +  /Dingbats       (d050000l.pfb)  ;
 +  ...
 +
 +==== Beispiel ====
 +
 +  * [[https://youtu.be/5c0De1pHJ0U?list=PL3by7evD3F527t79cHU0Ki8anStBmCci2]]
 +    * [[https://youtu.be/YuOpHiW7qsg]]
 +
 +  # Operatoren
 +  lt - kleiner als
 +  gt - größer als
 +  eq - gleich
 +  ne - ungleich
 +  ge - größer oder gleich
 +  le - kleiner oder gleich
 +
 +''cvs'' konvertiert einen String in einen Integer
 +
 +<code ps>
 +% vergleiche, ob 4 kleiner ist als 3
 +4 3 lt
 +{
 +  (TruePart) print
 +}
 +{
 +  (FalsePart) print
 +}
 +ifelse
 +</code>
 +
 +<code ps>
 +% von 0 bis 4 in 1er-Schritten
 +0 1 4 {==} for
 +</code>
 +
 +<code ps>
 +/Counter 0 def
 +/Max 9 def
 +/Inc 1 def
 +{
 + Counter ==
 + Counter Max ge { exit } if
 + /Counter Counter Inc add def
 +} loop
 +</code>
 +
 +<code ps>
 +currentpoint /y exch def /x exch def                % aktuelle Position (X-Y-Koordinaten von der Start-Position bzw. dem Kreismittelpunkt) in x und y einspeichern
 +12 0 rmoveto                                        % zur 3-Uhr-Position des Kreises gehen (Radius nach rechts)
 +x y 12 0 360 arc                                    % einen Kreis, mit dem Radius von 12, um die Start-Position bzw. dem Kreismittelpunkt herum zeichnen
 +x y moveto                                          % zurück zur Start-Position bzw. Kreismittelpunkt
 +</code>
 +
 +<file ps Pfeil_nach_rechts.ps>
 +%!PS-Adobe-3.0
 +
 +/inch {72 mul} def
 +/cm {28.346457 mul} def
 +/mm {2.8346457 mul} def
 +
 +/Times-Roman findfont
 +10 scalefont setfont                    % Schriftgroesse
 +
 +%%% Beginn Pfeil nach rechts
 +newpath
 +
 +0.5 setlinewidth                        % Linienbreite
 +0 setgray                               % schwarz
 +
 +% Start
 +16 cm 4 cm moveto
 +
 +% nach rechts
 +3 cm 0 cm rlineto
 +
 +% nach oben
 +0 cm 0.5 cm rlineto
 +
 +% nach rechts unten
 +1 cm -1 cm rlineto
 +
 +% nach links unten
 +-1 cm -1 cm rlineto
 +
 +% nach oben
 +0 cm 0.5 cm rlineto
 +
 +% nach links
 +-3 cm 0 cm rlineto
 +
 +% nach oben
 +0 cm 0.5 cm rlineto
 +
 +%%% Ende Pfeil nach rechts
 +closepath
 +stroke
 +</file>
 +
 +<file ps Pfeil_links_gedreht.ps>
 +%!PS-Adobe-3.0
 +
 +/inch {72 mul} def
 +/cm {28.346457 mul} def
 +/mm {2.8346457 mul} def
 +
 +/Times-Roman findfont
 +12 scalefont setfont                    % Schriftgroesse
 +
 +%%% Beginn Pfeil links rum gedreht
 +newpath
 +
 +0.5 setlinewidth                        % Linienbreite
 +0 setgray                               % schwarz
 +
 +% Start - zum Drehpunkt gehen
 +16 cm 4 cm moveto
 +
 +% 45° links rum (gegen den Uhrzeigersinn) drehen
 +45 rotate
 +
 +% kompletten Pfeil um 1,5 cm nach rechts verschieben
 +1.5 cm 0 cm rmoveto
 +
 +% nach rechts
 +3 cm 0 cm rlineto
 +
 +% nach oben
 +0 cm 0.5 cm rlineto
 +
 +% nach rechts unten
 +1 cm -1 cm rlineto
 +
 +% nach links unten
 +-1 cm -1 cm rlineto
 +
 +% nach oben
 +0 cm 0.5 cm rlineto
 +
 +% nach links
 +-3 cm 0 cm rlineto
 +
 +% nach oben
 +0 cm 0.5 cm rlineto
 +
 +% zurückdrehen
 +-45 rotate
 +
 +%%% Ende Pfeil links rum gedreht
 +closepath
 +stroke
 +</file>
 +
 +<file ps Pfeil_rechts_gedreht.ps>
 +%!PS-Adobe-3.0
 +
 +/inch {72 mul} def
 +/cm {28.346457 mul} def
 +/mm {2.8346457 mul} def
 +
 +/Times-Roman findfont
 +12 scalefont setfont % Schriftgroesse
 +
 +%%% Beginn Pfeil rechts rum gedreht
 +newpath
 +
 +0.5 setlinewidth % Linienbreite
 +0 setgray % schwarz
 +
 +/pfeil-laenge-p {2 cm} def    % positive Länge des Pfeiles
 +/pfeil-breite-p {1 cm} def    % positive Breite des Pfeiles
 +
 +/pfeil-laenge-n {0 pfeil-laenge-p sub} def    % negative Länge des Pfeiles
 +/pfeil-breite-n {0 pfeil-breite-p sub} def  % negative Breite des Pfeiles
 +/pfeil-breite-halbe-p {pfeil-breite-p 0.5 mul} def    % positive halbe Breite des Pfeiles
 +/pfeil-breite-halbe-n {pfeil-breite-n 0.5 mul} def    % negative halbe Breite des Pfeiles
 +
 +4 cm 27 cm moveto % zum Drtehmittelpunkt gehen
 +-45 rotate % um -45° (rechts rum bzw. im Uhrzeigersinn) drehen
 +-3 cm 0 cm rmoveto % den Pfeil um 3 cm nach links verschieben
 +0 pfeil-breite-halbe-p rlineto % eine halbe Pfeilbreite nach oben
 +pfeil-laenge-p 0 rlineto % um die Pfeillänge nach rechts
 +0 pfeil-breite-halbe-p rlineto % eine halbe Pfeilbreite nach oben (1. Teil der Pfeilspitze)
 +pfeil-breite-p pfeil-breite-n rlineto % schräg nach rechts unten (2. Teil der Pfeilspitze)
 +pfeil-breite-n pfeil-breite-n rlineto % schräg nach links unten (3. Teil der Pfeilspitze)
 +0 pfeil-breite-halbe-p rlineto % eine halbe Pfeilbreite nach oben (4. Teil der Pfeilspitze)
 +pfeil-laenge-n 0 rlineto % um die Pfeillänge nach links
 +0 pfeil-breite-halbe-p rlineto % eine halbe Pfeilbreite nach oben
 +45 rotate % wieder in die Ausgangslage zurückdrehen
 +
 +%%% Ende Pfeil rechts rum gedreht
 +closepath
 +stroke
 +</file>
 +
 +<file ps zwei_Kreise.ps>
 +%!PS-Adobe-3.0
 +%
 +% "0, 0" ist unten links in der Ecke
 +% x, y
 +% x = wagerecht
 +% y = senkrecht
 +%
 +%%% Kreis zeichnen                                   :    "4 cm 11 cm 1 cm 0 360 arc"
 +%   Kreismittelpunkt                                 :     4 cm nach rechts, 11 cm nach oben
 +%   Radius                                           :     1 cm
 +%   Kreisbogenanfang                                 :     0° (Position "drei Uhr")
 +%   Winkel des Kreisbogens entgegen dem Uhrzeigersinn:   360°
 +%
 +%
 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 +
 +/inch {72 mul} def
 +/cm {28.346457 mul} def
 +/mm {2.8346457 mul} def
 +
 +/Times-Roman findfont
 +20 scalefont
 +setfont
 +
 +1 setlinewidth
 +0 setgray       % schwarz
 +
 +%%% Beginn
 +newpath
 +
 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 +
 +% linker Kreis
 +8 cm 23 cm moveto
 +5 cm 23 cm 3 cm 0 360 arc
 +
 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 +
 +% rechter Kreis
 +18 cm 23 cm moveto
 +15 cm 23 cm 3 cm 0 360 arc
 +
 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 +
 +%%% Ende
 +closepath
 +
 +stroke
 +showpage
 +</file>
 +
 +<file ps beispielseite.ps>
 +%!PS-Adobe-3.0
 +%
 +% 1 inch (1"             = 6 pica
 +% 1 pica                   = 12 dot
 +% 1 inch (6 pica x 12 dot) = 72 dpi (dot per inch)
 +%
 +% "0, 0" ist unten links in der Ecke
 +% x, y
 +% x = wagerecht
 +% y = senkrecht
 +%
 +%
 +%%% Kreis zeichnen                                   :    "4 cm 11 cm 1 cm 0 360 arc"
 +%   Kreismittelpunkt                                 :     4 cm nach rechts, 11 cm nach oben
 +%   Radius                                           :     1 cm
 +%   Kreisbogenanfang                                 :     0° (Position "drei Uhr")
 +%   Winkel des Kreisbogens entgegen dem Uhrzeigersinn:   360°
 +%
 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 +
 +/inch {72 mul} def
 +/cm {28.346457 mul} def
 +
 +/Times-Roman findfont
 +20 scalefont
 +setfont
 +
 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 +%%% Linienbreite
 +%   1 setlinewidth  % Linienbreite in "dot"
 +
 +%%% unterbrochene Linie
 +%   [ 10 5 2 5 ] 5 setdash    % 10 Punkte schwartz, 5 Punkte weis, 2 Punkte schwartz, 5 Punkte weis (Srich-Punkt-Linie)
 +%                           % die erste Linie ist beim ersten Aufruf um 5 Punkte verkuerzt
 +
 +%%% Anfangs- und Endform der Linie
 +%   0 setlinecap    % Quadratrand, der mit der Definition der Linie endet
 +%   1 setlinecap    % gerundeter Rand des Radius der halbfetten Linie
 +%   2 setlinecap    % Quadratschluss, der aber um die Dickenhaelfte der Linie verlaengert ist
 +
 +%%% Knickformen der Linie
 +%   0 setlinejoin   % bis zum bilden des spitzen Winkels (Gehrung)
 +%   1 setlinejoin   % schliessen sich mit einer Rundung der Linienbreite (rund)
 +%   2 setlinejoin   % Verbindung wird vertikal abgeschraegt mit der Laenge der Linienbreite (abgeschraegt)
 +
 +%%% Grau-Toenung
 +%   0 setgray                               % 0=schwarz / 0.5=grau / 1=weiss
 +
 +%%% Faerbung
 +%   .7 .1 .2 setrgbcolor                    % rot-Werte gruen-Werte blau-Werte
 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 +
 +%%% Beginn
 +newpath
 +
 +%      PAPERSIZE    X inches   Y inches
 +%      a4           8.26389    11.6944
 +1.2 inch 10 inch moveto
 +(ein Zoll zum Quadrat, mit "rlineto") show
 +1.2 inch 8.8 inch moveto
 +1 inch 0 inch rlineto
 +0 inch 1 inch rlineto
 +-1 inch 0 inch rlineto
 +0 inch -1 inch rlineto
 +
 +%      PAPERSIZE    X cm      Y cm
 +%      a4           20.9903   29.7039
 +3 cm 19.5 cm moveto
 +(ein Zentimeter zum Quadrat, mit "lineto") show
 +3 cm 18 cm moveto
 +4 cm 18 cm lineto
 +4 cm 19 cm lineto
 +3 cm 19 cm lineto
 +3 cm 18 cm lineto
 +
 +%%% Kreis zeichnen
 +% der Anfang liegt bei "drei Uhr", 90° liegen bei "zwoelf Uhr"
 +3 cm 15.3 cm moveto
 +(einen Kreis mit einem Zentimeter Durchmesser,) show
 +3 cm 14.5 cm moveto
 +(mit "arc" gezeichnet) show
 +
 +%%% Tortenstueck
 +% Beginn im Mittelpunkt
 +4 cm 13 cm moveto
 +4 cm 13 cm 1 cm 0 90 arc
 +% schliessen zum Kreismittelpunkt
 +4 cm 13 cm lineto
 +
 +%%% Vollkreis
 +% Beginn bei "drei Uhr"
 +5 cm 11 cm moveto
 +4 cm 11 cm 1 cm 0 360 arc
 +
 +3 cm 9 cm moveto
 +(der Anfang liegt bei "drei Uhr",) show
 +3 cm 8.2 cm moveto
 +(90 Grad liegen bei "zwoelf Uhr") show
 +
 +%%% Ende
 +closepath
 +
 +stroke
 +showpage
 +</file>
 +
 +<file ps beispielseite_2.ps>
 +%!PS-Adobe-3.0
 +%
 +% "0, 0" ist unten links in der Ecke
 +% x, y
 +% x = wagerecht
 +% y = senkrecht
 +%
 +%
 +%%% Kreis zeichnen: "4 cm 11 cm 1 cm 0 360 arc"
 +%   Kreismittelpunkt:                                      4 cm nach rechts, 11 cm nach oben
 +%   Radius:                                                1 cm
 +%   Kreisbogenanfang:                                      0° (Position "drei Uhr")
 +%   Winkel des Kreisbogens entgegen dem Uhrzeigersinn:   360°
 +%
 +%%% Linien
 +%   "links" "unten" moveto
 +%   "links" "unten" lineto
 +%   "nach rechts" "nach oben" rlineto
 +%
 +%%% Farbe
 +%   0 setgray                               % 0=schwarz / 0.5=grau / 1=weiss
 +%   .7 .1 .2 setrgbcolor                    % rot-Werte gruen-Werte blau-Werte
 +%
 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 +
 +/inch {72 mul} def
 +/cm {28.346457 mul} def
 +/mm {2.8346457 mul} def
 +
 +/Times-Roman findfont
 +20 scalefont
 +setfont
 +
 +1 setlinewidth
 +
 +%%% Beginn
 +newpath
 +
 +
 +%%% Ende
 +closepath
 +
 +stroke
 +showpage
 +</file>
 +
 +<file ps abgerundete-ecke.ps>
 +%!PS-Adobe-3.0
 +%
 +% "0, 0" ist unten links in der Ecke
 +% x, y
 +% x = wagerecht
 +% y = senkrecht
 +%
 +%
 +%%% Kreis zeichnen                                   :    "4 cm 11 cm 1 cm 0 360 arc"
 +%   Kreismittelpunkt                                 :     4 cm nach rechts, 11 cm nach oben
 +%   Radius                                           :     1 cm
 +%   Kreisbogenanfang                                 :     0° (Position "drei Uhr")
 +%   Winkel des Kreisbogens entgegen dem Uhrzeigersinn:   360°
 +%
 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 +
 +/inch {72 mul} def
 +/cm {28.346457 mul} def
 +
 +/Times-Roman findfont
 +20 scalefont
 +setfont
 +
 +1 setlinewidth
 +0 setgray       % schwarz
 +
 +%%% Beginn
 +newpath
 +
 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 +
 +0 cm 1 cm moveto
 +5 cm 1 cm 5 cm 10 cm 1 cm arct
 +5 cm 10 cm lineto
 +
 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 +% 5 cm 1 cm ............... arct % lineto zu dieser Koordinate
 +% ......... 5 cm 10 cm .... arct % um die Ecke zu dieser Koordinate
 +% .................... 1 cm arct % Radius des Kreisbogens um die Ecke
 +% 5 cm 1 cm 5 cm 10 cm 1 cm arct % kompletter Befehl
 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 +
 +%%% Ende
 +closepath
 +
 +stroke
 +showpage
 +</file>
 +
 +<file ps test_1.ps>
 +%!PS-Adobe-3.0
 +%
 +% "0, 0" ist unten links in der Ecke
 +% x, y
 +% x = wagerecht
 +% y = senkrecht
 +%
 +%
 +%%% Kreis zeichnen                                   :    "4 cm 11 cm 1 cm 0 360 arc"
 +%   Kreismittelpunkt                                 :     4 cm nach rechts, 11 cm nach oben
 +%   Radius                                           :     1 cm
 +%   Kreisbogenanfang                                 :     0° (Position "drei Uhr")
 +%   Winkel des Kreisbogens entgegen dem Uhrzeigersinn:   360°
 +%
 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 +
 +/inch {72 mul} def
 +/cm {28.346457 mul} def
 +
 +/Times-Roman findfont
 +20 scalefont
 +setfont
 +
 +1 setlinewidth
 +0 setgray       % schwarz
 +
 +%%% Beginn
 +newpath
 +
 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 +
 +%%%% linker Kreis
 +%%%8 cm 23 cm moveto
 +%%%5 cm 23 cm 3 cm 0 360 arc
 +
 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 +
 +%%%% rechter Kreis
 +%%%18 cm 23 cm moveto
 +%%%15 cm 23 cm 3 cm 0 360 arc
 +
 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 +
 +% oberer Kreis
 +15 cm 21 cm moveto
 +10 cm 21 cm 5 cm 0 360 arc
 +
 +closepath
 +gsave
 +stroke
 +10 cm 21 cm 6 cm 0 30 arc
 +grestore
 +newpath
 +10 cm 21 cm 6 cm 30 60 arc
 +
 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 +
 +% unterer Kreis
 +15 cm 7 cm moveto
 +10 cm 7 cm 5 cm 0 360 arc
 +
 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 +
 +%[ 10 5 2 5 ] 5 setdash    % 10 Punkte schwartz, 5 Punkte weis, 2 Punkte schwartz, 5 Punkte weis (Srich-Punkt-Linie)
 +%                          % die erste Linie ist beim ersten Aufruf um 5 Punkte verkuerzt
 +%0 cm 14 cm moveto
 +%21 cm 0 cm rlineto
 +
 +%%% Ende
 +closepath
 +
 +stroke
 +showpage
 +</file>
 +
 +<file ps Rosette.ps>
 +%!PS-Adobe-3.0
 +
 +/d 7.5 def % Feinheit der Rosette
 +
 +gsave % speichere graphische Attribute
 +200 200 translate % verschiebe Ursprung
 +50 50 scale % 1 Einheit = 50pt
 +.02 setlinewidth % Linienbreite
 +
 +1 0 moveto % erste Linie
 +360 d div cvi % wie oft?
 +{ 120 d add rotate % drehe alles
 +  1 0 lineto % ziehe Linie
 +} repeat % Schleifenende
 +stroke % ziehe Pfad mit Farbe nach
 +
 +grestore showpage % alles sichtbar machen
 +</file>
 +
 +
 +<file ps Vorlage.ps>
 +%!PS-Adobe-3.0
 +%
 +% "0, 0" ist unten links in der Ecke
 +% x, y
 +% x = wagerecht
 +% y = senkrecht
 +%
 +%
 +%%% Kreis zeichnen: "4 cm 11 cm 1 cm 0 360 arc"
 +%   Kreismittelpunkt:                                      4 cm nach rechts, 11 cm nach oben
 +%   Radius:                                                1 cm
 +%   Kreisbogenanfang:                                      0° (Position "drei Uhr")
 +%   Winkel des Kreisbogens entgegen dem Uhrzeigersinn:   360°
 +%
 +%%% Linien
 +%   "links" "unten" moveto
 +%   "links" "unten" lineto
 +%   "nach rechts" "nach oben" rlineto
 +%
 +%%% Farbe
 +%   0 setgray                               % 0=schwarz / 0.5=grau / 1=weiss
 +%   .7 .1 .2 setrgbcolor                    % rot-Werte gruen-Werte blau-Werte
 +%
 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 +
 +/inch {72 mul} def
 +/cm {28.346457 mul} def
 +/mm {2.8346457 mul} def
 +
 +/Times-Roman findfont
 +20 scalefont
 +setfont
 +
 +1 setlinewidth
 +
 +%%% Beginn
 +newpath
 +
 +
 +%%% Ende
 +closepath
 +
 +stroke
 +showpage
 +</file>
 +
 +{{ :bilder:ziffernblatt.png?400|}}
 +<file ps Ziffernblatt.ps>
 +%!PS-Adobe-3.0
 +%
 +% "0, 0" ist unten links in der Ecke
 +% x, y
 +% x = wagerecht
 +% y = senkrecht
 +%
 +%%% Kreis zeichnen                                   :    "4 cm 11 cm 1 cm 0 360 arc"
 +%   Kreismittelpunkt                                 :     4 cm nach rechts, 11 cm nach oben
 +%   Radius                                           :     1 cm
 +%   Kreisbogenanfang                                 :     0° (Position "drei Uhr")
 +%   Winkel des Kreisbogens entgegen dem Uhrzeigersinn:   360°
 +%
 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 +
 +/inch {72 mul} def
 +/cm {28.346457 mul} def
 +/mm {2.8346457 mul} def
 +
 +/xmitte {10.5 cm} def
 +/ymitte {14.8 cm} def
 +
 +/radius-klein  {6 cm} def % 06,0 cm - Kreis
 +/radius-mittel {8.5 cm} def % 08,5 cm - Kreis
 +/radius-gross  {10 cm} def % 10,0 cm - Kreis
 +
 +% damit bekommt die Blattmitte die Koordinaten X="0" und Y="0"
 +xmitte ymitte translate
 +
 +/Times-Roman findfont
 +20 scalefont setfont
 +
 +1 setlinewidth
 +0 setgray % schwarz
 +
 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 +
 +% â /acircumflex ä /adieresis Ä /Adieresis
 +% à /agrave ç /ccedilla Ç /Ccedilla
 +% é /eacute É /Eacute ê /ecircumflex
 +% ë /edieresis è /egrave € /Euro
 +% ï  /idieresis ô /ocircumflex ö /odieresis
 +% Ö /Odieresis ß /germandbls ü /udieresis
 +% Ü /Udieresis
 +
 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 +% Kreis (links herum gezeichnet)
 +% xmitte ymitte radius 0 360 arc
 +%
 +% Kreis: X-Mittelpunkt Y-Mittelpunkt Radius Kreisbeginn Kreisende
 +% xmitte ymitte radius 360 0 arcn
 +%
 +% bei "arc" ist "0" die 3-Uhr-Position, arc dreht links herum
 +% bei "arcn" ist "0" die 3-Uhr-Position, arcn dreht rechts herum
 +%
 +% Nach einem "arc" oder "arcn", zeichnet auch ein "moveto",
 +% deshalb ist es besser, wenn sie jeweils in einen eigenen "path"
 +% gekapselt werden.
 +%
 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 +% Kreise
 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 +
 +newpath
 +0 0 radius-klein  360 0 arcn  % 06,0 cm - Kreis
 +closepath
 +stroke
 +
 +newpath
 +0 0 radius-mittel 360 0 arcn  % 08,5 cm - Kreis
 +closepath
 +stroke
 +
 +newpath
 +0 0 radius-gross  360 0 arcn % 10,0 cm - Kreis
 +closepath
 +stroke
 +
 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 +
 +newpath % Beginn
 +
 +% Mittelpunkt
 +0 0 moveto
 +1 0 rlineto
 +
 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 +% Stunden-Striche
 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 +
 +% Anfangswert Inkrement Laufgrenze {Befehlsfolge} for
 +% Anfangswert=1 / nach jeden Durchlauf um 1 erhöhen / bis die 12 erreicht wurde
 +1 1 12
 +{
 + 0 0 moveto % zum Mittelpunkt gehen
 + 30 rotate
 + radius-mittel 0 rmoveto
 + -0.5 cm 0 rlineto % Stunden-Strich zeichnen
 +
 + 0 0 moveto % zum Mittelpunkt gehen
 + radius-klein 0 rmoveto
 + 0.5 cm 0 rlineto % Stunden-Strich zeichnen
 +} for % Schleifenende
 +
 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 +% Minuten- bzw. Sekunden-Striche
 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 +
 +60 % wie oft?
 +{
 + 0 0 moveto % zum Mittelpunkt gehen
 + 6 rotate
 + radius-mittel 0 rmoveto
 + 0.5 cm 0 rlineto % Minuten- bzw. Sekunden-Strich zeichnen
 + 0.2 cm 0 rmoveto
 +} repeat % Schleifenende
 +
 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 +% Minuten- bzw. Sekunden-Zahlen
 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 +
 +-10 -5 translate    % neuen Mittelpunkt festlegen
 +0 0 moveto % zum neuen Mittelpunkt gehen
 +%1 1 rlineto % Orientierungspunkt - Test
 +90 rotate % Ausgangspunkt von 3-Uhr- auf 12-Uhr-Position verdrehen
 +-0.6 rotate % optische Anpassung
 +
 +/i -1 def
 +/r {radius-mittel 28 add} def
 +{
 + /i i 1 add def
 + i 60 ge { exit } if
 +
 + /gp {i 6 mul} def
 + /gn {i -6 mul} def
 + /grad-p {gp 90 sub} def
 + /grad-n {gn 90 add} def
 +
 + /t {gp 2 div} def  % Versatz des Winkels, weil die Zahl schräg steht und der Drehpunkt immer Am Zahlenfuß ist
 + /v {t sin} def  % Sinus von t, in v speichern
 + /b {v 12 mul} def % damit die Zahlen mittig zwischen den Strichen angeordnet sind
 +
 + 0 0 moveto % zum Mittelpunkt gehen
 + r 0 rmoveto
 + %b 0 rmoveto
 +
 + %1 0 rlineto % Positionspunkt - Test
 + grad-p rotate % beim 1. mal: -90 rotate
 + %-6 0 rmoveto
 +
 + %(.) show
 + %b 9 string cvs show ( ) show
 + i 2 string cvs show () show
 + %grad-p 3 string cvs show ( ) show  % Test
 + %grad-n 4 string cvs show ( ) show  % Test
 + grad-n  rotate % beim 1. mal: 90 rotate
 + -6 rotate
 +} loop % Schleifenende
 +
 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 +% Stunden-Striche + Stunden-Zahlen
 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 +
 +1.5 rotate
 +0 -3 translate    % neuen Mittelpunkt festlegen (höhe / seite)
 +/i 0 def
 +/r {radius-klein 1.2 cm add} def
 +{
 + /i i 1 add def
 + i 12 gt { exit } if
 +
 + /gp {i 30 mul} def
 + /gn {i -30 mul} def
 + /grad-p {gp 90 sub} def
 + /grad-n {gn 90 add} def
 +
 + 0 0 moveto % zum Mittelpunkt gehen
 + -30 rotate
 + r 0 rmoveto
 +
 + grad-p rotate % beim 1. mal: -90 rotate
 +
 + %b 9 string cvs show ( ) show
 + i 2 string cvs show ( ) show
 + %grad-p 3 string cvs show ( ) show  % Test
 + %grad-n 4 string cvs show ( ) show  % Test
 + grad-n  rotate % beim 1. mal: 90 rotate
 +} loop % Schleifenende
 +
 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 +
 +%[ 10 5 2 5 ] 5 setdash % 10 Punkte schwarz, 5 Punkte weiß, 2 Punkte schwartz, 5 Punkte weis (Srich-Punkt-Linie)
 +% % die erste Linie ist beim ersten Aufruf um 5 Punkte verkuerzt
 +%0 cm 14 cm moveto
 +%21 cm 0 cm rlineto
 +
 +closepath % beenden der Zeichnung
 +stroke % zeichnen der bisherigen Zeichnung
 +showpage % komplette Seite zeigen
 +</file>
 +
 +
 +==== Umlaute, Skalierung und Maßstab in PS ====
 +
 +
 +=== Skalierung (höhere DPI-Werte) in PS ===
 +
 +<code ps>
 +%!PS-Adobe 3.0
 +
 +% Skalierung
 +127 25.4 div dup scale % bei 127 DPI ist 1 mm exakt 5 Pixel lang
 +
 +/mm {5 mul} def % einen Millimeter "mm" mit 5 Pixel definieren
 +
 +%25 scalefont setfont % Schriftgröße in Pixel festlegen, damit sie mit den Zeichnungen skaliert
 +5 mm scalefont setfont % Schriftgröße in Millimeter festlegen, damit sie nie skaliert und immer lesbar bleibt
 +
 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 +
 +...
 +</code>
 +
 +
 +=== Maßstab in PS ===
 +
 +<code ps>
 +%!PS-Adobe 3.0
 +
 +%%% Maßstab der Zeichnung
 +%/massstab {3} def % 1:3 - hierbei entsprechen "3 Pixel" genau "1 mm"
 +/massstab {1} def % 1:1 - hierbei entspricht "1 Pixel" genau "1 mm"
 +
 +/mm {massstab mul} def
 +
 +% damit alles automatisch im richtien Maßstab angezeigt wird
 +%72 25.4 div massstab div dup scale % bei 72 DPI (allgemeiner Standard) ist 1 Zoll (25,4 mm) exakt 72 Pixel lang
 +127 25.4 div massstab div dup scale % bei 127 DPI ist 1 mm exakt 5 Pixel lang (0,2 mm je Pixel)
 +%254 25.4 div massstab div dup scale % bei 254 DPI ist 1 mm exakt 10 Pixel lang (0,1 mm je Pixel)
 +%381 25.4 div massstab div dup scale % bei 381 DPI ist 1 mm exakt 15 Pixel lang (0,066666666667 mm je Pixel)
 +%508 25.4 div massstab div dup scale % bei 508 DPI ist 1 mm exakt 20 Pixel lang (0,05 mm je Pixel)
 +
 +5 mm scalefont setfont % Schriftgröße in Millimeter, damit sie nie skaliert und immer lesbar bleibt
 +
 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 +
 +...
 +</code>
 +
 +
 +=== Umlaute in PS ===
 +
 +Um in PS/PDF-Dokumenten mit Umlauten schreiben zu können,
 +muss man einen PS-Zeichensatz mit Umlauten haben.
 +
 +__Damit man hiermit auch Umlaute darstellen kann ist es zwingend erforderlich,
 +dass die PS-Datei im gleichen Zeichensatz abgespeichert wird, wie der ist, den wir mit Umlauten haben!__
 +In diesem Fall habe ich den Zeichensatz **''WINDOWS-1252''** (''ISO-1252'').
 +Er wurde seinerzeit von //OpenOffice.org 1.0.3// verwendet wurde, um Daten dem Drucker zu übergeben.
 +
 +Die Handhabung kann beispielsweise so aussehen (72 DPI):
 +  # die PS-Datei schreiben/erstellen:
 +  [user@rechner ~]$ vim Test.ps
 +  
 +  # die PS-Datei vom üblichen UTF-8-Encoding (Linux) ins WINDOWS-1252-Encoding überführen und direkt an ImageMagick übergeben:
 +  [user@rechner ~]$ cat Test.ps | iconv -f UTF-8 -t WINDOWS-1252 |
 +  
 +  # die neue PS-Datei einmal in das PDF-Format (Dokument) und einmal in das PNG-Format (Bild) umwandeln:
 +  [user@rechner ~]$ cat Test.ps | iconv -f UTF-8 -t WINDOWS-1252 | magick -gravity SouthWest -colorspace RGB -quality 100 - Test.pdf
 +  [user@rechner ~]$ cat Test.ps | iconv -f UTF-8 -t WINDOWS-1252 | magick -gravity SouthWest -colorspace RGB -quality 100 - Test.png
 +
 +Ggf. kann man die PS-Datei auch im grafischen Editor ''GEdit'' schreiben/erstellen, denn hier kann man für die PS-Datei, beim abspeichern, das gewünschte Encoding auswählen.
 +So spart man sich den Umwandlungsschritt mit ''iconv''.
 +
 +Hier der besagte PS-Zeichensatz mit Umlauten und Sonderzeichen:
 +<code ps>
 +%!PS-Adobe 3.0
 +
 +%%BeginProlog (OpenOffice.org 1.0.3)
 +/ISO1252Encoding [
 +/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
 +/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
 +/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
 +/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
 +/space /exclam /quotedbl /numbersign /dollar /percent /ampersand /quotesingle
 +/parenleft /parenright /asterisk /plus /comma /hyphen /period /slash 
 +/zero /one /two /three /four /five /six /seven
 +/eight /nine /colon /semicolon /less /equal /greater /question
 +/at /A /B /C /D /E /F /G
 +/H /I /J /K /L /M /N /O
 +/P /Q /R /S /T /U /V /W
 +/X /Y /Z /bracketleft /backslash /bracketright /asciicircum /underscore
 +/grave /a /b /c /d /e /f /g
 +/h /i /j /k /l /m /n /o
 +/p /q /r /s /t /u /v /w
 +/x /y /z /braceleft /bar /braceright /asciitilde /unused
 +/Euro /unused /quotesinglbase /florin /quotedblbase /ellipsis /dagger /daggerdbl
 +/circumflex /perthousand /Scaron /guilsinglleft /OE /unused /Zcaron /unused
 +/unused /quoteleft /quoteright /quotedblleft /quotedblright /bullet /endash /emdash
 +/tilde /trademark /scaron /guilsinglright /oe /unused /zcaron /Ydieresis
 +/space /exclamdown /cent /sterling /currency /yen /brokenbar /section
 +/dieresis /copyright /ordfeminine /guillemotleft /logicalnot /hyphen /registered /macron
 +/degree /plusminus /twosuperior /threesuperior /acute /mu /paragraph /periodcentered
 +/cedilla /onesuperior /ordmasculine /guillemotright /onequarter /onehalf /threequarters /questiondown
 +/Agrave /Aacute /Acircumflex /Atilde /Adieresis /Aring /AE /Ccedilla
 +/Egrave /Eacute /Ecircumflex /Edieresis /Igrave /Iacute /Icircumflex /Idieresis
 +/Eth /Ntilde /Ograve /Oacute /Ocircumflex /Otilde /Odieresis /multiply
 +/Oslash /Ugrave /Uacute /Ucircumflex /Udieresis /Yacute /Thorn /germandbls
 +/agrave /aacute /acircumflex /atilde /adieresis /aring /ae /ccedilla
 +/egrave /eacute /ecircumflex /edieresis /igrave /iacute /icircumflex /idieresis
 +/eth /ntilde /ograve /oacute /ocircumflex /otilde /odieresis /divide
 +/oslash /ugrave /uacute /ucircumflex /udieresis /yacute /thorn /ydieresis] def
 +
 +/psp_definefont { exch dup findfont dup length dict begin { 1 index /FID ne
 +{ def } { pop pop } ifelse } forall /Encoding 3 -1 roll def
 +currentdict end exch pop definefont pop } def
 +
 +/pathdict dup 8 dict def load begin
 +/rcmd { { currentfile 1 string readstring pop 0 get dup 32 gt { exit }
 +{ pop } ifelse } loop dup 126 eq { pop exit } if 65 sub dup 16#3 and 1
 +add exch dup 16#C and -2 bitshift 16#3 and 1 add exch 16#10 and 16#10
 +eq 3 1 roll exch } def
 +/rhex { dup 1 sub exch currentfile exch string readhexstring pop dup 0
 +get dup 16#80 and 16#80 eq dup 3 1 roll { 16#7f and } if 2 index 0 3
 +-1 roll put 3 1 roll 0 0 1 5 -1 roll { 2 index exch get add 256 mul }
 +for 256 div exch pop exch { neg } if } def
 +/xcmd { rcmd exch rhex exch rhex exch 5 -1 roll add exch 4 -1 roll add
 +1 index 1 index 5 -1 roll { moveto } { lineto } ifelse } def end  
 +/readpath { 0 0 pathdict begin { xcmd } loop end pop pop } def
 +
 +systemdict /languagelevel known not {
 +/xshow { exch dup length 0 1 3 -1 roll 1 sub { dup 3 index exch get
 +exch 2 index exch get 1 string dup 0 4 -1 roll put currentpoint 3 -1
 +roll show moveto 0 rmoveto } for pop pop } def
 +/rectangle { 4 -2 roll moveto 1 index 0 rlineto 0 exch rlineto neg 0
 +rlineto closepath } def
 +/rectfill { rectangle fill } def
 +/rectstroke { rectangle stroke } def } if
 +
 +/psp_lzwfilter { currentfile /ASCII85Decode filter /LZWDecode filter } def
 +/psp_ascii85filter { currentfile /ASCII85Decode filter } def
 +/psp_lzwstring { psp_lzwfilter 1024 string readstring } def
 +/psp_ascii85string { psp_ascii85filter 1024 string readstring } def
 +/psp_imagedict {
 +/psp_bitspercomponent { 3 eq { 1 }{ 8 } ifelse } def
 +/psp_decodearray { [ [0 1 0 1 0 1] [0 255] [0 1] [0 255] ] exch get }
 +def 7 dict dup
 +/ImageType 1 put dup
 +/Width 7 -1 roll put dup
 +/Height 5 index put dup
 +/BitsPerComponent 4 index psp_bitspercomponent put dup
 +/Decode 5 -1 roll psp_decodearray put dup
 +/ImageMatrix [1 0 0 1 0 0] dup 5 8 -1 roll put put dup
 +/DataSource 4 -1 roll 1 eq { psp_lzwfilter } { psp_ascii85filter } ifelse put
 +} def
 +%%EndProlog (OpenOffice.org 1.0.3)
 +
 +/URWGothicL-Book-iso1252              /URWGothicL-Book              ISO1252Encoding psp_definefont
 +/URWGothicL-Demi-iso1252              /URWGothicL-Demi              ISO1252Encoding psp_definefont
 +/URWGothicL-BookObli-iso1252          /URWGothicL-BookObli          ISO1252Encoding psp_definefont
 +/URWGothicL-DemiObli-iso1252          /URWGothicL-DemiObli          ISO1252Encoding psp_definefont
 +/URWBookmanL-Ligh-iso1252             /URWBookmanL-Ligh             ISO1252Encoding psp_definefont
 +/URWBookmanL-DemiBold-iso1252         /URWBookmanL-DemiBold         ISO1252Encoding psp_definefont
 +/URWBookmanL-LighItal-iso1252         /URWBookmanL-LighItal         ISO1252Encoding psp_definefont
 +/URWBookmanL-DemiBoldItal-iso1252     /URWBookmanL-DemiBoldItal     ISO1252Encoding psp_definefont
 +/CharterBT-Bold-iso1252               /CharterBT-Bold               ISO1252Encoding psp_definefont
 +/CharterBT-BoldItalic-iso1252         /CharterBT-BoldItalic         ISO1252Encoding psp_definefont
 +/CharterBT-Roman-iso1252              /CharterBT-Roman              ISO1252Encoding psp_definefont
 +/CharterBT-Italic-iso1252             /CharterBT-Italic             ISO1252Encoding psp_definefont
 +/CenturySchL-Roma-iso1252             /CenturySchL-Roma             ISO1252Encoding psp_definefont
 +/CenturySchL-Bold-iso1252             /CenturySchL-Bold             ISO1252Encoding psp_definefont
 +/CenturySchL-Ital-iso1252             /CenturySchL-Ital             ISO1252Encoding psp_definefont
 +/CenturySchL-BoldItal-iso1252         /CenturySchL-BoldItal         ISO1252Encoding psp_definefont
 +/NimbusSanL-Regu-iso1252              /NimbusSanL-Regu              ISO1252Encoding psp_definefont
 +/NimbusSanL-Bold-iso1252              /NimbusSanL-Bold              ISO1252Encoding psp_definefont
 +/NimbusSanL-ReguItal-iso1252          /NimbusSanL-ReguItal          ISO1252Encoding psp_definefont
 +/NimbusSanL-BoldItal-iso1252          /NimbusSanL-BoldItal          ISO1252Encoding psp_definefont
 +/NimbusSanL-ReguCond-iso1252          /NimbusSanL-ReguCond          ISO1252Encoding psp_definefont
 +/NimbusSanL-BoldCond-iso1252          /NimbusSanL-BoldCond          ISO1252Encoding psp_definefont
 +/NimbusSanL-ReguCondItal-iso1252      /NimbusSanL-ReguCondItal      ISO1252Encoding psp_definefont
 +/NimbusSanL-BoldCondItal-iso1252      /NimbusSanL-BoldCondItal      ISO1252Encoding psp_definefont
 +/NimbusRomNo9L-Regu-iso1252           /NimbusRomNo9L-Regu           ISO1252Encoding psp_definefont
 +/NimbusRomNo9L-Medi-iso1252           /NimbusRomNo9L-Medi           ISO1252Encoding psp_definefont
 +/NimbusRomNo9L-ReguItal-iso1252       /NimbusRomNo9L-ReguItal       ISO1252Encoding psp_definefont
 +/NimbusRomNo9L-MediItal-iso1252       /NimbusRomNo9L-MediItal       ISO1252Encoding psp_definefont
 +/NimbusMonL-Regu-iso1252              /NimbusMonL-Regu              ISO1252Encoding psp_definefont
 +/NimbusMonL-Bold-iso1252              /NimbusMonL-Bold              ISO1252Encoding psp_definefont
 +/NimbusMonL-ReguObli-iso1252          /NimbusMonL-ReguObli          ISO1252Encoding psp_definefont
 +/NimbusMonL-BoldObli-iso1252          /NimbusMonL-BoldObli          ISO1252Encoding psp_definefont
 +/URWPalladioL-Roma-iso1252            /URWPalladioL-Roma            ISO1252Encoding psp_definefont
 +/URWPalladioL-Bold-iso1252            /URWPalladioL-Bold            ISO1252Encoding psp_definefont
 +/URWPalladioL-Ital-iso1252            /URWPalladioL-Ital            ISO1252Encoding psp_definefont
 +/URWPalladioL-BoldItal-iso1252        /URWPalladioL-BoldItal        ISO1252Encoding psp_definefont
 +/URWAntiquaT-RegularCondensed-iso1252 /URWAntiquaT-RegularCondensed ISO1252Encoding psp_definefont
 +/URWGroteskT-Bold-iso1252             /URWGroteskT-Bold             ISO1252Encoding psp_definefont
 +/URWChanceryL-MediItal-iso1252        /URWChanceryL-MediItal        ISO1252Encoding psp_definefont
 +
 +/Times-Bold-iso1252                   /Times-Bold                   ISO1252Encoding psp_definefont
 +/Times-BoldItalic-iso1252             /Times-BoldItalic             ISO1252Encoding psp_definefont
 +/Times-Italic-iso1252                 /Times-Italic                 ISO1252Encoding psp_definefont
 +/Times-Roman-iso1252                  /Times-Roman                  ISO1252Encoding psp_definefont
 +/Helvetica-iso1252                    /Helvetica                    ISO1252Encoding psp_definefont
 +/Helvetica-Bold-iso1252               /Helvetica-Bold               ISO1252Encoding psp_definefont
 +/Helvetica-Oblique-iso1252            /Helvetica-Oblique            ISO1252Encoding psp_definefont
 +/Courier-iso1252                      /Courier                      ISO1252Encoding psp_definefont
 +/Courier-Bold-iso1252                 /Courier-Bold                 ISO1252Encoding psp_definefont
 +/Courier-BoldOblique-iso1252          /Courier-BoldOblique          ISO1252Encoding psp_definefont
 +/Courier-Oblique-iso1252              /Courier-Oblique              ISO1252Encoding psp_definefont
 +
 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 +
 +/Helvetica-iso1252 findfont % Schriftart in voller Größe
 +%/Times-Roman-iso1252 findfont % Schriftart etwas kleiner mit Serifen
 +%/Courier-iso1252 findfont % Schriftart mit fester Breite
 +%/Courier-Oblique-iso1252 findfont % Schriftart mit fester Breite in Kursiv
 +
 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 +
 +...
 +</code>
 +
 +
 +=== Ein Beispiel mit Umlauten, Skalierung und Maßstab in PS ===
 +
 +  [user@rechner ~]$ cat Test_-_127dpi.ps | iconv -f UTF-8 -t WINDOWS-1252 | magick -gravity SouthWest -colorspace RGB -quality 100 -page 1050x1485 -density 127 - Test_in_127dpi.pdf
 +  [user@rechner ~]$ cat Test_-_254dpi.ps | iconv -f UTF-8 -t WINDOWS-1252 | magick -gravity SouthWest -colorspace RGB -quality 100 -page 2100x2970 -density 254 - Test_in_254dpi.pdf
 +
 +Für dieses Beispiel habe ich mir ein Shell-Skript (Linux + FreeBSD) geschrieben, womit man ganz einfach aus dieser PS-Datei eine PDF- und eine PNG-Datei erzeugen kann.
 +
 +  [user@rechner ~]$ /usr/local/bin/PS2IMG.sh Test.ps
 +
 +<file bash /usr/local/bin/PS2IMG.sh>
 +#!/bin/sh
 +
 +VERSION="v2025052200" # initial
 +
 +#------------------------------------------------------------------------------#
 +
 +ls "${1}" || exit 1
 +DATEI_NAME="$(echo "${1}" | grep -E '[.][Pp][Ss]$' | sed 's/[.][Pp][Ss]$//')"
 +if [ x = "x${DATEI_NAME}" ] ; then
 + echo "${0} [PS-Datei]"
 + echo "${0} Test.ps"
 + exit 1
 +fi
 +
 +#------------------------------------------------------------------------------#
 +# A4 -> 210 x 297 mm ->  72 dpi (2,8346 mm je Pixel) ->  595,2756 x  841,8898 Pixel
 +# A4 -> 210 x 297 mm -> 127 dpi (5,0000 mm je Pixel) -> 1050,0000 x 1485,0000 Pixel
 +#------------------------------------------------------------------------------#
 +
 +seitengroesse()
 +{
 + SEITENGROESSE="$(echo "${AUFLOESUNG}" | awk '{printf "%.0fx%.0f\n", ($1*2100/254),($1*2970/254)}')"
 +}
 +
 +### suche nach soetwas wie:
 +#    72 25.4 div massstab div dup scale
 +#   127 25.4 div massstab div dup scale
 +#   254 25.4 div massstab div dup scale
 +#   381 25.4 div massstab div dup scale
 +#   508 25.4 div massstab div dup scale
 +AUFLOESUNG="$(grep -Ei '^[0-9][0-9]*[ \t]+.*[ \t]+scale' ${DATEI_NAME}.ps | grep -Fiv scalefont | head -n1 | awk '{print $1}')"
 +if [ x = "x${AUFLOESUNG}" ] ; then
 + ### wenn nichts gefunden wurde, dann suche nach soetwas wie:
 + #   /mm {2.834645669 mul} def
 + #   /mm {5 mul} def
 + #   /mm {10 mul} def
 + #   /mm {15 mul} def
 + #   /mm {20 mul} def
 + AUFLOESUNG="$(grep -E '^[/]mm [{]10 mul[}] def' ${DATEI_NAME}.ps | awk -F'[{}]' '{print $2}' | awk '{print $1*254/10}')"
 + if [ x = "x${AUFLOESUNG}" ] ; then
 + AUFLOESUNG="72"
 + seitengroesse
 + else
 + seitengroesse
 + fi
 +else
 + seitengroesse
 +fi
 +
 +#------------------------------------------------------------------------------#
 +echo "
 +# DATEI_NAME='${DATEI_NAME}.*'
 +# AUFLOESUNG='${AUFLOESUNG} dpi'
 +# SEITENGROESSE='${SEITENGROESSE} Pixel'
 +"
 +#------------------------------------------------------------------------------#
 +# WARNING: The convert command is deprecated in IMv7, use "magick" instead of "convert" or "magick convert"
 +for ENDUNG in pdf png
 +do
 + cat ${DATEI_NAME}.ps | iconv -f UTF-8 -t WINDOWS-1252 | magick -gravity SouthWest -colorspace RGB -quality 100 -page ${SEITENGROESSE} -density ${AUFLOESUNG} - ${DATEI_NAME}.${ENDUNG}
 +done
 +#------------------------------------------------------------------------------#
 +</file>
 +
 +<file ps Test.ps>
 +%!PS-Adobe 3.0
 +
 +%%BeginProlog (OpenOffice.org 1.0.3)
 +/ISO1252Encoding [
 +/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
 +/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
 +/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
 +/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
 +/space /exclam /quotedbl /numbersign /dollar /percent /ampersand /quotesingle
 +/parenleft /parenright /asterisk /plus /comma /hyphen /period /slash 
 +/zero /one /two /three /four /five /six /seven
 +/eight /nine /colon /semicolon /less /equal /greater /question
 +/at /A /B /C /D /E /F /G
 +/H /I /J /K /L /M /N /O
 +/P /Q /R /S /T /U /V /W
 +/X /Y /Z /bracketleft /backslash /bracketright /asciicircum /underscore
 +/grave /a /b /c /d /e /f /g
 +/h /i /j /k /l /m /n /o
 +/p /q /r /s /t /u /v /w
 +/x /y /z /braceleft /bar /braceright /asciitilde /unused
 +/Euro /unused /quotesinglbase /florin /quotedblbase /ellipsis /dagger /daggerdbl
 +/circumflex /perthousand /Scaron /guilsinglleft /OE /unused /Zcaron /unused
 +/unused /quoteleft /quoteright /quotedblleft /quotedblright /bullet /endash /emdash
 +/tilde /trademark /scaron /guilsinglright /oe /unused /zcaron /Ydieresis
 +/space /exclamdown /cent /sterling /currency /yen /brokenbar /section
 +/dieresis /copyright /ordfeminine /guillemotleft /logicalnot /hyphen /registered /macron
 +/degree /plusminus /twosuperior /threesuperior /acute /mu /paragraph /periodcentered
 +/cedilla /onesuperior /ordmasculine /guillemotright /onequarter /onehalf /threequarters /questiondown
 +/Agrave /Aacute /Acircumflex /Atilde /Adieresis /Aring /AE /Ccedilla
 +/Egrave /Eacute /Ecircumflex /Edieresis /Igrave /Iacute /Icircumflex /Idieresis
 +/Eth /Ntilde /Ograve /Oacute /Ocircumflex /Otilde /Odieresis /multiply
 +/Oslash /Ugrave /Uacute /Ucircumflex /Udieresis /Yacute /Thorn /germandbls
 +/agrave /aacute /acircumflex /atilde /adieresis /aring /ae /ccedilla
 +/egrave /eacute /ecircumflex /edieresis /igrave /iacute /icircumflex /idieresis
 +/eth /ntilde /ograve /oacute /ocircumflex /otilde /odieresis /divide
 +/oslash /ugrave /uacute /ucircumflex /udieresis /yacute /thorn /ydieresis] def
 +
 +/psp_definefont { exch dup findfont dup length dict begin { 1 index /FID ne
 +{ def } { pop pop } ifelse } forall /Encoding 3 -1 roll def
 +currentdict end exch pop definefont pop } def
 +
 +/pathdict dup 8 dict def load begin
 +/rcmd { { currentfile 1 string readstring pop 0 get dup 32 gt { exit }
 +{ pop } ifelse } loop dup 126 eq { pop exit } if 65 sub dup 16#3 and 1
 +add exch dup 16#C and -2 bitshift 16#3 and 1 add exch 16#10 and 16#10
 +eq 3 1 roll exch } def
 +/rhex { dup 1 sub exch currentfile exch string readhexstring pop dup 0
 +get dup 16#80 and 16#80 eq dup 3 1 roll { 16#7f and } if 2 index 0 3
 +-1 roll put 3 1 roll 0 0 1 5 -1 roll { 2 index exch get add 256 mul }
 +for 256 div exch pop exch { neg } if } def
 +/xcmd { rcmd exch rhex exch rhex exch 5 -1 roll add exch 4 -1 roll add
 +1 index 1 index 5 -1 roll { moveto } { lineto } ifelse } def end  
 +/readpath { 0 0 pathdict begin { xcmd } loop end pop pop } def
 +
 +systemdict /languagelevel known not {
 +/xshow { exch dup length 0 1 3 -1 roll 1 sub { dup 3 index exch get
 +exch 2 index exch get 1 string dup 0 4 -1 roll put currentpoint 3 -1
 +roll show moveto 0 rmoveto } for pop pop } def
 +/rectangle { 4 -2 roll moveto 1 index 0 rlineto 0 exch rlineto neg 0
 +rlineto closepath } def
 +/rectfill { rectangle fill } def
 +/rectstroke { rectangle stroke } def } if
 +
 +/psp_lzwfilter { currentfile /ASCII85Decode filter /LZWDecode filter } def
 +/psp_ascii85filter { currentfile /ASCII85Decode filter } def
 +/psp_lzwstring { psp_lzwfilter 1024 string readstring } def
 +/psp_ascii85string { psp_ascii85filter 1024 string readstring } def
 +/psp_imagedict {
 +/psp_bitspercomponent { 3 eq { 1 }{ 8 } ifelse } def
 +/psp_decodearray { [ [0 1 0 1 0 1] [0 255] [0 1] [0 255] ] exch get }
 +def 7 dict dup
 +/ImageType 1 put dup
 +/Width 7 -1 roll put dup
 +/Height 5 index put dup
 +/BitsPerComponent 4 index psp_bitspercomponent put dup
 +/Decode 5 -1 roll psp_decodearray put dup
 +/ImageMatrix [1 0 0 1 0 0] dup 5 8 -1 roll put put dup
 +/DataSource 4 -1 roll 1 eq { psp_lzwfilter } { psp_ascii85filter } ifelse put
 +} def
 +%%EndProlog (OpenOffice.org 1.0.3)
 +
 +/URWGothicL-Book-iso1252              /URWGothicL-Book              ISO1252Encoding psp_definefont
 +/URWGothicL-Demi-iso1252              /URWGothicL-Demi              ISO1252Encoding psp_definefont
 +/URWGothicL-BookObli-iso1252          /URWGothicL-BookObli          ISO1252Encoding psp_definefont
 +/URWGothicL-DemiObli-iso1252          /URWGothicL-DemiObli          ISO1252Encoding psp_definefont
 +/URWBookmanL-Ligh-iso1252             /URWBookmanL-Ligh             ISO1252Encoding psp_definefont
 +/URWBookmanL-DemiBold-iso1252         /URWBookmanL-DemiBold         ISO1252Encoding psp_definefont
 +/URWBookmanL-LighItal-iso1252         /URWBookmanL-LighItal         ISO1252Encoding psp_definefont
 +/URWBookmanL-DemiBoldItal-iso1252     /URWBookmanL-DemiBoldItal     ISO1252Encoding psp_definefont
 +/CharterBT-Bold-iso1252               /CharterBT-Bold               ISO1252Encoding psp_definefont
 +/CharterBT-BoldItalic-iso1252         /CharterBT-BoldItalic         ISO1252Encoding psp_definefont
 +/CharterBT-Roman-iso1252              /CharterBT-Roman              ISO1252Encoding psp_definefont
 +/CharterBT-Italic-iso1252             /CharterBT-Italic             ISO1252Encoding psp_definefont
 +/CenturySchL-Roma-iso1252             /CenturySchL-Roma             ISO1252Encoding psp_definefont
 +/CenturySchL-Bold-iso1252             /CenturySchL-Bold             ISO1252Encoding psp_definefont
 +/CenturySchL-Ital-iso1252             /CenturySchL-Ital             ISO1252Encoding psp_definefont
 +/CenturySchL-BoldItal-iso1252         /CenturySchL-BoldItal         ISO1252Encoding psp_definefont
 +/NimbusSanL-Regu-iso1252              /NimbusSanL-Regu              ISO1252Encoding psp_definefont
 +/NimbusSanL-Bold-iso1252              /NimbusSanL-Bold              ISO1252Encoding psp_definefont
 +/NimbusSanL-ReguItal-iso1252          /NimbusSanL-ReguItal          ISO1252Encoding psp_definefont
 +/NimbusSanL-BoldItal-iso1252          /NimbusSanL-BoldItal          ISO1252Encoding psp_definefont
 +/NimbusSanL-ReguCond-iso1252          /NimbusSanL-ReguCond          ISO1252Encoding psp_definefont
 +/NimbusSanL-BoldCond-iso1252          /NimbusSanL-BoldCond          ISO1252Encoding psp_definefont
 +/NimbusSanL-ReguCondItal-iso1252      /NimbusSanL-ReguCondItal      ISO1252Encoding psp_definefont
 +/NimbusSanL-BoldCondItal-iso1252      /NimbusSanL-BoldCondItal      ISO1252Encoding psp_definefont
 +/NimbusRomNo9L-Regu-iso1252           /NimbusRomNo9L-Regu           ISO1252Encoding psp_definefont
 +/NimbusRomNo9L-Medi-iso1252           /NimbusRomNo9L-Medi           ISO1252Encoding psp_definefont
 +/NimbusRomNo9L-ReguItal-iso1252       /NimbusRomNo9L-ReguItal       ISO1252Encoding psp_definefont
 +/NimbusRomNo9L-MediItal-iso1252       /NimbusRomNo9L-MediItal       ISO1252Encoding psp_definefont
 +/NimbusMonL-Regu-iso1252              /NimbusMonL-Regu              ISO1252Encoding psp_definefont
 +/NimbusMonL-Bold-iso1252              /NimbusMonL-Bold              ISO1252Encoding psp_definefont
 +/NimbusMonL-ReguObli-iso1252          /NimbusMonL-ReguObli          ISO1252Encoding psp_definefont
 +/NimbusMonL-BoldObli-iso1252          /NimbusMonL-BoldObli          ISO1252Encoding psp_definefont
 +/URWPalladioL-Roma-iso1252            /URWPalladioL-Roma            ISO1252Encoding psp_definefont
 +/URWPalladioL-Bold-iso1252            /URWPalladioL-Bold            ISO1252Encoding psp_definefont
 +/URWPalladioL-Ital-iso1252            /URWPalladioL-Ital            ISO1252Encoding psp_definefont
 +/URWPalladioL-BoldItal-iso1252        /URWPalladioL-BoldItal        ISO1252Encoding psp_definefont
 +/URWAntiquaT-RegularCondensed-iso1252 /URWAntiquaT-RegularCondensed ISO1252Encoding psp_definefont
 +/URWGroteskT-Bold-iso1252             /URWGroteskT-Bold             ISO1252Encoding psp_definefont
 +/URWChanceryL-MediItal-iso1252        /URWChanceryL-MediItal        ISO1252Encoding psp_definefont
 +
 +/Times-Bold-iso1252                   /Times-Bold                   ISO1252Encoding psp_definefont
 +/Times-BoldItalic-iso1252             /Times-BoldItalic             ISO1252Encoding psp_definefont
 +/Times-Italic-iso1252                 /Times-Italic                 ISO1252Encoding psp_definefont
 +/Times-Roman-iso1252                  /Times-Roman                  ISO1252Encoding psp_definefont
 +/Helvetica-iso1252                    /Helvetica                    ISO1252Encoding psp_definefont
 +/Helvetica-Bold-iso1252               /Helvetica-Bold               ISO1252Encoding psp_definefont
 +/Helvetica-Oblique-iso1252            /Helvetica-Oblique            ISO1252Encoding psp_definefont
 +/Courier-iso1252                      /Courier                      ISO1252Encoding psp_definefont
 +/Courier-Bold-iso1252                 /Courier-Bold                 ISO1252Encoding psp_definefont
 +/Courier-BoldOblique-iso1252          /Courier-BoldOblique          ISO1252Encoding psp_definefont
 +/Courier-Oblique-iso1252              /Courier-Oblique              ISO1252Encoding psp_definefont
 +
 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 +
 +%%% Maßstab der Zeichnung
 +/massstab {1} def % 1:1 - hierbei entspricht "1 Pixel" genau "1 mm"
 +%/massstab {2} def % 1:2 - hierbei entsprechen "2 Pixel" genau "1 mm"
 +%/massstab {3} def % 1:3 - hierbei entsprechen "3 Pixel" genau "1 mm"
 +
 +/mm {massstab mul} def
 +
 +% damit alles automatisch im richtien Maßstab angezeigt wird
 +%72 25.4 div massstab div dup scale %  72 DPI (allgemeiner Standard)
 +127 25.4 div massstab div dup scale % 127 DPI
 +%254 25.4 div massstab div dup scale % 254 DPI
 +%381 25.4 div massstab div dup scale % 381 DPI
 +%508 25.4 div massstab div dup scale % 508 DPI
 +
 +/Helvetica-iso1252 findfont % Schriftart in voller Größe
 +%/Times-Roman-iso1252 findfont % Schriftart etwas kleiner mit Serifen
 +%/Courier-iso1252 findfont % Schriftart mit fester Breite
 +%/Courier-Oblique-iso1252 findfont % Schriftart mit fester Breite in Kursiv
 +
 +5 mm scalefont setfont % Schriftgröße in Millimeter, damit sie nie skaliert und immer lesbar ist
 +
 +0 setgray % Farbe (0=schwarz / 0.5=grau / 1=weiss)
 +
 +%0 setlinejoin % die Spitze eines Winkels wird spitz gezeichnet
 +%1 setlinejoin % die Spitze eines Winkels wird abgerundet gezeichnet
 +%2 setlinejoin % die Spitze eines Winkels wird abgeflacht gezeichnet
 +
 +/p-rand-links {10 mm} def
 +/n-rand-links {p-rand-links neg} def
 +/p-rand-unten {13 mm} def
 +/n-rand-unten {p-rand-unten neg} def
 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 +
 +%==============================================================================%
 +newpath % neue Zeichnung beginnen
 +
 +.3 setlinewidth % Linienbreite
 +%------------------------------------------------------------------------------%
 +%%% Umrandung
 +
 +p-rand-links  p-rand-unten  moveto % Rahmen in Millimeter
 +p-rand-links  284 mm        lineto % Rahmen in Millimeter
 +200 mm        284 mm        lineto % Rahmen in Millimeter
 +200 mm        p-rand-unten  lineto % Rahmen in Millimeter
 +p-rand-links  p-rand-unten  lineto % Rahmen in Millimeter
 +
 +%------------------------------------------------------------------------------%
 +%%% Legende
 +
 +p-rand-links 2 mm add  p-rand-unten 2 mm add moveto % zur Startposition der Ausgabe gehen / in Millimeter auf dem Blatt, unabhängig von der Skalierung
 +(Maßstab: 1:) show
 +massstab 2 string cvs show % "2 string" bedutet, dass in "i" ein String mit 2 Zeichen steckt (das kann auch größer angegeben werden)
 +
 +%------------------------------------------------------------------------------%
 +%%% Umlaute & Sonderzeichen
 +
 +105 mm  p-rand-unten 7 mm add moveto % zur Startposition der Ausgabe gehen / in Millimeter auf dem Blatt, unabhängig von der Skalierung
 +(Umlaute: Ää Öö Üü) show % Umlaute
 +105 mm  p-rand-unten 2 mm add moveto % zur Startposition der Ausgabe gehen / in Millimeter auf dem Blatt, unabhängig von der Skalierung
 +(Sonderzeichen: & ß € µ é è ¹ ² ³ ¼ ½) show % Sonderzeichen
 +
 +%------------------------------------------------------------------------------%
 +closepath % diese Zeichnung beenden
 +stroke % alle aufgeführten Zeichenkomandos jetzt zeichnen
 +%==============================================================================%
 +newpath % neue Zeichnung beginnen
 +
 +% Kreis zeichnen - mit Millimeterangeben, dann skaliert die Größe NICHT mit dem Maßstab
 +150 mm 210 mm moveto % zur 3-Uhr-Position vom Kreis gehen
 +100 mm 210 mm 50 mm 0 360 arc % einen Vollkreis, links rum zeichnen
 +% 3-Uhr-Position des Kreises:               150 mm von links und 210 mm von unten
 +% Mittelpunkt des Kreises:                  100 mm von links und 210 mm von unten
 +% Radius vom Kreis:                          50 mm
 +% Startposition, um den Kreis zu zeichnen:    0°
 +% Kreisbogen, der gezeichnet werden soll:   360° (links rum)
 +
 +closepath % diese Zeichnung beenden
 +%------------------------------------------------------------------------------%
 +%%% Füllen - Anfang
 +
 +gsave % Grafic-Save (sichern)
 +0.5 setgray % Füllfarbe festlegen
 +fill % geschlossenes Objekt, in dieser Zeichnung, ausfüllen
 +grestore % Grafic-Restore (zurückholen)
 +%4 setlinewidth
 +%0.75 setgray
 +
 +%%% Füllen - Ende
 +%------------------------------------------------------------------------------%
 +stroke % alle aufgeführten Zeichenkomandos jetzt ausführen
 +%==============================================================================%
 +newpath % neue Zeichnung beginnen
 +
 +.2 setlinewidth % Linienbreite
 +
 +% Viereck zeichnen - ohne Millimeterangeben, dann skaliert die Größe mit dem Maßstab
 +100 100 moveto % gehe zum Startpunkt
 +0 50 rlineto % zeichne eine Linie nach oben
 +50 0 rlineto % zeichne eine Linie nach rechts
 +0 -50 rlineto % zeichne eine Linie nach unten
 +-50 0 rlineto % zeichne eine Linie nach links
 +
 +closepath % diese Zeichnung beenden
 +%------------------------------------------------------------------------------%
 +%%% Füllen - Anfang
 +
 +% Viereck ausfüllen
 +gsave % Grafic-Save (sichern)
 +0.75 setgray % Füllfarbe festlegen
 +fill % geschlossenes Objekt, in dieser Zeichnung, ausfüllen
 +grestore % Grafic-Restore (zurückholen)
 +
 +%%% Füllen - Ende
 +%------------------------------------------------------------------------------%
 +stroke % alle aufgeführten Zeichenkomandos jetzt ausführen
 +%==============================================================================%
 +newpath % neue Zeichnung beginnen
 +
 +.1 setlinewidth % Linienbreite
 +
 +% 3 ineinander liegende Kreise zeichnen - ohne Millimeterangeben, dann skaliert die Größe mit dem Maßstab
 +% 1. Kreis - größter, ganz außen
 +125   100 moveto % zur 3-Uhr-Position vom Kreis gehen
 +100   100 25   0 360 arc % einen Vollkreis, links rum zeichnen
 +% 2. Kreis - mittlerer, in der Mitte
 +124.5 100 moveto % zur 3-Uhr-Position vom Kreis gehen
 +100   100 24.5 0 360 arc % einen Vollkreis, links rum zeichnen
 +% 3. Kreis - kleinster, innen
 +124   100 moveto % zur 3-Uhr-Position vom Kreis gehen
 +100   100 24   0 360 arc % einen Vollkreis, links rum zeichnen
 +
 +closepath % diese Zeichnung beenden
 +%------------------------------------------------------------------------------%
 +%------------------------------------------------------------------------------%
 +stroke % alle aufgeführten Zeichenkomandos jetzt ausführen
 +%==============================================================================%
 +showpage % Ausgabe der fertigen Seite
 +</file>
 +
 +==== PS-Dateien in PS-Dateien einbetten (include) ====
 +
 +Ich hatte die Idee, die 130 Kode-Zeilen für den Zeichensatz ''WINDOWS-1252/ISO-1252'', immer mit einer separaten Datei einzubinden (//includen//). Nur leider geht das mit ImageMagick nicht, dazu muß man GhostScript direkt aufrufen!
 +
 +In diesem Beispiel ist alles in 127 DPI gestaltet worden, da das einerseits einen Millimeter genau auf 5 Pixel festlegt und andererseits somit eine Genauigkeit von 0,2 mm auf dem Ball darstellt, was ausreichend ist.
 +
 +Eine A4-Seite ist 210 mm breit und 297 mm hoch, was bei einer Auflösung von ''127'' dpi, die Breite von ''1050'' Pixel und die Höhe von ''1485'' Pixel ergibt.
 +  # A4-Seiten-Breite in Pixel (bei 127 dpi):   210 mm * 127 dpi / 25,4 mm = 1050
 +  # A4-Seiten-Höhe   in Pixel (bei 127 dpi):   297 mm * 127 dpi / 25,4 mm = 1485
 +
 +
 +=== Mit ImageMagick funktioniert es NICHT ===
 +
 +<code ps>
 +%!PS-Adobe-3.0
 +
 +(Zeichensatz_-_WINDOWS-1252.ps) run                             % Zeichensatz, mit Umlauten und Sonderzeichen, importieren
 +...
 +</code>
 +
 +eine PNG-Datei generieren:
 +  > magick -gravity SouthWest -colorspace RGB -quality 100 -page 1050x1485 -density 127 test.ps test.png
 +  ...
 +  Error: /invalidfileaccess in --run--
 +  ...
 +
 +eine PDF-Datei generieren:
 +  > magick -gravity SouthWest -colorspace RGB -quality 100 -page 1050x1485 -density 127 test.ps test.pdf
 +  ...
 +  Error: /invalidfileaccess in --run--
 +  ...
 +
 +Dieser Fehler tritt auf, weil ImageMagick das Programm GhostScript immer wie folgt aufruft:
 +  > gs -dSAFER ...
 +
 +...will man aber mit ''run'' eine Datei mit PS-Kode einbinden, dann muß der Aufruf aber wie folgt aussehen, nur dafür habe ich leider keine Option bei ImageMagick gefunden.
 +  > gs -dNOSAFER ...
 +
 +
 +=== Mach es besser mit GhostScript ===
 +
 +...so kann man beispielsweise eine PNG-Datei erzeugen:
 +  > cat test.ps | iconv -f UTF-8 -t WINDOWS-1252 | gs -dQUIET -P- -dNOSAFER -dNOPAUSE -dNOPROMPT -dMaxBitmap=500000000 -dAlignToPixels=0 -dGridFitTT=2 -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -sDEVICE=png16malpha -g1050x1485 -r127 -dPSFitPage -sOutputFile=test.png
 +
 +...so kann man beispielsweise eine PDF-Datei erzeugen:
 +  > cat test.ps | iconv -f UTF-8 -t WINDOWS-1252 | gs -dQUIET -P- -dNOSAFER -dNOPAUSE -dNOPROMPT -dMaxBitmap=500000000 -dAlignToPixels=0 -dGridFitTT=2 -dCompatibilityLevel=1.4 -dPDFACompatibilityPolicy=1 -dColorConversionStrategy=/RGB -dInterpolateControl=0 -dSubsetFonts=true -dEmbedAllFonts=true -dPDFA=2 -dPDFSETTINGS=/printer -sDEVICE=pdfwrite -g1050x1485 -r127 -dPSFitPage -sOutputFile=test.pdf
 +
 +<file ps Zeichensatz_-_WINDOWS-1252.ps>
 +%%BeginProlog (OpenOffice.org 1.0.3 - 2003)
 +/ISO1252Encoding [
 +/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
 +/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
 +/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
 +/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
 +/space /exclam /quotedbl /numbersign /dollar /percent /ampersand /quotesingle
 +/parenleft /parenright /asterisk /plus /comma /hyphen /period /slash 
 +/zero /one /two /three /four /five /six /seven
 +/eight /nine /colon /semicolon /less /equal /greater /question
 +/at /A /B /C /D /E /F /G
 +/H /I /J /K /L /M /N /O
 +/P /Q /R /S /T /U /V /W
 +/X /Y /Z /bracketleft /backslash /bracketright /asciicircum /underscore
 +/grave /a /b /c /d /e /f /g
 +/h /i /j /k /l /m /n /o
 +/p /q /r /s /t /u /v /w
 +/x /y /z /braceleft /bar /braceright /asciitilde /unused
 +/Euro /unused /quotesinglbase /florin /quotedblbase /ellipsis /dagger /daggerdbl
 +/circumflex /perthousand /Scaron /guilsinglleft /OE /unused /Zcaron /unused
 +/unused /quoteleft /quoteright /quotedblleft /quotedblright /bullet /endash /emdash
 +/tilde /trademark /scaron /guilsinglright /oe /unused /zcaron /Ydieresis
 +/space /exclamdown /cent /sterling /currency /yen /brokenbar /section
 +/dieresis /copyright /ordfeminine /guillemotleft /logicalnot /hyphen /registered /macron
 +/degree /plusminus /twosuperior /threesuperior /acute /mu /paragraph /periodcentered
 +/cedilla /onesuperior /ordmasculine /guillemotright /onequarter /onehalf /threequarters /questiondown
 +/Agrave /Aacute /Acircumflex /Atilde /Adieresis /Aring /AE /Ccedilla
 +/Egrave /Eacute /Ecircumflex /Edieresis /Igrave /Iacute /Icircumflex /Idieresis
 +/Eth /Ntilde /Ograve /Oacute /Ocircumflex /Otilde /Odieresis /multiply
 +/Oslash /Ugrave /Uacute /Ucircumflex /Udieresis /Yacute /Thorn /germandbls
 +/agrave /aacute /acircumflex /atilde /adieresis /aring /ae /ccedilla
 +/egrave /eacute /ecircumflex /edieresis /igrave /iacute /icircumflex /idieresis
 +/eth /ntilde /ograve /oacute /ocircumflex /otilde /odieresis /divide
 +/oslash /ugrave /uacute /ucircumflex /udieresis /yacute /thorn /ydieresis] def
 +
 +/psp_definefont { exch dup findfont dup length dict begin { 1 index /FID ne
 +{ def } { pop pop } ifelse } forall /Encoding 3 -1 roll def
 +currentdict end exch pop definefont pop } def
 +
 +/pathdict dup 8 dict def load begin
 +/rcmd { { currentfile 1 string readstring pop 0 get dup 32 gt { exit }
 +{ pop } ifelse } loop dup 126 eq { pop exit } if 65 sub dup 16#3 and 1
 +add exch dup 16#C and -2 bitshift 16#3 and 1 add exch 16#10 and 16#10
 +eq 3 1 roll exch } def
 +/rhex { dup 1 sub exch currentfile exch string readhexstring pop dup 0
 +get dup 16#80 and 16#80 eq dup 3 1 roll { 16#7f and } if 2 index 0 3
 +-1 roll put 3 1 roll 0 0 1 5 -1 roll { 2 index exch get add 256 mul }
 +for 256 div exch pop exch { neg } if } def
 +/xcmd { rcmd exch rhex exch rhex exch 5 -1 roll add exch 4 -1 roll add
 +1 index 1 index 5 -1 roll { moveto } { lineto } ifelse } def end  
 +/readpath { 0 0 pathdict begin { xcmd } loop end pop pop } def
 +
 +systemdict /languagelevel known not {
 +/xshow { exch dup length 0 1 3 -1 roll 1 sub { dup 3 index exch get
 +exch 2 index exch get 1 string dup 0 4 -1 roll put currentpoint 3 -1
 +roll show moveto 0 rmoveto } for pop pop } def
 +/rectangle { 4 -2 roll moveto 1 index 0 rlineto 0 exch rlineto neg 0
 +rlineto closepath } def
 +/rectfill { rectangle fill } def
 +/rectstroke { rectangle stroke } def } if
 +
 +/psp_lzwfilter { currentfile /ASCII85Decode filter /LZWDecode filter } def
 +/psp_ascii85filter { currentfile /ASCII85Decode filter } def
 +/psp_lzwstring { psp_lzwfilter 1024 string readstring } def
 +/psp_ascii85string { psp_ascii85filter 1024 string readstring } def
 +/psp_imagedict {
 +/psp_bitspercomponent { 3 eq { 1 }{ 8 } ifelse } def
 +/psp_decodearray { [ [0 1 0 1 0 1] [0 255] [0 1] [0 255] ] exch get }
 +def 7 dict dup
 +/ImageType 1 put dup
 +/Width 7 -1 roll put dup
 +/Height 5 index put dup
 +/BitsPerComponent 4 index psp_bitspercomponent put dup
 +/Decode 5 -1 roll psp_decodearray put dup
 +/ImageMatrix [1 0 0 1 0 0] dup 5 8 -1 roll put put dup
 +/DataSource 4 -1 roll 1 eq { psp_lzwfilter } { psp_ascii85filter } ifelse put
 +} def
 +%%EndProlog (OpenOffice.org 1.0.3)
 +
 +/URWGothicL-Book-iso1252              /URWGothicL-Book              ISO1252Encoding psp_definefont
 +/URWGothicL-Demi-iso1252              /URWGothicL-Demi              ISO1252Encoding psp_definefont
 +/URWGothicL-BookObli-iso1252          /URWGothicL-BookObli          ISO1252Encoding psp_definefont
 +/URWGothicL-DemiObli-iso1252          /URWGothicL-DemiObli          ISO1252Encoding psp_definefont
 +/URWBookmanL-Ligh-iso1252             /URWBookmanL-Ligh             ISO1252Encoding psp_definefont
 +/URWBookmanL-DemiBold-iso1252         /URWBookmanL-DemiBold         ISO1252Encoding psp_definefont
 +/URWBookmanL-LighItal-iso1252         /URWBookmanL-LighItal         ISO1252Encoding psp_definefont
 +/URWBookmanL-DemiBoldItal-iso1252     /URWBookmanL-DemiBoldItal     ISO1252Encoding psp_definefont
 +/CharterBT-Bold-iso1252               /CharterBT-Bold               ISO1252Encoding psp_definefont
 +/CharterBT-BoldItalic-iso1252         /CharterBT-BoldItalic         ISO1252Encoding psp_definefont
 +/CharterBT-Roman-iso1252              /CharterBT-Roman              ISO1252Encoding psp_definefont
 +/CharterBT-Italic-iso1252             /CharterBT-Italic             ISO1252Encoding psp_definefont
 +/CenturySchL-Roma-iso1252             /CenturySchL-Roma             ISO1252Encoding psp_definefont
 +/CenturySchL-Bold-iso1252             /CenturySchL-Bold             ISO1252Encoding psp_definefont
 +/CenturySchL-Ital-iso1252             /CenturySchL-Ital             ISO1252Encoding psp_definefont
 +/CenturySchL-BoldItal-iso1252         /CenturySchL-BoldItal         ISO1252Encoding psp_definefont
 +/NimbusSanL-Regu-iso1252              /NimbusSanL-Regu              ISO1252Encoding psp_definefont
 +/NimbusSanL-Bold-iso1252              /NimbusSanL-Bold              ISO1252Encoding psp_definefont
 +/NimbusSanL-ReguItal-iso1252          /NimbusSanL-ReguItal          ISO1252Encoding psp_definefont
 +/NimbusSanL-BoldItal-iso1252          /NimbusSanL-BoldItal          ISO1252Encoding psp_definefont
 +/NimbusSanL-ReguCond-iso1252          /NimbusSanL-ReguCond          ISO1252Encoding psp_definefont
 +/NimbusSanL-BoldCond-iso1252          /NimbusSanL-BoldCond          ISO1252Encoding psp_definefont
 +/NimbusSanL-ReguCondItal-iso1252      /NimbusSanL-ReguCondItal      ISO1252Encoding psp_definefont
 +/NimbusSanL-BoldCondItal-iso1252      /NimbusSanL-BoldCondItal      ISO1252Encoding psp_definefont
 +/NimbusRomNo9L-Regu-iso1252           /NimbusRomNo9L-Regu           ISO1252Encoding psp_definefont
 +/NimbusRomNo9L-Medi-iso1252           /NimbusRomNo9L-Medi           ISO1252Encoding psp_definefont
 +/NimbusRomNo9L-ReguItal-iso1252       /NimbusRomNo9L-ReguItal       ISO1252Encoding psp_definefont
 +/NimbusRomNo9L-MediItal-iso1252       /NimbusRomNo9L-MediItal       ISO1252Encoding psp_definefont
 +/NimbusMonL-Regu-iso1252              /NimbusMonL-Regu              ISO1252Encoding psp_definefont
 +/NimbusMonL-Bold-iso1252              /NimbusMonL-Bold              ISO1252Encoding psp_definefont
 +/NimbusMonL-ReguObli-iso1252          /NimbusMonL-ReguObli          ISO1252Encoding psp_definefont
 +/NimbusMonL-BoldObli-iso1252          /NimbusMonL-BoldObli          ISO1252Encoding psp_definefont
 +/URWPalladioL-Roma-iso1252            /URWPalladioL-Roma            ISO1252Encoding psp_definefont
 +/URWPalladioL-Bold-iso1252            /URWPalladioL-Bold            ISO1252Encoding psp_definefont
 +/URWPalladioL-Ital-iso1252            /URWPalladioL-Ital            ISO1252Encoding psp_definefont
 +/URWPalladioL-BoldItal-iso1252        /URWPalladioL-BoldItal        ISO1252Encoding psp_definefont
 +/URWAntiquaT-RegularCondensed-iso1252 /URWAntiquaT-RegularCondensed ISO1252Encoding psp_definefont
 +/URWGroteskT-Bold-iso1252             /URWGroteskT-Bold             ISO1252Encoding psp_definefont
 +/URWChanceryL-MediItal-iso1252        /URWChanceryL-MediItal        ISO1252Encoding psp_definefont
 +
 +/Times-Bold-iso1252                   /Times-Bold                   ISO1252Encoding psp_definefont
 +/Times-BoldItalic-iso1252             /Times-BoldItalic             ISO1252Encoding psp_definefont
 +/Times-Italic-iso1252                 /Times-Italic                 ISO1252Encoding psp_definefont
 +/Times-Roman-iso1252                  /Times-Roman                  ISO1252Encoding psp_definefont
 +/Helvetica-iso1252                    /Helvetica                    ISO1252Encoding psp_definefont
 +/Helvetica-Bold-iso1252               /Helvetica-Bold               ISO1252Encoding psp_definefont
 +/Helvetica-Oblique-iso1252            /Helvetica-Oblique            ISO1252Encoding psp_definefont
 +/Courier-iso1252                      /Courier                      ISO1252Encoding psp_definefont
 +/Courier-Bold-iso1252                 /Courier-Bold                 ISO1252Encoding psp_definefont
 +/Courier-BoldOblique-iso1252          /Courier-BoldOblique          ISO1252Encoding psp_definefont
 +/Courier-Oblique-iso1252              /Courier-Oblique              ISO1252Encoding psp_definefont
 +</file>
 +
 +<code ps test.ps>
 +%!PS-Adobe 3.0
 +
 +(Zeichensatz_-_WINDOWS-1252.ps) run                             % Zeichensatz, mit Umlauten und Sonderzeichen, importieren
 +
 +%------------------------------------------------------------------------------%
 +%%% wichtige Einstellungen für die richtige Skalierung (Basisdefinitionen)
 +/dpi {127} def % Auflösung in DPI (z.B.: 127, 381, 254, 508)
 +/x-a4 {210} def % Seitenbreite in mm (A4 = 210 mm)
 +/y-a4 {297} def % Seitenhöhe in mm (A4 = 297 mm)
 +%/massstab {1} def % Maßstab (1:1)
 +/massstab {2} def % Maßstab (1:2)
 +%/massstab {3} def % Maßstab (1:3)
 +%==============================================================================%
 +%%% Anfang - weitere Definitionen
 +
 +/mm {massstab mul} def                                          % Millimeter berechnen
 +
 +% Rand auf dem A4-Blatt definieren - mein Drucker kann nur den Bereich innerhalb dieses Rahmens drucken
 +/p-rand-links  {10 mm} def                                      % Abstand: linker Rand
 +/p-rand-unten  {13 mm} def                                      % Abstand: unterer Rand
 +/p-rand-rechts {x-a4 mm p-rand-links sub} def                   % Position: rechter Rand
 +/p-rand-oben   {y-a4 mm p-rand-unten sub} def                   % Position: oberer Rand
 +
 +% Position der Legende
 +/legende-links {p-rand-links 106 mm add} def
 +/legende-unten {p-rand-unten 2 mm add} def
 +
 +/Helvetica-iso1252 findfont                                     % Schriftart einstellen
 +4 mm scalefont setfont                                          % Schriftgröße: 4 mm
 +/zeile {4 mm mul} def                                           % Zeilenhoehe: 4 mm
 +
 +0 setgray                                                       % Schrift- bzw. Linienfarbe (0=schwarz / 0.5=grau / 1=weiß)
 +
 +%%% Ende - weitere Definitionen
 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 +%%% Seitengröße festlegen
 +
 +% Skalierung der Skizze - Seitenformat, bei gegebener Auflösung in Pixel, berechnen
 +/a4x {x-a4 dpi mul 25.4 div} def
 +/a4y {y-a4 dpi mul 25.4 div} def
 +
 +<< /PageSize [ a4x a4y ] >> setpagedevice                       % braucht zwingend, z.B.: "gs -dPSFitPage -g1050x1485 -r127"
 +
 +dpi 25.4 div massstab div dup scale                             % damit alles automatisch im richtien Maßstab angezeit wird
 +
 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 +%%% Beginn der Zeichnung
 +newpath
 +
 +% Ränder bzw. Rahmen zeichnen
 +.3 mm setlinewidth                                              % Linienbreite: 0,3 mm
 +p-rand-links   p-rand-unten  moveto                             % Rahmen in Millimeter: X:Y unten links
 +p-rand-links   p-rand-oben   lineto                             % Rahmen in Millimeter: linker Rand
 +p-rand-rechts  p-rand-oben   lineto                             % Rahmen in Millimeter: oberer Rand
 +p-rand-rechts  p-rand-unten  lineto                             % Rahmen in Millimeter: rechter Rand
 +p-rand-links   p-rand-unten  lineto                             % Rahmen in Millimeter: unterer Rand
 +
 +%------------------------------------------------------------------------------%
 +%%% Umlaute & Sonderzeichen
 +
 +legende-links p-rand-oben moveto
 +0 1 zeile neg rmoveto
 +(Umlaute: Ää Öö Üü) show                 % Umlaute
 +
 +legende-links p-rand-oben moveto
 +0 2 zeile neg rmoveto
 +(Sonderzeichen: & ß € µ é è ¹ ² ³ ¼ ½) show                 % Sonderzeichen
 +
 +closepath                                                       % diese Zeichnung beenden
 +stroke                                                          % alle aufgeführten Zeichenkomandos jetzt ausführen
 +%==============================================================================%
 +newpath % neue Zeichnung beginnen
 +
 +% Kreis zeichnen - mit Millimeterangeben, dann skaliert die Größe NICHT mit dem Maßstab
 +150 mm 210 mm moveto % zur 3-Uhr-Position vom Kreis gehen
 +100 mm 210 mm 50 mm 0 360 arc % einen Vollkreis, links rum zeichnen
 +% 3-Uhr-Position des Kreises:               150 mm von links und 210 mm von unten
 +% Mittelpunkt des Kreises:                  100 mm von links und 210 mm von unten
 +% Radius vom Kreis:                          50 mm
 +% Startposition, um den Kreis zu zeichnen:    0°
 +% Kreisbogen, der gezeichnet werden soll:   360° (links rum)
 +
 +closepath % diese Zeichnung beenden
 +%------------------------------------------------------------------------------%
 +%%% Füllen - Anfang
 +
 +gsave % Grafic-Save (sichern)
 +0.5 setgray % Füllfarbe festlegen
 +fill % geschlossenes Objekt, in dieser Zeichnung, ausfüllen
 +grestore % Grafic-Restore (zurückholen)
 +%4 setlinewidth
 +%0.75 setgray
 +
 +%%% Füllen - Ende
 +%------------------------------------------------------------------------------%
 +stroke % alle aufgeführten Zeichenkomandos jetzt ausführen
 +%==============================================================================%
 +newpath % neue Zeichnung beginnen
 +
 +.2 setlinewidth % Linienbreite
 +
 +% Viereck zeichnen - ohne Millimeterangeben, dann skaliert die Größe mit dem Maßstab
 +100 100 moveto % gehe zum Startpunkt
 +0 50 rlineto % zeichne eine Linie nach oben
 +50 0 rlineto % zeichne eine Linie nach rechts
 +0 -50 rlineto % zeichne eine Linie nach unten
 +-50 0 rlineto % zeichne eine Linie nach links
 +
 +closepath % diese Zeichnung beenden
 +%------------------------------------------------------------------------------%
 +%%% Füllen - Anfang
 +
 +% Viereck ausfüllen
 +gsave % Grafic-Save (sichern)
 +0.75 setgray % Füllfarbe festlegen
 +fill % geschlossenes Objekt, in dieser Zeichnung, ausfüllen
 +grestore % Grafic-Restore (zurückholen)
 +
 +%%% Füllen - Ende
 +%------------------------------------------------------------------------------%
 +stroke % alle aufgeführten Zeichenkomandos jetzt ausführen
 +%==============================================================================%
 +newpath % neue Zeichnung beginnen
 +
 +.1 setlinewidth % Linienbreite
 +
 +% 3 ineinander liegende Kreise zeichnen - ohne Millimeterangeben, dann skaliert die Größe mit dem Maßstab
 +% 1. Kreis - größter, ganz außen
 +125   100 moveto % zur 3-Uhr-Position vom Kreis gehen
 +100   100 25   0 360 arc % einen Vollkreis, links rum zeichnen
 +% 2. Kreis - mittlerer, in der Mitte
 +124.5 100 moveto % zur 3-Uhr-Position vom Kreis gehen
 +100   100 24.5 0 360 arc % einen Vollkreis, links rum zeichnen
 +% 3. Kreis - kleinster, innen
 +124   100 moveto % zur 3-Uhr-Position vom Kreis gehen
 +100   100 24   0 360 arc % einen Vollkreis, links rum zeichnen
 +
 +%------------------------------------------------------------------------------%
 +%%% Legende
 +legende-links legende-unten moveto                              % in Millimeter
 +0 1 zeile rmoveto
 +(Maßstab: 1:) show
 +massstab 2 string cvs show                                      % "2 string" bedutet, dass in "massstab" ein String mit 2 Zeichen st    eckt (das kann auch größer angegeben werden)
 +
 +%%% Auflösung
 +legende-links  legende-unten  moveto
 +(A4 / ) show
 +dpi 8 string cvs show
 +( dpi / ) show
 +a4x 8 string cvs show
 +( x ) show
 +a4y 8 string cvs show
 +
 +closepath                                                       % diese Zeichnung beenden
 +stroke                                                          % alle aufgeführten Zeichenkomandos jetzt ausführen
 +%==============================================================================%
 +newpath % neue Zeichnung beginnen
 +
 +%------------------------------------------------------------------------------%
 +%%% 1. Maßlinien, die immmer im Maßstab 1:1 sind und nicht skalieren
 +p-rand-rechts 48 mm sub p-rand-unten 7 mm add moveto
 +currentpoint /y-start-1 exch def /x-start-1 exch def
 +%(X: ) show
 +%x-start-1 8 string cvs show
 +%( / Y: ) show
 +%y-start-1 8 string cvs show
 +/Counter y-start-1 def
 +/Inc 10 mm def % mit "mm"-Angabe, damit es nicht skaliert
 +/Max p-rand-oben Inc 3 mul sub def
 +{
 + x-start-1 Counter moveto
 + 2 mm 0 rlineto
 + Counter massstab div 8 string cvs show % Counter muß durch massstab dividiert werden, damit die Millimeterangaben auch stimmen
 + ( mm) show
 + x-start-1 Counter moveto
 + 0 10 mm rlineto
 + /Counter Counter Inc add def
 + Counter Max ge { exit } if
 +} loop
 +
 +%------------------------------------------------------------------------------%
 +%%% 2. Maßlinien, die sich dem Maßstab anpassen und skalieren, sowie die Länge dem Maßstab anpassen
 +x-start-1 21 mm add p-rand-unten 7 mm add moveto
 +currentpoint /y-start-2 exch def /x-start-2 exch def
 +%(X: ) show
 +%x-start-2 8 string cvs show
 +%( / Y: ) show
 +%y-start-2 8 string cvs show
 +/Counter y-start-2 def
 +/Inc 10 def % ohne "mm"-Angabe, damit es skaliert
 +/Max p-rand-oben Inc 3 mul sub def
 +{
 + x-start-2 Counter moveto
 + 2 mm 0 rlineto
 + Counter 8 string cvs show
 + ( mm) show
 + x-start-2 Counter moveto
 + 0 10 rlineto
 + /Counter Counter Inc add def
 + Counter Max ge { exit } if
 +} loop
 +
 +%------------------------------------------------------------------------------%
 +
 +closepath                                                       % diese Zeichnung beenden
 +stroke                                                          % alle aufgeführten Zeichenkomandos jetzt ausführen
 +%%% Ende der Zeichnung
 +%------------------------------------------------------------------------------%
 +showpage                                                        % Ausgabe der fertigen Seite
 +</code>
 +
 +[[https://wiki.gnome.org/Apps/Evince|Evince]] kann diese PDF-Dateien nur mit mangelhafter Qualität ausdrucken, [[https://www.mozilla.org/de/firefox/new/|FireFox]] dagegen, druckt diese mit guter Qualität aus.
 +
 +{{ ::bilder:test_1zu1.png?400 |(Maßstab 1:1) PS-Test indem der ausgefüllte Kreis nicht mit dem Maßstab skaliert, weil seine Werte in "mm" angegeben wurden; das Viereck, um dessen untere linke Ecke sich drei Ringe/Kreise ausbreiten, skaliert samt der Kreise mit dem Maßstab, weil seine Werte ohne die "mm"-Angabe gesetzt wurden}}
 +{{ ::bilder:test_1zu2.png?400 |(Maßstab 1:2) PS-Test indem der ausgefüllte Kreis nicht mit dem Maßstab skaliert, weil seine Werte in "mm" angegeben wurden; das Viereck, um dessen untere linke Ecke sich drei Ringe/Kreise ausbreiten, skaliert samt der Kreise mit dem Maßstab, weil seine Werte ohne die "mm"-Angabe gesetzt wurden}}
 +{{ ::bilder:test_1zu3.png?400 |(Maßstab 1:3) PS-Test indem der ausgefüllte Kreis nicht mit dem Maßstab skaliert, weil seine Werte in "mm" angegeben wurden; das Viereck, um dessen untere linke Ecke sich drei Ringe/Kreise ausbreiten, skaliert samt der Kreise mit dem Maßstab, weil seine Werte ohne die "mm"-Angabe gesetzt wurden}}
 +