postscript_ps
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
| Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende Überarbeitung | ||
| postscript_ps [2025-06-05 13:38:51] – [Mach es besser mit GhostScript] manfred | postscript_ps [2025-10-16 18:16:31] (aktuell) – david | ||
|---|---|---|---|
| Zeile 1: | Zeile 1: | ||
| + | ====== PostScript (PS) ====== | ||
| + | |||
| + | * **[[https:// | ||
| + | * 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:// | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | * **[[https:// | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | * [[http:// | ||
| + | * [[http:// | ||
| + | |||
| + | |||
| + | - 1984: **'' | ||
| + | - 1988: **'' | ||
| + | - 1991: **'' | ||
| + | - 1997: **'' | ||
| + | - 2023: [[https:// | ||
| + | |||
| + | |||
| + | ===== PDF-Dateien zusammenfassen ===== | ||
| + | |||
| + | * benötigt ghostscript cli: '' | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | |||
| + | So kann man mehrere PDF-Dateien zu einer einzigen zusammenfassen und gleichzeitig optimieren / komprimieren, | ||
| + | |||
| + | vector (text markierbar): | ||
| + | > gs -dBATCH -dNOPAUSE -dQUIET -dPDFA=2 -dPDFACompatibilityPolicy=1 -dColorConversionStrategy=/ | ||
| + | |||
| + | bitmap/ | ||
| + | > gs -dBATCH -dNOPAUSE -dQUIET -dPDFA=2 -dPDFACompatibilityPolicy=1 -dColorConversionStrategy=/ | ||
| + | |||
| + | * Eine interne Auflösung von 600 ppi ('' | ||
| + | * '' | ||
| + | |||
| + | pdf metadata: | ||
| + | > gs -dBATCH -dNOPAUSE -dQUIET -dPDFA=2 -dPDFACompatibilityPolicy=1 -dColorConversionStrategy=/ | ||
| + | |||
| + | ==== alternative Optionen ==== | ||
| + | |||
| + | PDF/A Versionen: | ||
| + | |||
| + | * PDF/A-1 (2005, PDF 1.4): '' | ||
| + | * PDF/A-2 (2011, PDF 1.7): '' | ||
| + | * PDF/A-3 (2012, PDF 1.7): '' | ||
| + | * PDF/A-4 (2020, PDF 2.0): '' | ||
| + | |||
| + | Presets für " | ||
| + | |||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | |||
| + | |||
| + | ===== 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 | ||
| + | \Gamma \Delta | ||
| + | \Gamma \Delta | ||
| + | ... | ||
| + | |||
| + | 50 Euro Startguthaben und ein komfortabler Konto-Umzugsservice- das kostenlose Girokonto* der Commerzbank zahlt sich aus!Unser Angebot: Sie zahlen dauerhaft keine Kontogebu" | ||
| + | |||
| + | ... | ||
| + | |||
| + | Zahlungsempfa" | ||
| + | |||
| + | Commerzbank AGVerwendungszweck: | ||
| + | |||
| + | So fu" | ||
| + | IBAN:BIC: | ||
| + | ... | ||
| + | </ | ||
| + | |||
| + | Am [[http:// | ||
| + | * [[http:// | ||
| + | * [[http:// | ||
| + | |||
| + | Der [[http:// | ||
| + | < | ||
| + | ... | ||
| + | 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: | ||
| + | <file bash pdf_zu_text.sh> | ||
| + | #!/bin/bash | ||
| + | |||
| + | ### einen Namen ohne Klammern und ohne Leerzeichen erzeugen | ||
| + | NEUERNAME=" | ||
| + | |||
| + | ### die Datei ggf. umkopieren, weil es sich mit Dateien, | ||
| + | ### die Leerzeichen bzw. Klammern im Namen haben, schlecht arbeiten lässt | ||
| + | cp " | ||
| + | |||
| + | ### vom Namen die Endung abtrennen, um die Dateinamen von den automatisch erzeugten Dateien zu raten | ||
| + | DATEINAME=" | ||
| + | |||
| + | ### 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/ | ||
| + | |||
| + | |||
| + | ===== PostScript-Code selber erstellen ===== | ||
| + | |||
| + | hilfreiche Literatur: | ||
| + | * Das "Red Book", die Standardreferenz von Adobe, beschreibt PostScript Level 1 und 2 in allen Einzelheiten. " | ||
| + | * Das "Blue Book" ist die Einführung von Adobe in PostScript anhand einfacher Beispiele. " | ||
| + | * Das "Green Book" ist eine Diskussion des Designs von PostScript-Programmen. " | ||
| + | * Aus meinem Kursskript ist eine erweiterte und umfassende Referenz und Einführung in die Sprache hervorgegangen, | ||
| + | * Einführender Artikel " | ||
| + | * Merz, Thomas / Drümmer, Olaf - "Die PostScript- & Acrobat-Bibel - Was Sie schon immer über PostScript und Acrobat/PDF wissen wollten" | ||
| + | |||
| + | |||
| + | ==== Ausgabe ==== | ||
| + | |||
| + | **''# | ||
| + | |||
| + | # ImageMagick7 in FreeBSD 14.2 installieren: | ||
| + | > pkg install graphics/ | ||
| + | |||
| + | so kann man die Ausgabe, mit Hilfe von // | ||
| + | > gs -sDEVICE=x11 -sPAPERSIZE=a4 beispielseite.ps | ||
| + | |||
| + | so kann man mit // | ||
| + | > 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 | ||
| + | |||
| + | **''# | ||
| + | |||
| + | so kann man mit // | ||
| + | > magick -page a4 -density 72 beispielseite.ps beispielseite.pdf | ||
| + | |||
| + | den Koordinatennullpunkt definiert man mit '' | ||
| + | > 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 | ||
| + | " | ||
| + | | ||
| + | | ||
| + | PAPERSIZE | ||
| + | -------------------------------------------------------------------- | ||
| + | a0 | ||
| + | a1 | ||
| + | a2 | ||
| + | a3 | ||
| + | a4 | ||
| + | a5 | ||
| + | a6 | ||
| + | a7 | ||
| + | a8 | ||
| + | a9 | ||
| + | a10 1.02778 | ||
| + | b0 | ||
| + | b1 | ||
| + | b2 | ||
| + | b3 | ||
| + | b4 | ||
| + | b5 | ||
| + | archA 9 12 | ||
| + | archB 12 | ||
| + | archC 18 | ||
| + | archD 24 | ||
| + | archE 36 | ||
| + | flsa | ||
| + | flse | ||
| + | halfletter | ||
| + | note | ||
| + | letter | ||
| + | legal 8.5 14 | ||
| + | 11x17 11 | ||
| + | ledger | ||
| + | |||
| + | |||
| + | ==== 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: | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | Ghostscript is also using fontconfig to search for font files | ||
| + | For more information, | ||
| + | Please report bugs to bugs.ghostscript.com. | ||
| + | |||
| + | nun kann man in den einzelnen Pfaden nach Schriftarten suchen: | ||
| + | > ls / | ||
| + | C059-BdIta | ||
| + | C059-Bold | ||
| + | C059-Italic | ||
| + | C059-Roman | ||
| + | D050000L | ||
| + | NimbusMonoPS-Bold | ||
| + | NimbusMonoPS-BoldItalic | ||
| + | NimbusMonoPS-Italic | ||
| + | NimbusMonoPS-Regular | ||
| + | |||
| + | > less / | ||
| + | ... | ||
| + | % Actual fonts | ||
| + | | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | | ||
| + | / | ||
| + | | ||
| + | / | ||
| + | | ||
| + | / | ||
| + | ... | ||
| + | |||
| + | ==== Beispiel ==== | ||
| + | |||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | |||
| + | # Operatoren | ||
| + | lt - kleiner als | ||
| + | gt - größer als | ||
| + | eq - gleich | ||
| + | ne - ungleich | ||
| + | ge - größer oder gleich | ||
| + | le - kleiner oder gleich | ||
| + | |||
| + | '' | ||
| + | |||
| + | <code ps> | ||
| + | % vergleiche, ob 4 kleiner ist als 3 | ||
| + | 4 3 lt | ||
| + | { | ||
| + | (TruePart) print | ||
| + | } | ||
| + | { | ||
| + | (FalsePart) print | ||
| + | } | ||
| + | ifelse | ||
| + | </ | ||
| + | |||
| + | <code ps> | ||
| + | % von 0 bis 4 in 1er-Schritten | ||
| + | 0 1 4 {==} for | ||
| + | </ | ||
| + | |||
| + | <code ps> | ||
| + | /Counter 0 def | ||
| + | /Max 9 def | ||
| + | /Inc 1 def | ||
| + | { | ||
| + | Counter == | ||
| + | Counter Max ge { exit } if | ||
| + | /Counter Counter Inc add def | ||
| + | } loop | ||
| + | </ | ||
| + | |||
| + | <code ps> | ||
| + | currentpoint /y exch def /x exch def % aktuelle Position (X-Y-Koordinaten von der Start-Position bzw. dem Kreismittelpunkt) in x und y einspeichern | ||
| + | 12 0 rmoveto | ||
| + | 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 | ||
| + | </ | ||
| + | |||
| + | <file ps Pfeil_nach_rechts.ps> | ||
| + | %!PS-Adobe-3.0 | ||
| + | |||
| + | /inch {72 mul} def | ||
| + | /cm {28.346457 mul} def | ||
| + | /mm {2.8346457 mul} def | ||
| + | |||
| + | / | ||
| + | 10 scalefont setfont | ||
| + | |||
| + | %%% Beginn Pfeil nach rechts | ||
| + | newpath | ||
| + | |||
| + | 0.5 setlinewidth | ||
| + | 0 setgray | ||
| + | |||
| + | % Start | ||
| + | 16 cm 4 cm moveto | ||
| + | |||
| + | % nach rechts | ||
| + | 3 cm 0 cm rlineto | ||
| + | |||
| + | % nach oben | ||
| + | 0 cm 0.5 cm rlineto | ||
| + | |||
| + | % nach rechts unten | ||
| + | 1 cm -1 cm rlineto | ||
| + | |||
| + | % nach links unten | ||
| + | -1 cm -1 cm rlineto | ||
| + | |||
| + | % nach oben | ||
| + | 0 cm 0.5 cm rlineto | ||
| + | |||
| + | % nach links | ||
| + | -3 cm 0 cm rlineto | ||
| + | |||
| + | % nach oben | ||
| + | 0 cm 0.5 cm rlineto | ||
| + | |||
| + | %%% Ende Pfeil nach rechts | ||
| + | closepath | ||
| + | stroke | ||
| + | </ | ||
| + | |||
| + | <file ps Pfeil_links_gedreht.ps> | ||
| + | %!PS-Adobe-3.0 | ||
| + | |||
| + | /inch {72 mul} def | ||
| + | /cm {28.346457 mul} def | ||
| + | /mm {2.8346457 mul} def | ||
| + | |||
| + | / | ||
| + | 12 scalefont setfont | ||
| + | |||
| + | %%% Beginn Pfeil links rum gedreht | ||
| + | newpath | ||
| + | |||
| + | 0.5 setlinewidth | ||
| + | 0 setgray | ||
| + | |||
| + | % Start - zum Drehpunkt gehen | ||
| + | 16 cm 4 cm moveto | ||
| + | |||
| + | % 45° links rum (gegen den Uhrzeigersinn) drehen | ||
| + | 45 rotate | ||
| + | |||
| + | % kompletten Pfeil um 1,5 cm nach rechts verschieben | ||
| + | 1.5 cm 0 cm rmoveto | ||
| + | |||
| + | % nach rechts | ||
| + | 3 cm 0 cm rlineto | ||
| + | |||
| + | % nach oben | ||
| + | 0 cm 0.5 cm rlineto | ||
| + | |||
| + | % nach rechts unten | ||
| + | 1 cm -1 cm rlineto | ||
| + | |||
| + | % nach links unten | ||
| + | -1 cm -1 cm rlineto | ||
| + | |||
| + | % nach oben | ||
| + | 0 cm 0.5 cm rlineto | ||
| + | |||
| + | % nach links | ||
| + | -3 cm 0 cm rlineto | ||
| + | |||
| + | % nach oben | ||
| + | 0 cm 0.5 cm rlineto | ||
| + | |||
| + | % zurückdrehen | ||
| + | -45 rotate | ||
| + | |||
| + | %%% Ende Pfeil links rum gedreht | ||
| + | closepath | ||
| + | stroke | ||
| + | </ | ||
| + | |||
| + | <file ps Pfeil_rechts_gedreht.ps> | ||
| + | %!PS-Adobe-3.0 | ||
| + | |||
| + | /inch {72 mul} def | ||
| + | /cm {28.346457 mul} def | ||
| + | /mm {2.8346457 mul} def | ||
| + | |||
| + | / | ||
| + | 12 scalefont setfont % Schriftgroesse | ||
| + | |||
| + | %%% Beginn Pfeil rechts rum gedreht | ||
| + | newpath | ||
| + | |||
| + | 0.5 setlinewidth % Linienbreite | ||
| + | 0 setgray % schwarz | ||
| + | |||
| + | / | ||
| + | / | ||
| + | |||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | |||
| + | 4 cm 27 cm moveto % zum Drtehmittelpunkt gehen | ||
| + | -45 rotate % um -45° (rechts rum bzw. im Uhrzeigersinn) drehen | ||
| + | -3 cm 0 cm rmoveto % den Pfeil um 3 cm nach links verschieben | ||
| + | 0 pfeil-breite-halbe-p rlineto % eine halbe Pfeilbreite nach oben | ||
| + | pfeil-laenge-p 0 rlineto % um die Pfeillänge nach rechts | ||
| + | 0 pfeil-breite-halbe-p rlineto % eine halbe Pfeilbreite nach oben (1. Teil der Pfeilspitze) | ||
| + | pfeil-breite-p pfeil-breite-n rlineto % schräg nach rechts unten (2. Teil der Pfeilspitze) | ||
| + | pfeil-breite-n pfeil-breite-n rlineto % schräg nach links unten (3. Teil der Pfeilspitze) | ||
| + | 0 pfeil-breite-halbe-p rlineto % eine halbe Pfeilbreite nach oben (4. Teil der Pfeilspitze) | ||
| + | pfeil-laenge-n 0 rlineto % um die Pfeillänge nach links | ||
| + | 0 pfeil-breite-halbe-p rlineto % eine halbe Pfeilbreite nach oben | ||
| + | 45 rotate % wieder in die Ausgangslage zurückdrehen | ||
| + | |||
| + | %%% Ende Pfeil rechts rum gedreht | ||
| + | closepath | ||
| + | stroke | ||
| + | </ | ||
| + | |||
| + | <file ps zwei_Kreise.ps> | ||
| + | %!PS-Adobe-3.0 | ||
| + | % | ||
| + | % "0, 0" ist unten links in der Ecke | ||
| + | % x, y | ||
| + | % x = wagerecht | ||
| + | % y = senkrecht | ||
| + | % | ||
| + | %%% Kreis zeichnen | ||
| + | % | ||
| + | % | ||
| + | % | ||
| + | % | ||
| + | % | ||
| + | % | ||
| + | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% | ||
| + | |||
| + | /inch {72 mul} def | ||
| + | /cm {28.346457 mul} def | ||
| + | /mm {2.8346457 mul} def | ||
| + | |||
| + | / | ||
| + | 20 scalefont | ||
| + | setfont | ||
| + | |||
| + | 1 setlinewidth | ||
| + | 0 setgray | ||
| + | |||
| + | %%% Beginn | ||
| + | newpath | ||
| + | |||
| + | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% | ||
| + | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% | ||
| + | |||
| + | % linker Kreis | ||
| + | 8 cm 23 cm moveto | ||
| + | 5 cm 23 cm 3 cm 0 360 arc | ||
| + | |||
| + | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% | ||
| + | |||
| + | % rechter Kreis | ||
| + | 18 cm 23 cm moveto | ||
| + | 15 cm 23 cm 3 cm 0 360 arc | ||
| + | |||
| + | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% | ||
| + | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% | ||
| + | |||
| + | %%% Ende | ||
| + | closepath | ||
| + | |||
| + | stroke | ||
| + | showpage | ||
| + | </ | ||
| + | |||
| + | <file ps beispielseite.ps> | ||
| + | %!PS-Adobe-3.0 | ||
| + | % | ||
| + | % 1 inch (1" | ||
| + | % 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 | ||
| + | % | ||
| + | % | ||
| + | % | ||
| + | % | ||
| + | % | ||
| + | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% | ||
| + | |||
| + | /inch {72 mul} def | ||
| + | /cm {28.346457 mul} def | ||
| + | |||
| + | / | ||
| + | 20 scalefont | ||
| + | setfont | ||
| + | |||
| + | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% | ||
| + | %%% Linienbreite | ||
| + | % 1 setlinewidth | ||
| + | |||
| + | %%% unterbrochene Linie | ||
| + | % [ 10 5 2 5 ] 5 setdash | ||
| + | % % die erste Linie ist beim ersten Aufruf um 5 Punkte verkuerzt | ||
| + | |||
| + | %%% Anfangs- und Endform der Linie | ||
| + | % 0 setlinecap | ||
| + | % 1 setlinecap | ||
| + | % 2 setlinecap | ||
| + | |||
| + | %%% Knickformen der Linie | ||
| + | % 0 setlinejoin | ||
| + | % 1 setlinejoin | ||
| + | % 2 setlinejoin | ||
| + | |||
| + | %%% Grau-Toenung | ||
| + | % 0 setgray | ||
| + | |||
| + | %%% Faerbung | ||
| + | % .7 .1 .2 setrgbcolor | ||
| + | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% | ||
| + | |||
| + | %%% Beginn | ||
| + | newpath | ||
| + | |||
| + | % PAPERSIZE | ||
| + | % a4 | ||
| + | 1.2 inch 10 inch moveto | ||
| + | (ein Zoll zum Quadrat, mit " | ||
| + | 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 | ||
| + | % a4 | ||
| + | 3 cm 19.5 cm moveto | ||
| + | (ein Zentimeter zum Quadrat, mit " | ||
| + | 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 " | ||
| + | 3 cm 15.3 cm moveto | ||
| + | (einen Kreis mit einem Zentimeter Durchmesser, | ||
| + | 3 cm 14.5 cm moveto | ||
| + | (mit " | ||
| + | |||
| + | %%% 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 " | ||
| + | |||
| + | %%% Ende | ||
| + | closepath | ||
| + | |||
| + | stroke | ||
| + | showpage | ||
| + | </ | ||
| + | |||
| + | <file ps beispielseite_2.ps> | ||
| + | %!PS-Adobe-3.0 | ||
| + | % | ||
| + | % "0, 0" ist unten links in der Ecke | ||
| + | % x, y | ||
| + | % x = wagerecht | ||
| + | % y = senkrecht | ||
| + | % | ||
| + | % | ||
| + | %%% Kreis zeichnen: "4 cm 11 cm 1 cm 0 360 arc" | ||
| + | % | ||
| + | % | ||
| + | % | ||
| + | % | ||
| + | % | ||
| + | %%% Linien | ||
| + | % " | ||
| + | % " | ||
| + | % " | ||
| + | % | ||
| + | %%% Farbe | ||
| + | % 0 setgray | ||
| + | % .7 .1 .2 setrgbcolor | ||
| + | % | ||
| + | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% | ||
| + | |||
| + | /inch {72 mul} def | ||
| + | /cm {28.346457 mul} def | ||
| + | /mm {2.8346457 mul} def | ||
| + | |||
| + | / | ||
| + | 20 scalefont | ||
| + | setfont | ||
| + | |||
| + | 1 setlinewidth | ||
| + | |||
| + | %%% Beginn | ||
| + | newpath | ||
| + | |||
| + | |||
| + | %%% Ende | ||
| + | closepath | ||
| + | |||
| + | stroke | ||
| + | showpage | ||
| + | </ | ||
| + | |||
| + | <file ps abgerundete-ecke.ps> | ||
| + | %!PS-Adobe-3.0 | ||
| + | % | ||
| + | % "0, 0" ist unten links in der Ecke | ||
| + | % x, y | ||
| + | % x = wagerecht | ||
| + | % y = senkrecht | ||
| + | % | ||
| + | % | ||
| + | %%% Kreis zeichnen | ||
| + | % | ||
| + | % | ||
| + | % | ||
| + | % | ||
| + | % | ||
| + | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% | ||
| + | |||
| + | /inch {72 mul} def | ||
| + | /cm {28.346457 mul} def | ||
| + | |||
| + | / | ||
| + | 20 scalefont | ||
| + | setfont | ||
| + | |||
| + | 1 setlinewidth | ||
| + | 0 setgray | ||
| + | |||
| + | %%% Beginn | ||
| + | newpath | ||
| + | |||
| + | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% | ||
| + | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% | ||
| + | |||
| + | 0 cm 1 cm moveto | ||
| + | 5 cm 1 cm 5 cm 10 cm 1 cm arct | ||
| + | 5 cm 10 cm lineto | ||
| + | |||
| + | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% | ||
| + | % 5 cm 1 cm ............... arct % lineto zu dieser Koordinate | ||
| + | % ......... 5 cm 10 cm .... arct % um die Ecke zu dieser Koordinate | ||
| + | % .................... 1 cm arct % Radius des Kreisbogens um die Ecke | ||
| + | % 5 cm 1 cm 5 cm 10 cm 1 cm arct % kompletter Befehl | ||
| + | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% | ||
| + | |||
| + | %%% Ende | ||
| + | closepath | ||
| + | |||
| + | stroke | ||
| + | showpage | ||
| + | </ | ||
| + | |||
| + | <file ps test_1.ps> | ||
| + | %!PS-Adobe-3.0 | ||
| + | % | ||
| + | % "0, 0" ist unten links in der Ecke | ||
| + | % x, y | ||
| + | % x = wagerecht | ||
| + | % y = senkrecht | ||
| + | % | ||
| + | % | ||
| + | %%% Kreis zeichnen | ||
| + | % | ||
| + | % | ||
| + | % | ||
| + | % | ||
| + | % | ||
| + | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% | ||
| + | |||
| + | /inch {72 mul} def | ||
| + | /cm {28.346457 mul} def | ||
| + | |||
| + | / | ||
| + | 20 scalefont | ||
| + | setfont | ||
| + | |||
| + | 1 setlinewidth | ||
| + | 0 setgray | ||
| + | |||
| + | %%% 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 | ||
| + | % % die erste Linie ist beim ersten Aufruf um 5 Punkte verkuerzt | ||
| + | %0 cm 14 cm moveto | ||
| + | %21 cm 0 cm rlineto | ||
| + | |||
| + | %%% Ende | ||
| + | closepath | ||
| + | |||
| + | stroke | ||
| + | showpage | ||
| + | </ | ||
| + | |||
| + | <file ps Rosette.ps> | ||
| + | %!PS-Adobe-3.0 | ||
| + | |||
| + | /d 7.5 def % Feinheit der Rosette | ||
| + | |||
| + | gsave % speichere graphische Attribute | ||
| + | 200 200 translate % verschiebe Ursprung | ||
| + | 50 50 scale % 1 Einheit = 50pt | ||
| + | .02 setlinewidth % Linienbreite | ||
| + | |||
| + | 1 0 moveto % erste Linie | ||
| + | 360 d div cvi % wie oft? | ||
| + | { 120 d add rotate % drehe alles | ||
| + | 1 0 lineto % ziehe Linie | ||
| + | } repeat % Schleifenende | ||
| + | stroke % ziehe Pfad mit Farbe nach | ||
| + | |||
| + | grestore showpage % alles sichtbar machen | ||
| + | </ | ||
| + | |||
| + | |||
| + | <file ps Vorlage.ps> | ||
| + | %!PS-Adobe-3.0 | ||
| + | % | ||
| + | % "0, 0" ist unten links in der Ecke | ||
| + | % x, y | ||
| + | % x = wagerecht | ||
| + | % y = senkrecht | ||
| + | % | ||
| + | % | ||
| + | %%% Kreis zeichnen: "4 cm 11 cm 1 cm 0 360 arc" | ||
| + | % | ||
| + | % | ||
| + | % | ||
| + | % | ||
| + | % | ||
| + | %%% Linien | ||
| + | % " | ||
| + | % " | ||
| + | % " | ||
| + | % | ||
| + | %%% Farbe | ||
| + | % 0 setgray | ||
| + | % .7 .1 .2 setrgbcolor | ||
| + | % | ||
| + | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% | ||
| + | |||
| + | /inch {72 mul} def | ||
| + | /cm {28.346457 mul} def | ||
| + | /mm {2.8346457 mul} def | ||
| + | |||
| + | / | ||
| + | 20 scalefont | ||
| + | setfont | ||
| + | |||
| + | 1 setlinewidth | ||
| + | |||
| + | %%% Beginn | ||
| + | newpath | ||
| + | |||
| + | |||
| + | %%% Ende | ||
| + | closepath | ||
| + | |||
| + | stroke | ||
| + | showpage | ||
| + | </ | ||
| + | |||
| + | {{ : | ||
| + | <file ps Ziffernblatt.ps> | ||
| + | %!PS-Adobe-3.0 | ||
| + | % | ||
| + | % "0, 0" ist unten links in der Ecke | ||
| + | % x, y | ||
| + | % x = wagerecht | ||
| + | % y = senkrecht | ||
| + | % | ||
| + | %%% Kreis zeichnen | ||
| + | % | ||
| + | % | ||
| + | % | ||
| + | % | ||
| + | % | ||
| + | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% | ||
| + | |||
| + | /inch {72 mul} def | ||
| + | /cm {28.346457 mul} def | ||
| + | /mm {2.8346457 mul} def | ||
| + | |||
| + | /xmitte {10.5 cm} def | ||
| + | /ymitte {14.8 cm} def | ||
| + | |||
| + | / | ||
| + | / | ||
| + | / | ||
| + | |||
| + | % damit bekommt die Blattmitte die Koordinaten X=" | ||
| + | xmitte ymitte translate | ||
| + | |||
| + | / | ||
| + | 20 scalefont setfont | ||
| + | |||
| + | 1 setlinewidth | ||
| + | 0 setgray % schwarz | ||
| + | |||
| + | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% | ||
| + | |||
| + | % â / | ||
| + | % à /agrave ç / | ||
| + | % é /eacute É /Eacute ê / | ||
| + | % ë / | ||
| + | % ï / | ||
| + | % Ö / | ||
| + | % Ü /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 " | ||
| + | % bei " | ||
| + | % | ||
| + | % Nach einem " | ||
| + | % deshalb ist es besser, wenn sie jeweils in einen eigenen " | ||
| + | % gekapselt werden. | ||
| + | % | ||
| + | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% | ||
| + | % Kreise | ||
| + | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% | ||
| + | |||
| + | newpath | ||
| + | 0 0 radius-klein | ||
| + | closepath | ||
| + | stroke | ||
| + | |||
| + | newpath | ||
| + | 0 0 radius-mittel 360 0 arcn % 08,5 cm - Kreis | ||
| + | closepath | ||
| + | stroke | ||
| + | |||
| + | newpath | ||
| + | 0 0 radius-gross | ||
| + | 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 | ||
| + | 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 | ||
| + | -6 rotate | ||
| + | } loop % Schleifenende | ||
| + | |||
| + | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% | ||
| + | % Stunden-Striche + Stunden-Zahlen | ||
| + | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% | ||
| + | |||
| + | 1.5 rotate | ||
| + | 0 -3 translate | ||
| + | /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 | ||
| + | } 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 === | ||
| + | |||
| + | <code ps> | ||
| + | %!PS-Adobe 3.0 | ||
| + | |||
| + | % Skalierung | ||
| + | 127 25.4 div dup scale % bei 127 DPI ist 1 mm exakt 5 Pixel lang | ||
| + | |||
| + | /mm {5 mul} def % einen Millimeter " | ||
| + | |||
| + | %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 === | ||
| + | |||
| + | <code ps> | ||
| + | %!PS-Adobe 3.0 | ||
| + | |||
| + | %%% Maßstab der Zeichnung | ||
| + | %/massstab {3} def % 1:3 - hierbei entsprechen "3 Pixel" genau "1 mm" | ||
| + | /massstab {1} def % 1:1 - hierbei entspricht "1 Pixel" genau "1 mm" | ||
| + | |||
| + | /mm {massstab mul} def | ||
| + | |||
| + | % damit alles automatisch im richtien Maßstab angezeigt wird | ||
| + | %72 25.4 div massstab div dup scale % bei 72 DPI (allgemeiner Standard) ist 1 Zoll (25,4 mm) exakt 72 Pixel lang | ||
| + | 127 25.4 div massstab div dup scale % bei 127 DPI ist 1 mm exakt 5 Pixel lang (0,2 mm je Pixel) | ||
| + | %254 25.4 div massstab div dup scale % bei 254 DPI ist 1 mm exakt 10 Pixel lang (0,1 mm je Pixel) | ||
| + | %381 25.4 div massstab div dup scale % bei 381 DPI ist 1 mm exakt 15 Pixel lang (0, | ||
| + | %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/ | ||
| + | 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 **'' | ||
| + | Er wurde seinerzeit von // | ||
| + | |||
| + | Die Handhabung kann beispielsweise so aussehen (72 DPI): | ||
| + | # die PS-Datei schreiben/ | ||
| + | [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 '' | ||
| + | So spart man sich den Umwandlungsschritt mit '' | ||
| + | |||
| + | Hier der besagte PS-Zeichensatz mit Umlauten und Sonderzeichen: | ||
| + | <code ps> | ||
| + | %!PS-Adobe 3.0 | ||
| + | |||
| + | %%BeginProlog (OpenOffice.org 1.0.3) | ||
| + | / | ||
| + | /.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 / | ||
| + | /parenleft /parenright /asterisk /plus /comma /hyphen /period / | ||
| + | /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 / | ||
| + | /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 / | ||
| + | /circumflex / | ||
| + | /unused /quoteleft /quoteright / | ||
| + | /tilde /trademark /scaron / | ||
| + | /space /exclamdown /cent /sterling /currency /yen /brokenbar /section | ||
| + | /dieresis /copyright / | ||
| + | /degree /plusminus / | ||
| + | /cedilla / | ||
| + | /Agrave /Aacute / | ||
| + | /Egrave /Eacute / | ||
| + | /Eth /Ntilde /Ograve /Oacute / | ||
| + | /Oslash /Ugrave /Uacute / | ||
| + | /agrave /aacute / | ||
| + | /egrave /eacute / | ||
| + | /eth /ntilde /ograve /oacute / | ||
| + | /oslash /ugrave /uacute / | ||
| + | |||
| + | / | ||
| + | { 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 / | ||
| + | /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 | ||
| + | |||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | def 7 dict dup | ||
| + | /ImageType 1 put dup | ||
| + | /Width 7 -1 roll put dup | ||
| + | /Height 5 index put dup | ||
| + | / | ||
| + | /Decode 5 -1 roll psp_decodearray put dup | ||
| + | / | ||
| + | /DataSource 4 -1 roll 1 eq { psp_lzwfilter } { psp_ascii85filter } ifelse put | ||
| + | } def | ||
| + | %%EndProlog (OpenOffice.org 1.0.3) | ||
| + | |||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | |||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | |||
| + | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% | ||
| + | |||
| + | / | ||
| + | %/ | ||
| + | %/ | ||
| + | %/ | ||
| + | |||
| + | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% | ||
| + | |||
| + | ... | ||
| + | </ | ||
| + | |||
| + | |||
| + | === 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, | ||
| + | |||
| + | [user@rechner ~]$ / | ||
| + | |||
| + | <file bash / | ||
| + | #!/bin/sh | ||
| + | |||
| + | VERSION=" | ||
| + | |||
| + | # | ||
| + | |||
| + | ls " | ||
| + | DATEI_NAME=" | ||
| + | if [ x = " | ||
| + | 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=" | ||
| + | } | ||
| + | |||
| + | ### 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=" | ||
| + | if [ x = " | ||
| + | ### 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=" | ||
| + | if [ x = " | ||
| + | AUFLOESUNG=" | ||
| + | seitengroesse | ||
| + | else | ||
| + | seitengroesse | ||
| + | fi | ||
| + | else | ||
| + | seitengroesse | ||
| + | fi | ||
| + | |||
| + | # | ||
| + | echo " | ||
| + | # DATEI_NAME=' | ||
| + | # AUFLOESUNG=' | ||
| + | # SEITENGROESSE=' | ||
| + | " | ||
| + | # | ||
| + | # WARNING: The convert command is deprecated in IMv7, use " | ||
| + | for ENDUNG in pdf png | ||
| + | do | ||
| + | cat ${DATEI_NAME}.ps | iconv -f UTF-8 -t WINDOWS-1252 | magick -gravity SouthWest -colorspace RGB -quality 100 -page ${SEITENGROESSE} -density ${AUFLOESUNG} - ${DATEI_NAME}.${ENDUNG} | ||
| + | done | ||
| + | # | ||
| + | </ | ||
| + | |||
| + | <file ps Test.ps> | ||
| + | %!PS-Adobe 3.0 | ||
| + | |||
| + | %%BeginProlog (OpenOffice.org 1.0.3) | ||
| + | / | ||
| + | /.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 / | ||
| + | /parenleft /parenright /asterisk /plus /comma /hyphen /period / | ||
| + | /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 / | ||
| + | /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 / | ||
| + | /circumflex / | ||
| + | /unused /quoteleft /quoteright / | ||
| + | /tilde /trademark /scaron / | ||
| + | /space /exclamdown /cent /sterling /currency /yen /brokenbar /section | ||
| + | /dieresis /copyright / | ||
| + | /degree /plusminus / | ||
| + | /cedilla / | ||
| + | /Agrave /Aacute / | ||
| + | /Egrave /Eacute / | ||
| + | /Eth /Ntilde /Ograve /Oacute / | ||
| + | /Oslash /Ugrave /Uacute / | ||
| + | /agrave /aacute / | ||
| + | /egrave /eacute / | ||
| + | /eth /ntilde /ograve /oacute / | ||
| + | /oslash /ugrave /uacute / | ||
| + | |||
| + | / | ||
| + | { 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 / | ||
| + | /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 | ||
| + | |||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | def 7 dict dup | ||
| + | /ImageType 1 put dup | ||
| + | /Width 7 -1 roll put dup | ||
| + | /Height 5 index put dup | ||
| + | / | ||
| + | /Decode 5 -1 roll psp_decodearray put dup | ||
| + | / | ||
| + | /DataSource 4 -1 roll 1 eq { psp_lzwfilter } { psp_ascii85filter } ifelse put | ||
| + | } def | ||
| + | %%EndProlog (OpenOffice.org 1.0.3) | ||
| + | |||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | |||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | |||
| + | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% | ||
| + | |||
| + | %%% 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 % | ||
| + | 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 | ||
| + | |||
| + | / | ||
| + | %/ | ||
| + | %/ | ||
| + | %/ | ||
| + | |||
| + | 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 | ||
| + | |||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% | ||
| + | |||
| + | %==============================================================================% | ||
| + | newpath % neue Zeichnung beginnen | ||
| + | |||
| + | .3 setlinewidth % Linienbreite | ||
| + | %------------------------------------------------------------------------------% | ||
| + | %%% Umrandung | ||
| + | |||
| + | p-rand-links | ||
| + | p-rand-links | ||
| + | 200 mm 284 mm lineto % Rahmen in Millimeter | ||
| + | 200 mm p-rand-unten | ||
| + | p-rand-links | ||
| + | |||
| + | %------------------------------------------------------------------------------% | ||
| + | %%% 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" | ||
| + | |||
| + | %------------------------------------------------------------------------------% | ||
| + | %%% 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: | ||
| + | |||
| + | %------------------------------------------------------------------------------% | ||
| + | closepath % diese Zeichnung beenden | ||
| + | stroke % alle aufgeführten Zeichenkomandos jetzt zeichnen | ||
| + | %==============================================================================% | ||
| + | newpath % neue Zeichnung beginnen | ||
| + | |||
| + | % Kreis zeichnen - mit Millimeterangeben, | ||
| + | 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: | ||
| + | % Mittelpunkt des Kreises: | ||
| + | % Radius vom Kreis: | ||
| + | % Startposition, | ||
| + | % 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, | ||
| + | 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, | ||
| + | % 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 '' | ||
| + | |||
| + | 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 '' | ||
| + | # A4-Seiten-Breite in Pixel (bei 127 dpi): 210 mm * 127 dpi / 25,4 mm = 1050 | ||
| + | # A4-Seiten-Höhe | ||
| + | |||
| + | |||
| + | === Mit ImageMagick funktioniert es NICHT === | ||
| + | |||
| + | <code ps> | ||
| + | %!PS-Adobe-3.0 | ||
| + | |||
| + | (Zeichensatz_-_WINDOWS-1252.ps) run % Zeichensatz, | ||
| + | ... | ||
| + | </ | ||
| + | |||
| + | eine PNG-Datei generieren: | ||
| + | > magick -gravity SouthWest -colorspace RGB -quality 100 -page 1050x1485 -density 127 test.ps test.png | ||
| + | ... | ||
| + | Error: / | ||
| + | ... | ||
| + | |||
| + | eine PDF-Datei generieren: | ||
| + | > magick -gravity SouthWest -colorspace RGB -quality 100 -page 1050x1485 -density 127 test.ps test.pdf | ||
| + | ... | ||
| + | Error: / | ||
| + | ... | ||
| + | |||
| + | Dieser Fehler tritt auf, weil ImageMagick das Programm GhostScript immer wie folgt aufruft: | ||
| + | > gs -dSAFER ... | ||
| + | |||
| + | ...will man aber mit '' | ||
| + | > 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=/ | ||
| + | |||
| + | <file ps Zeichensatz_-_WINDOWS-1252.ps> | ||
| + | %%BeginProlog (OpenOffice.org 1.0.3 - 2003) | ||
| + | / | ||
| + | /.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 / | ||
| + | /parenleft /parenright /asterisk /plus /comma /hyphen /period / | ||
| + | /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 / | ||
| + | /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 / | ||
| + | /circumflex / | ||
| + | /unused /quoteleft /quoteright / | ||
| + | /tilde /trademark /scaron / | ||
| + | /space /exclamdown /cent /sterling /currency /yen /brokenbar /section | ||
| + | /dieresis /copyright / | ||
| + | /degree /plusminus / | ||
| + | /cedilla / | ||
| + | /Agrave /Aacute / | ||
| + | /Egrave /Eacute / | ||
| + | /Eth /Ntilde /Ograve /Oacute / | ||
| + | /Oslash /Ugrave /Uacute / | ||
| + | /agrave /aacute / | ||
| + | /egrave /eacute / | ||
| + | /eth /ntilde /ograve /oacute / | ||
| + | /oslash /ugrave /uacute / | ||
| + | |||
| + | / | ||
| + | { 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 / | ||
| + | /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 | ||
| + | |||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | def 7 dict dup | ||
| + | /ImageType 1 put dup | ||
| + | /Width 7 -1 roll put dup | ||
| + | /Height 5 index put dup | ||
| + | / | ||
| + | /Decode 5 -1 roll psp_decodearray put dup | ||
| + | / | ||
| + | /DataSource 4 -1 roll 1 eq { psp_lzwfilter } { psp_ascii85filter } ifelse put | ||
| + | } def | ||
| + | %%EndProlog (OpenOffice.org 1.0.3) | ||
| + | |||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | |||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | </ | ||
| + | |||
| + | <code ps test.ps> | ||
| + | %!PS-Adobe 3.0 | ||
| + | |||
| + | (Zeichensatz_-_WINDOWS-1252.ps) run % Zeichensatz, | ||
| + | |||
| + | %------------------------------------------------------------------------------% | ||
| + | %%% 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 | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | |||
| + | % Position der Legende | ||
| + | / | ||
| + | / | ||
| + | |||
| + | / | ||
| + | 4 mm scalefont setfont | ||
| + | /zeile {4 mm mul} def % Zeilenhoehe: | ||
| + | |||
| + | 0 setgray | ||
| + | |||
| + | %%% Ende - weitere Definitionen | ||
| + | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% | ||
| + | %%% Seitengröße festlegen | ||
| + | |||
| + | % Skalierung der Skizze - Seitenformat, | ||
| + | /a4x {x-a4 dpi mul 25.4 div} def | ||
| + | /a4y {y-a4 dpi mul 25.4 div} def | ||
| + | |||
| + | << /PageSize [ a4x a4y ] >> setpagedevice | ||
| + | |||
| + | 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 | ||
| + | p-rand-links | ||
| + | p-rand-links | ||
| + | p-rand-rechts | ||
| + | p-rand-rechts | ||
| + | p-rand-links | ||
| + | |||
| + | %------------------------------------------------------------------------------% | ||
| + | %%% Umlaute & Sonderzeichen | ||
| + | |||
| + | legende-links p-rand-oben moveto | ||
| + | 0 1 zeile neg rmoveto | ||
| + | (Umlaute: Ää Öö Üü) show | ||
| + | |||
| + | legende-links p-rand-oben moveto | ||
| + | 0 2 zeile neg rmoveto | ||
| + | (Sonderzeichen: | ||
| + | |||
| + | closepath | ||
| + | stroke | ||
| + | %==============================================================================% | ||
| + | newpath % neue Zeichnung beginnen | ||
| + | |||
| + | % Kreis zeichnen - mit Millimeterangeben, | ||
| + | 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: | ||
| + | % Mittelpunkt des Kreises: | ||
| + | % Radius vom Kreis: | ||
| + | % Startposition, | ||
| + | % 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, | ||
| + | 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, | ||
| + | % 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 | ||
| + | 0 1 zeile rmoveto | ||
| + | (Maßstab: 1:) show | ||
| + | massstab 2 string cvs show % "2 string" | ||
| + | |||
| + | %%% Auflösung | ||
| + | legende-links | ||
| + | (A4 / ) show | ||
| + | dpi 8 string cvs show | ||
| + | ( dpi / ) show | ||
| + | a4x 8 string cvs show | ||
| + | ( x ) show | ||
| + | a4y 8 string cvs show | ||
| + | |||
| + | closepath | ||
| + | stroke | ||
| + | %==============================================================================% | ||
| + | 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 " | ||
| + | /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 " | ||
| + | /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 | ||
| + | stroke | ||
| + | %%% Ende der Zeichnung | ||
| + | %------------------------------------------------------------------------------% | ||
| + | showpage | ||
| + | </ | ||
| + | |||
| + | [[https:// | ||
| + | |||
| + | {{ :: | ||
| + | {{ :: | ||
| + | {{ :: | ||
| + | |||
