Inhaltsverzeichnis
PostScript (PS)
-
- 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.
- 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 dasPortable 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 3Der 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.
PDF-Dateien zusammenfassen
- benötigt ghostscript cli:
gs
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) pdfimage32stattpdfimage24nutzen, 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 2007-07-26 hat sich darüber bereits jemand bei GhostScript beschwert, leider ohne Erfolg:
Der 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:
- 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
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
# 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
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
- /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 #------------------------------------------------------------------------------#
- 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
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
- 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
- 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
Evince kann diese PDF-Dateien nur mit mangelhafter Qualität ausdrucken, FireFox dagegen, druckt diese mit guter Qualität aus.




