====== 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:
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:
...
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:
...
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.
...
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:
#!/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
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
% vergleiche, ob 4 kleiner ist als 3
4 3 lt
{
(TruePart) print
}
{
(FalsePart) print
}
ifelse
% von 0 bis 4 in 1er-Schritten
0 1 4 {==} for
/Counter 0 def
/Max 9 def
/Inc 1 def
{
Counter ==
Counter Max ge { exit } if
/Counter Counter Inc add def
} loop
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
%!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
%!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
%!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
%!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
%!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
%!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
%!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
%!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
%!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
%!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
{{ :bilder:ziffernblatt.png?400|}}
%!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
==== Umlaute, Skalierung und Maßstab in PS ====
=== Skalierung (höhere DPI-Werte) in 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
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
...
=== Maßstab in 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
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
...
=== 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:
%!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
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
...
=== 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
#!/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
#------------------------------------------------------------------------------#
%!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
==== 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 ===
%!PS-Adobe-3.0
(Zeichensatz_-_WINDOWS-1252.ps) run % Zeichensatz, mit Umlauten und Sonderzeichen, importieren
...
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
%%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
%!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
[[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}}