PostScript stammt aus dem Jahre 1988, deshalb kann es nur mit 1-Byte-Zeichensätzen (8 Bit pro Zeichen) umgehen. Das Bereitet enorme Schwierigkeiten, wenn man ihm Unicode-Zeichensätze beipulen will…
Um in PS/PDF-Dokumenten mit Umlauten schreiben zu können, muss man einen PS-Zeichensatz (in 8 Bit) mit Umlauten haben.
%!PS %------------------------------------------------------------------------------% % Schriftarten laden /Courier findfont % (wie Courier) Schriftart mit fester Breite /Courier-Oblique findfont % (wie Courier-Oblique) Schriftart mit fester Breite in Kursiv /Courier-Bold findfont % (wie Courier-Bold) Schriftart mit fester Breite in Fett /Courier-BoldOblique findfont % (wie Courier-BoldOblique) Schriftart mit fester Breite in Fett und Kursiv /Helvetica findfont % (wie Helvetica) Schriftart in voller Größe /Helvetica-Oblique findfont % (wie Helvetica-Oblique) Schriftart in voller Größe in Kursiv /Helvetica-Bold findfont % (wie Helvetica-Bold) Schriftart in voller Größe in Fett /Helvetica-BoldOblique findfont % (wie Helvetica-BoldOblique) Schriftart in voller Größe in Fett und Kursiv /Helvetica-Narrow findfont % (wie Helvetica-Narrow) schlanke Schriftart in voller Größe /Helvetica-Narrow-Oblique findfont % (wie Helvetica-Narrow-Oblique) schlanke Schriftart in voller Größe in Kursiv /Helvetica-Narrow-Bold findfont % (wie Helvetica-Narrow-Bold) schlanke Schriftart in voller Größe in Fett /Helvetica-Narrow-BoldOblique findfont % (wie Helvetica-Narrow-BoldOblique) schlanke Schriftart in voller Größe in Fett und Kursiv /NewCenturySchlbk-Roman findfont % (wie New Century Schoolbook Roman) eine Serifenschrift im Stil klassischer Buch- und Lehrbuchschriften /Times-Roman findfont % (wie Times-Roman) Schriftart etwas kleiner mit Serifen /Times-Italic findfont % (wie Times-Italic) Schriftart etwas kleiner mit Serifen in Kursiv /Times-Bold findfont % (wie Times-Bold) Schriftart etwas kleiner mit Serifen in Fett /Times-BoldItalic findfont % (wie Times-BoldItalic) Schriftart etwas kleiner mit Serifen in Fett und Kursiv 10 scalefont setfont % Schriftgröße %------------------------------------------------------------------------------% % Schriftart auswählen und Schriftgröße bestimmen /NewCenturySchlbk-Roman 14 selectfont %------------------------------------------------------------------------------% newpath % neue Zeichnung beginnen .3 setlinewidth % Linienbreite %------------------------------------------------------------------------------% 90 130 moveto % zur Startposition der Ausgabe gehen (Zeichensatz Adobe-ASCII ohne Umlaute und ohne Eurozeichen) show 90 110 moveto % zur Startposition der Ausgabe gehen (Umlaute: Ää Öö Üü) show % Umlaute 90 90 moveto % zur Startposition der Ausgabe gehen (Sonderzeichen: & ß € µ é è ¹ ² ³ ¼ ½) show % Sonderzeichen %------------------------------------------------------------------------------% closepath % diese Zeichnung beenden stroke % alle aufgeführten Zeichenkomandos jetzt zeichnen
> cat ps-test_ASCII.ps | iconv -f UTF-8 -t ASCII | magick -page a4 -colorspace RGB - ps-test_ASCII.png
%!PS
%------------------------------------------------------------------------------%
% Latin-1 und ISO-8859-1 sind im Wesentlichen dasselbe Zeichensatz-Mapping.
% Der Begriff "Latin-1" ist ein umgangssprachlicher Name für den
% standardisierten ISO/IEC 8859-1.
%------------------------------------------------------------------------------%
% Verlatinisierung
/latinize {
findfont
dup length dict begin
{1 index /FID ne {def} {pop pop} ifelse} forall
/Encoding ISOLatin1Encoding def
currentdict
end
definefont pop
} bind def
/Courier-Latin1 /Courier latinize
/Courier-Oblique-Latin1 /Courier-Oblique latinize
/Courier-Bold-Latin1 /Courier-Bold latinize
/Courier-BoldOblique-Latin1 /Courier-BoldOblique latinize
/Helvetica-Latin1 /Helvetica latinize
/Helvetica-Oblique-Latin1 /Helvetica-Oblique latinize
/Helvetica-Bold-Latin1 /Helvetica-Bold latinize
/Helvetica-BoldOblique-Latin1 /Helvetica-BoldOblique latinize
/Helvetica-Narrow-Latin1 /Helvetica-Narrow latinize
/Helvetica-Narrow-Oblique-Latin1 /Helvetica-Narrow-Oblique latinize
/Helvetica-Narrow-Bold-Latin1 /Helvetica-Narrow-Bold latinize
/Helvetica-Narrow-BoldOblique-Latin1 /Helvetica-Narrow-BoldOblique latinize
/NewCenturySchlbk-Roman-Latin1 /NewCenturySchlbk-Roman latinize
/Times-Roman-Latin1 /Times-Roman latinize
/Times-Italic-Latin1 /Times-Italic latinize
/Times-Bold-Latin1 /Times-Bold latinize
/Times-BoldItalic-Latin1 /Times-BoldItalic latinize
%------------------------------------------------------------------------------%
% Schriftarten laden
/Courier-Latin1 findfont % (wie Courier) Schriftart mit fester Breite
/Courier-Oblique-Latin1 findfont % (wie Courier-Oblique) Schriftart mit fester Breite in Kursiv
/Courier-Bold-Latin1 findfont % (wie Courier-Bold) Schriftart mit fester Breite in Fett
/Courier-BoldOblique-Latin1 findfont % (wie Courier-BoldOblique) Schriftart mit fester Breite in Fett und Kursiv
/Helvetica-Latin1 findfont % (wie Helvetica) Schriftart in voller Größe
/Helvetica-Oblique-Latin1 findfont % (wie Helvetica-Oblique) Schriftart in voller Größe in Kursiv
/Helvetica-Bold-Latin1 findfont % (wie Helvetica-Bold) Schriftart in voller Größe in Fett
/Helvetica-BoldOblique-Latin1 findfont % (wie Helvetica-BoldOblique) Schriftart in voller Größe in Fett und Kursiv
/Helvetica-Narrow-Latin1 findfont % (wie Helvetica-Narrow) schlanke Schriftart in voller Größe
/Helvetica-Narrow-Oblique-Latin1 findfont % (wie Helvetica-Narrow-Oblique) schlanke Schriftart in voller Größe in Kursiv
/Helvetica-Narrow-Bold-Latin1 findfont % (wie Helvetica-Narrow-Bold) schlanke Schriftart in voller Größe in Fett
/Helvetica-Narrow-BoldOblique-Latin1 findfont % (wie Helvetica-Narrow-BoldOblique) schlanke Schriftart in voller Größe in Fett und Kursiv
/NewCenturySchlbk-Roman-Latin1 findfont % (wie New Century Schoolbook Roman) eine Serifenschrift im Stil klassischer Buch- und Lehrbuchschriften
/Times-Roman-Latin1 findfont % (wie Times-Roman) Schriftart etwas kleiner mit Serifen
/Times-Italic-Latin1 findfont % (wie Times-Italic) Schriftart etwas kleiner mit Serifen in Kursiv
/Times-Bold-Latin1 findfont % (wie Times-Bold) Schriftart etwas kleiner mit Serifen in Fett
/Times-BoldItalic-Latin1 findfont % (wie Times-BoldItalic) Schriftart etwas kleiner mit Serifen in Fett und Kursiv
%------------------------------------------------------------------------------%
% Schriftart auswählen und Schriftgröße bestimmen
/NewCenturySchlbk-Roman-Latin1 14 selectfont
%------------------------------------------------------------------------------%
newpath % neue Zeichnung beginnen
.3 setlinewidth % Linienbreite
%------------------------------------------------------------------------------%
90 130 moveto % zur Startposition der Ausgabe gehen
(Zeichensatz Latin1 mit Umlaute aber ohne Eurozeichen) show
90 110 moveto % zur Startposition der Ausgabe gehen
(Umlaute: Ää Öö Üü) show % Umlaute
90 90 moveto % zur Startposition der Ausgabe gehen
(Sonderzeichen: & ß € µ é è ¹ ² ³ ¼ ½) show % Sonderzeichen
%------------------------------------------------------------------------------%
closepath % diese Zeichnung beenden
stroke % alle aufgeführten Zeichenkomandos jetzt zeichnen
> cat ps-test_Latin-1.ps | iconv -f UTF-8 -t ISO-8859-1 | magick -page a4 -colorspace RGB - ps-test_Latin-1.png
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 CP1252 (WINDOWS-1252).
Er wurde seinerzeit von OpenOffice.org 1.0.3 verwendet, 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 CP1252-Encoding überführen und direkt an ImageMagick übergeben: [user@rechner ~]$ cat Test.ps | iconv -f UTF-8 -t CP1252 | # 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 CP1252 | magick -gravity SouthWest -colorspace RGB -quality 100 - Test.pdf [user@rechner ~]$ cat Test.ps | iconv -f UTF-8 -t CP1252 | 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.
%!PS
%------------------------------------------------------------------------------%
% Latin-1 und ISO-8859-1 sind im Wesentlichen dasselbe Zeichensatz-Mapping.
% Der Begriff "Latin-1" ist ein umgangssprachlicher Name für den
% standardisierten ISO/IEC 8859-1.
%
% HTML5 schreibt vor: Als ISO-8859-1 deklarierte Seiten als Windows-1252 zu lesen.
%------------------------------------------------------------------------------%
% CP1252Encoding
%%BeginProlog (OpenOffice.org 1.0.3)
/CP1252Encoding [
/.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-cp1252 /URWGothicL-Book CP1252Encoding psp_definefont
/URWGothicL-Demi-cp1252 /URWGothicL-Demi CP1252Encoding psp_definefont
/URWGothicL-BookObli-cp1252 /URWGothicL-BookObli CP1252Encoding psp_definefont
/URWGothicL-DemiObli-cp1252 /URWGothicL-DemiObli CP1252Encoding psp_definefont
/URWBookmanL-Ligh-cp1252 /URWBookmanL-Ligh CP1252Encoding psp_definefont
/URWBookmanL-DemiBold-cp1252 /URWBookmanL-DemiBold CP1252Encoding psp_definefont
/URWBookmanL-LighItal-cp1252 /URWBookmanL-LighItal CP1252Encoding psp_definefont
/URWBookmanL-DemiBoldItal-cp1252 /URWBookmanL-DemiBoldItal CP1252Encoding psp_definefont
/CharterBT-Bold-cp1252 /CharterBT-Bold CP1252Encoding psp_definefont
/CharterBT-BoldItalic-cp1252 /CharterBT-BoldItalic CP1252Encoding psp_definefont
/CharterBT-Roman-cp1252 /CharterBT-Roman CP1252Encoding psp_definefont
/CharterBT-Italic-cp1252 /CharterBT-Italic CP1252Encoding psp_definefont
/CenturySchL-Roma-cp1252 /CenturySchL-Roma CP1252Encoding psp_definefont
/CenturySchL-Bold-cp1252 /CenturySchL-Bold CP1252Encoding psp_definefont
/CenturySchL-Ital-cp1252 /CenturySchL-Ital CP1252Encoding psp_definefont
/CenturySchL-BoldItal-cp1252 /CenturySchL-BoldItal CP1252Encoding psp_definefont
/NimbusSanL-Regu-cp1252 /NimbusSanL-Regu CP1252Encoding psp_definefont
/NimbusSanL-Bold-cp1252 /NimbusSanL-Bold CP1252Encoding psp_definefont
/NimbusSanL-ReguItal-cp1252 /NimbusSanL-ReguItal CP1252Encoding psp_definefont
/NimbusSanL-BoldItal-cp1252 /NimbusSanL-BoldItal CP1252Encoding psp_definefont
/NimbusSanL-ReguCond-cp1252 /NimbusSanL-ReguCond CP1252Encoding psp_definefont
/NimbusSanL-BoldCond-cp1252 /NimbusSanL-BoldCond CP1252Encoding psp_definefont
/NimbusSanL-ReguCondItal-cp1252 /NimbusSanL-ReguCondItal CP1252Encoding psp_definefont
/NimbusSanL-BoldCondItal-cp1252 /NimbusSanL-BoldCondItal CP1252Encoding psp_definefont
/NimbusRomNo9L-Regu-cp1252 /NimbusRomNo9L-Regu CP1252Encoding psp_definefont
/NimbusRomNo9L-Medi-cp1252 /NimbusRomNo9L-Medi CP1252Encoding psp_definefont
/NimbusRomNo9L-ReguItal-cp1252 /NimbusRomNo9L-ReguItal CP1252Encoding psp_definefont
/NimbusRomNo9L-MediItal-cp1252 /NimbusRomNo9L-MediItal CP1252Encoding psp_definefont
/NimbusMonL-Regu-cp1252 /NimbusMonL-Regu CP1252Encoding psp_definefont
/NimbusMonL-Bold-cp1252 /NimbusMonL-Bold CP1252Encoding psp_definefont
/NimbusMonL-ReguObli-cp1252 /NimbusMonL-ReguObli CP1252Encoding psp_definefont
/NimbusMonL-BoldObli-cp1252 /NimbusMonL-BoldObli CP1252Encoding psp_definefont
/URWPalladioL-Roma-cp1252 /URWPalladioL-Roma CP1252Encoding psp_definefont
/URWPalladioL-Bold-cp1252 /URWPalladioL-Bold CP1252Encoding psp_definefont
/URWPalladioL-Ital-cp1252 /URWPalladioL-Ital CP1252Encoding psp_definefont
/URWPalladioL-BoldItal-cp1252 /URWPalladioL-BoldItal CP1252Encoding psp_definefont
/URWAntiquaT-RegularCondensed-cp1252 /URWAntiquaT-RegularCondensed CP1252Encoding psp_definefont
/URWGroteskT-Bold-cp1252 /URWGroteskT-Bold CP1252Encoding psp_definefont
/URWChanceryL-MediItal-cp1252 /URWChanceryL-MediItal CP1252Encoding psp_definefont
/Times-Bold-cp1252 /Times-Bold CP1252Encoding psp_definefont
/Times-BoldItalic-cp1252 /Times-BoldItalic CP1252Encoding psp_definefont
/Times-Italic-cp1252 /Times-Italic CP1252Encoding psp_definefont
/Times-Roman-cp1252 /Times-Roman CP1252Encoding psp_definefont
/Helvetica-cp1252 /Helvetica CP1252Encoding psp_definefont
/Helvetica-Bold-cp1252 /Helvetica-Bold CP1252Encoding psp_definefont
/Helvetica-Oblique-cp1252 /Helvetica-Oblique CP1252Encoding psp_definefont
/Courier-cp1252 /Courier CP1252Encoding psp_definefont
/Courier-Bold-cp1252 /Courier-Bold CP1252Encoding psp_definefont
/Courier-BoldOblique-cp1252 /Courier-BoldOblique CP1252Encoding psp_definefont
/Courier-Oblique-cp1252 /Courier-Oblique CP1252Encoding psp_definefont
%------------------------------------------------------------------------------%
% Schriftart auswählen und Schriftgröße bestimmen
/Helvetica-cp1252 14 selectfont
%------------------------------------------------------------------------------%
newpath % neue Zeichnung beginnen
.3 setlinewidth % Linienbreite
%------------------------------------------------------------------------------%
90 130 moveto % zur Startposition der Ausgabe gehen
(Zeichensatz cp1252 mit Umlaute und mit Eurozeichen) show
90 110 moveto % zur Startposition der Ausgabe gehen
(Umlaute: Ää Öö Üü) show % Umlaute
90 90 moveto % zur Startposition der Ausgabe gehen
(Sonderzeichen: & ß € µ é è ¹ ² ³ ¼ ½) show % Sonderzeichen
%------------------------------------------------------------------------------%
closepath % diese Zeichnung beenden
stroke % alle aufgeführten Zeichenkomandos jetzt zeichnen
> cat ps-test_Windows.ps | iconv -f UTF-8 -t WINDOWS-1252 | magick -page a4 -colorspace RGB - ps-test_Windows.png
[user@rechner ~]$ cat Test_-_127dpi.ps | iconv -f UTF-8 -t WINDOWS-1252 | magick -gravity SouthWest -colorspace RGB -quality 100 -page 1050x1485 -density 127 - Test_in_127dpi.pdf [user@rechner ~]$ cat Test_-_254dpi.ps | iconv -f UTF-8 -t WINDOWS-1252 | magick -gravity SouthWest -colorspace RGB -quality 100 -page 2100x2970 -density 254 - Test_in_254dpi.pdf
Für dieses Beispiel habe ich mir ein Shell-Skript (Linux + FreeBSD) geschrieben, womit man ganz einfach aus dieser PS-Datei eine PDF- und eine PNG-Datei erzeugen kann.
[user@rechner ~]$ /usr/local/bin/PS2IMG.sh Test.ps
#!/bin/sh VERSION="v2025052200" # initial #------------------------------------------------------------------------------# ls "${1}" || exit 1 DATEI_NAME="$(echo "${1}" | grep -E '[.][Pp][Ss]$' | sed 's/[.][Pp][Ss]$//')" if [ x = "x${DATEI_NAME}" ] ; then echo "${0} [PS-Datei]" echo "${0} Test.ps" exit 1 fi #------------------------------------------------------------------------------# # A4 -> 210 x 297 mm -> 72 dpi (2,8346 mm je Pixel) -> 595,2756 x 841,8898 Pixel # A4 -> 210 x 297 mm -> 127 dpi (5,0000 mm je Pixel) -> 1050,0000 x 1485,0000 Pixel #------------------------------------------------------------------------------# seitengroesse() { SEITENGROESSE="$(echo "${AUFLOESUNG}" | awk '{printf "%.0fx%.0f\n", ($1*2100/254),($1*2970/254)}')" } ### suche nach soetwas wie: # 72 25.4 div massstab div dup scale # 127 25.4 div massstab div dup scale # 254 25.4 div massstab div dup scale # 381 25.4 div massstab div dup scale # 508 25.4 div massstab div dup scale AUFLOESUNG="$(grep -Ei '^[0-9][0-9]*[ \t]+.*[ \t]+scale' ${DATEI_NAME}.ps | grep -Fiv scalefont | head -n1 | awk '{print $1}')" if [ x = "x${AUFLOESUNG}" ] ; then ### wenn nichts gefunden wurde, dann suche nach soetwas wie: # /mm {2.834645669 mul} def # /mm {5 mul} def # /mm {10 mul} def # /mm {15 mul} def # /mm {20 mul} def AUFLOESUNG="$(grep -E '^[/]mm [{]10 mul[}] def' ${DATEI_NAME}.ps | awk -F'[{}]' '{print $2}' | awk '{print $1*254/10}')" if [ x = "x${AUFLOESUNG}" ] ; then AUFLOESUNG="72" seitengroesse else seitengroesse fi else seitengroesse fi #------------------------------------------------------------------------------# echo " # DATEI_NAME='${DATEI_NAME}.*' # AUFLOESUNG='${AUFLOESUNG} dpi' # SEITENGROESSE='${SEITENGROESSE} Pixel' " #------------------------------------------------------------------------------# # WARNING: The convert command is deprecated in IMv7, use "magick" instead of "convert" or "magick convert" for ENDUNG in pdf png do cat ${DATEI_NAME}.ps | iconv -f UTF-8 -t WINDOWS-1252 | magick -gravity SouthWest -colorspace RGB -quality 100 -page ${SEITENGROESSE} -density ${AUFLOESUNG} - ${DATEI_NAME}.${ENDUNG} done #------------------------------------------------------------------------------#
%!PS-Adobe 3.0
%%BeginProlog (OpenOffice.org 1.0.3)
/ISO1252Encoding [
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/space /exclam /quotedbl /numbersign /dollar /percent /ampersand /quotesingle
/parenleft /parenright /asterisk /plus /comma /hyphen /period /slash
/zero /one /two /three /four /five /six /seven
/eight /nine /colon /semicolon /less /equal /greater /question
/at /A /B /C /D /E /F /G
/H /I /J /K /L /M /N /O
/P /Q /R /S /T /U /V /W
/X /Y /Z /bracketleft /backslash /bracketright /asciicircum /underscore
/grave /a /b /c /d /e /f /g
/h /i /j /k /l /m /n /o
/p /q /r /s /t /u /v /w
/x /y /z /braceleft /bar /braceright /asciitilde /unused
/Euro /unused /quotesinglbase /florin /quotedblbase /ellipsis /dagger /daggerdbl
/circumflex /perthousand /Scaron /guilsinglleft /OE /unused /Zcaron /unused
/unused /quoteleft /quoteright /quotedblleft /quotedblright /bullet /endash /emdash
/tilde /trademark /scaron /guilsinglright /oe /unused /zcaron /Ydieresis
/space /exclamdown /cent /sterling /currency /yen /brokenbar /section
/dieresis /copyright /ordfeminine /guillemotleft /logicalnot /hyphen /registered /macron
/degree /plusminus /twosuperior /threesuperior /acute /mu /paragraph /periodcentered
/cedilla /onesuperior /ordmasculine /guillemotright /onequarter /onehalf /threequarters /questiondown
/Agrave /Aacute /Acircumflex /Atilde /Adieresis /Aring /AE /Ccedilla
/Egrave /Eacute /Ecircumflex /Edieresis /Igrave /Iacute /Icircumflex /Idieresis
/Eth /Ntilde /Ograve /Oacute /Ocircumflex /Otilde /Odieresis /multiply
/Oslash /Ugrave /Uacute /Ucircumflex /Udieresis /Yacute /Thorn /germandbls
/agrave /aacute /acircumflex /atilde /adieresis /aring /ae /ccedilla
/egrave /eacute /ecircumflex /edieresis /igrave /iacute /icircumflex /idieresis
/eth /ntilde /ograve /oacute /ocircumflex /otilde /odieresis /divide
/oslash /ugrave /uacute /ucircumflex /udieresis /yacute /thorn /ydieresis] def
/psp_definefont { exch dup findfont dup length dict begin { 1 index /FID ne
{ def } { pop pop } ifelse } forall /Encoding 3 -1 roll def
currentdict end exch pop definefont pop } def
/pathdict dup 8 dict def load begin
/rcmd { { currentfile 1 string readstring pop 0 get dup 32 gt { exit }
{ pop } ifelse } loop dup 126 eq { pop exit } if 65 sub dup 16#3 and 1
add exch dup 16#C and -2 bitshift 16#3 and 1 add exch 16#10 and 16#10
eq 3 1 roll exch } def
/rhex { dup 1 sub exch currentfile exch string readhexstring pop dup 0
get dup 16#80 and 16#80 eq dup 3 1 roll { 16#7f and } if 2 index 0 3
-1 roll put 3 1 roll 0 0 1 5 -1 roll { 2 index exch get add 256 mul }
for 256 div exch pop exch { neg } if } def
/xcmd { rcmd exch rhex exch rhex exch 5 -1 roll add exch 4 -1 roll add
1 index 1 index 5 -1 roll { moveto } { lineto } ifelse } def end
/readpath { 0 0 pathdict begin { xcmd } loop end pop pop } def
systemdict /languagelevel known not {
/xshow { exch dup length 0 1 3 -1 roll 1 sub { dup 3 index exch get
exch 2 index exch get 1 string dup 0 4 -1 roll put currentpoint 3 -1
roll show moveto 0 rmoveto } for pop pop } def
/rectangle { 4 -2 roll moveto 1 index 0 rlineto 0 exch rlineto neg 0
rlineto closepath } def
/rectfill { rectangle fill } def
/rectstroke { rectangle stroke } def } if
/psp_lzwfilter { currentfile /ASCII85Decode filter /LZWDecode filter } def
/psp_ascii85filter { currentfile /ASCII85Decode filter } def
/psp_lzwstring { psp_lzwfilter 1024 string readstring } def
/psp_ascii85string { psp_ascii85filter 1024 string readstring } def
/psp_imagedict {
/psp_bitspercomponent { 3 eq { 1 }{ 8 } ifelse } def
/psp_decodearray { [ [0 1 0 1 0 1] [0 255] [0 1] [0 255] ] exch get }
def 7 dict dup
/ImageType 1 put dup
/Width 7 -1 roll put dup
/Height 5 index put dup
/BitsPerComponent 4 index psp_bitspercomponent put dup
/Decode 5 -1 roll psp_decodearray put dup
/ImageMatrix [1 0 0 1 0 0] dup 5 8 -1 roll put put dup
/DataSource 4 -1 roll 1 eq { psp_lzwfilter } { psp_ascii85filter } ifelse put
} def
%%EndProlog (OpenOffice.org 1.0.3)
/URWGothicL-Book-iso1252 /URWGothicL-Book ISO1252Encoding psp_definefont
/URWGothicL-Demi-iso1252 /URWGothicL-Demi ISO1252Encoding psp_definefont
/URWGothicL-BookObli-iso1252 /URWGothicL-BookObli ISO1252Encoding psp_definefont
/URWGothicL-DemiObli-iso1252 /URWGothicL-DemiObli ISO1252Encoding psp_definefont
/URWBookmanL-Ligh-iso1252 /URWBookmanL-Ligh ISO1252Encoding psp_definefont
/URWBookmanL-DemiBold-iso1252 /URWBookmanL-DemiBold ISO1252Encoding psp_definefont
/URWBookmanL-LighItal-iso1252 /URWBookmanL-LighItal ISO1252Encoding psp_definefont
/URWBookmanL-DemiBoldItal-iso1252 /URWBookmanL-DemiBoldItal ISO1252Encoding psp_definefont
/CharterBT-Bold-iso1252 /CharterBT-Bold ISO1252Encoding psp_definefont
/CharterBT-BoldItalic-iso1252 /CharterBT-BoldItalic ISO1252Encoding psp_definefont
/CharterBT-Roman-iso1252 /CharterBT-Roman ISO1252Encoding psp_definefont
/CharterBT-Italic-iso1252 /CharterBT-Italic ISO1252Encoding psp_definefont
/CenturySchL-Roma-iso1252 /CenturySchL-Roma ISO1252Encoding psp_definefont
/CenturySchL-Bold-iso1252 /CenturySchL-Bold ISO1252Encoding psp_definefont
/CenturySchL-Ital-iso1252 /CenturySchL-Ital ISO1252Encoding psp_definefont
/CenturySchL-BoldItal-iso1252 /CenturySchL-BoldItal ISO1252Encoding psp_definefont
/NimbusSanL-Regu-iso1252 /NimbusSanL-Regu ISO1252Encoding psp_definefont
/NimbusSanL-Bold-iso1252 /NimbusSanL-Bold ISO1252Encoding psp_definefont
/NimbusSanL-ReguItal-iso1252 /NimbusSanL-ReguItal ISO1252Encoding psp_definefont
/NimbusSanL-BoldItal-iso1252 /NimbusSanL-BoldItal ISO1252Encoding psp_definefont
/NimbusSanL-ReguCond-iso1252 /NimbusSanL-ReguCond ISO1252Encoding psp_definefont
/NimbusSanL-BoldCond-iso1252 /NimbusSanL-BoldCond ISO1252Encoding psp_definefont
/NimbusSanL-ReguCondItal-iso1252 /NimbusSanL-ReguCondItal ISO1252Encoding psp_definefont
/NimbusSanL-BoldCondItal-iso1252 /NimbusSanL-BoldCondItal ISO1252Encoding psp_definefont
/NimbusRomNo9L-Regu-iso1252 /NimbusRomNo9L-Regu ISO1252Encoding psp_definefont
/NimbusRomNo9L-Medi-iso1252 /NimbusRomNo9L-Medi ISO1252Encoding psp_definefont
/NimbusRomNo9L-ReguItal-iso1252 /NimbusRomNo9L-ReguItal ISO1252Encoding psp_definefont
/NimbusRomNo9L-MediItal-iso1252 /NimbusRomNo9L-MediItal ISO1252Encoding psp_definefont
/NimbusMonL-Regu-iso1252 /NimbusMonL-Regu ISO1252Encoding psp_definefont
/NimbusMonL-Bold-iso1252 /NimbusMonL-Bold ISO1252Encoding psp_definefont
/NimbusMonL-ReguObli-iso1252 /NimbusMonL-ReguObli ISO1252Encoding psp_definefont
/NimbusMonL-BoldObli-iso1252 /NimbusMonL-BoldObli ISO1252Encoding psp_definefont
/URWPalladioL-Roma-iso1252 /URWPalladioL-Roma ISO1252Encoding psp_definefont
/URWPalladioL-Bold-iso1252 /URWPalladioL-Bold ISO1252Encoding psp_definefont
/URWPalladioL-Ital-iso1252 /URWPalladioL-Ital ISO1252Encoding psp_definefont
/URWPalladioL-BoldItal-iso1252 /URWPalladioL-BoldItal ISO1252Encoding psp_definefont
/URWAntiquaT-RegularCondensed-iso1252 /URWAntiquaT-RegularCondensed ISO1252Encoding psp_definefont
/URWGroteskT-Bold-iso1252 /URWGroteskT-Bold ISO1252Encoding psp_definefont
/URWChanceryL-MediItal-iso1252 /URWChanceryL-MediItal ISO1252Encoding psp_definefont
/Times-Bold-iso1252 /Times-Bold ISO1252Encoding psp_definefont
/Times-BoldItalic-iso1252 /Times-BoldItalic ISO1252Encoding psp_definefont
/Times-Italic-iso1252 /Times-Italic ISO1252Encoding psp_definefont
/Times-Roman-iso1252 /Times-Roman ISO1252Encoding psp_definefont
/Helvetica-iso1252 /Helvetica ISO1252Encoding psp_definefont
/Helvetica-Bold-iso1252 /Helvetica-Bold ISO1252Encoding psp_definefont
/Helvetica-Oblique-iso1252 /Helvetica-Oblique ISO1252Encoding psp_definefont
/Courier-iso1252 /Courier ISO1252Encoding psp_definefont
/Courier-Bold-iso1252 /Courier-Bold ISO1252Encoding psp_definefont
/Courier-BoldOblique-iso1252 /Courier-BoldOblique ISO1252Encoding psp_definefont
/Courier-Oblique-iso1252 /Courier-Oblique ISO1252Encoding psp_definefont
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% Maßstab der Zeichnung
/massstab {1} def % 1:1 - hierbei entspricht "1 Pixel" genau "1 mm"
%/massstab {2} def % 1:2 - hierbei entsprechen "2 Pixel" genau "1 mm"
%/massstab {3} def % 1:3 - hierbei entsprechen "3 Pixel" genau "1 mm"
/mm {massstab mul} def
% damit alles automatisch im richtien Maßstab angezeigt wird
%72 25.4 div massstab div dup scale % 72 DPI (allgemeiner Standard)
127 25.4 div massstab div dup scale % 127 DPI
%254 25.4 div massstab div dup scale % 254 DPI
%381 25.4 div massstab div dup scale % 381 DPI
%508 25.4 div massstab div dup scale % 508 DPI
/Helvetica-iso1252 findfont % Schriftart in voller Größe
%/Times-Roman-iso1252 findfont % Schriftart etwas kleiner mit Serifen
%/Courier-iso1252 findfont % Schriftart mit fester Breite
%/Courier-Oblique-iso1252 findfont % Schriftart mit fester Breite in Kursiv
5 mm scalefont setfont % Schriftgröße in Millimeter, damit sie nie skaliert und immer lesbar ist
0 setgray % Farbe (0=schwarz / 0.5=grau / 1=weiss)
%0 setlinejoin % die Spitze eines Winkels wird spitz gezeichnet
%1 setlinejoin % die Spitze eines Winkels wird abgerundet gezeichnet
%2 setlinejoin % die Spitze eines Winkels wird abgeflacht gezeichnet
/p-rand-links {10 mm} def
/n-rand-links {p-rand-links neg} def
/p-rand-unten {13 mm} def
/n-rand-unten {p-rand-unten neg} def
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%==============================================================================%
newpath % neue Zeichnung beginnen
.3 setlinewidth % Linienbreite
%------------------------------------------------------------------------------%
%%% Umrandung
p-rand-links p-rand-unten moveto % Rahmen in Millimeter
p-rand-links 284 mm lineto % Rahmen in Millimeter
200 mm 284 mm lineto % Rahmen in Millimeter
200 mm p-rand-unten lineto % Rahmen in Millimeter
p-rand-links p-rand-unten lineto % Rahmen in Millimeter
%------------------------------------------------------------------------------%
%%% Legende
p-rand-links 2 mm add p-rand-unten 2 mm add moveto % zur Startposition der Ausgabe gehen / in Millimeter auf dem Blatt, unabhängig von der Skalierung
(Maßstab: 1:) show
massstab 2 string cvs show % "2 string" bedutet, dass in "i" ein String mit 2 Zeichen steckt (das kann auch größer angegeben werden)
%------------------------------------------------------------------------------%
%%% Umlaute & Sonderzeichen
105 mm p-rand-unten 7 mm add moveto % zur Startposition der Ausgabe gehen / in Millimeter auf dem Blatt, unabhängig von der Skalierung
(Umlaute: Ää Öö Üü) show % Umlaute
105 mm p-rand-unten 2 mm add moveto % zur Startposition der Ausgabe gehen / in Millimeter auf dem Blatt, unabhängig von der Skalierung
(Sonderzeichen: & ß € µ é è ¹ ² ³ ¼ ½) show % Sonderzeichen
%------------------------------------------------------------------------------%
closepath % diese Zeichnung beenden
stroke % alle aufgeführten Zeichenkomandos jetzt zeichnen
%==============================================================================%
newpath % neue Zeichnung beginnen
% Kreis zeichnen - mit Millimeterangeben, dann skaliert die Größe NICHT mit dem Maßstab
150 mm 210 mm moveto % zur 3-Uhr-Position vom Kreis gehen
100 mm 210 mm 50 mm 0 360 arc % einen Vollkreis, links rum zeichnen
% 3-Uhr-Position des Kreises: 150 mm von links und 210 mm von unten
% Mittelpunkt des Kreises: 100 mm von links und 210 mm von unten
% Radius vom Kreis: 50 mm
% Startposition, um den Kreis zu zeichnen: 0°
% Kreisbogen, der gezeichnet werden soll: 360° (links rum)
closepath % diese Zeichnung beenden
%------------------------------------------------------------------------------%
%%% Füllen - Anfang
gsave % Grafic-Save (sichern)
0.5 setgray % Füllfarbe festlegen
fill % geschlossenes Objekt, in dieser Zeichnung, ausfüllen
grestore % Grafic-Restore (zurückholen)
%4 setlinewidth
%0.75 setgray
%%% Füllen - Ende
%------------------------------------------------------------------------------%
stroke % alle aufgeführten Zeichenkomandos jetzt ausführen
%==============================================================================%
newpath % neue Zeichnung beginnen
.2 setlinewidth % Linienbreite
% Viereck zeichnen - ohne Millimeterangeben, dann skaliert die Größe mit dem Maßstab
100 100 moveto % gehe zum Startpunkt
0 50 rlineto % zeichne eine Linie nach oben
50 0 rlineto % zeichne eine Linie nach rechts
0 -50 rlineto % zeichne eine Linie nach unten
-50 0 rlineto % zeichne eine Linie nach links
closepath % diese Zeichnung beenden
%------------------------------------------------------------------------------%
%%% Füllen - Anfang
% Viereck ausfüllen
gsave % Grafic-Save (sichern)
0.75 setgray % Füllfarbe festlegen
fill % geschlossenes Objekt, in dieser Zeichnung, ausfüllen
grestore % Grafic-Restore (zurückholen)
%%% Füllen - Ende
%------------------------------------------------------------------------------%
stroke % alle aufgeführten Zeichenkomandos jetzt ausführen
%==============================================================================%
newpath % neue Zeichnung beginnen
.1 setlinewidth % Linienbreite
% 3 ineinander liegende Kreise zeichnen - ohne Millimeterangeben, dann skaliert die Größe mit dem Maßstab
% 1. Kreis - größter, ganz außen
125 100 moveto % zur 3-Uhr-Position vom Kreis gehen
100 100 25 0 360 arc % einen Vollkreis, links rum zeichnen
% 2. Kreis - mittlerer, in der Mitte
124.5 100 moveto % zur 3-Uhr-Position vom Kreis gehen
100 100 24.5 0 360 arc % einen Vollkreis, links rum zeichnen
% 3. Kreis - kleinster, innen
124 100 moveto % zur 3-Uhr-Position vom Kreis gehen
100 100 24 0 360 arc % einen Vollkreis, links rum zeichnen
closepath % diese Zeichnung beenden
%------------------------------------------------------------------------------%
%------------------------------------------------------------------------------%
stroke % alle aufgeführten Zeichenkomandos jetzt ausführen
%==============================================================================%
showpage % Ausgabe der fertigen Seite