Sprache inspiriert von Pascal, aber viel einfacher • Zielgruppe: vergleichbar PostScript • Seitenbeschreibungssprache für Offset-Druck • Faltschachteln für Kosmetik- und Pharmaindustrie • unterschiedliche Schwerpunkte - Kosmetik: Farbtreue - Pharma: Texttreue
• "unwürdig" • viel Mausgeschubse, trotz … - Templates, Vorlagen • … oder wegen … - cut&paste - "Wiederverwendung" • fehleranfälliges "Gefummele" • Dezember Kalendarium war einfach nur "Müll" • der "Nachbau" mit PostScript war dann wieder richtig Oder: es lebe ein gutes Skripting!
auf PostScript • COS — "Carousel" Object Structure - COS baut auf PostScript-Datenstrukturen auf - Objekte werden absolut platziert • PostScript ist tot - öffnet JavaScript neue Hintertüren? ... JavaScript in Adobe Acrobat software implements objects, methods, and properties that enable you to manipulate PDF files, produce database-driven PDF files, modify the appearance of PDF files, and much more. … — Adobe, JavaScript for Acrobat
Fotosatz-Anlagen • proprietär, ca. 400.000 US-$ pro Stück • 1973 — Xerox 1200, Seitendrucker, entwickelt aus der Kopierertechnik • 1976 — IBM 3800, der erste Laserdrucker für Endlospapier • propieträre Seitenbeschreibungssprachen • Dezember 1982, John Warnock und Charles M. Geschke gründen Adobe • und entwickeln PostScript als Werkzeug zum Ansteuern von Druckern - baut auf InterPress auf - einfachere Struktur - Markteinführung 1984
PostScript für den Apple LaserWriter • Markteinführung 1985 für 6.995 US-$ Xerox Drucker kostet zu dieser Zeit ca. 1/2 Mio US-$ • LaserWriter kann ganzseitige Photos drucken, • andere Laserdrucker erlauben Grafik nur in einem begrenzten Bereich Linotype • 1985 Linotronic 300 mit PostScript Unterstützung • 1987 PostScript Schriften 1991 PostScript Level 2 • Verarbeitung von JPEG Bildern • Farbtrennung direkt im RIP (Raster Image Processor) 1997 PostScript Level 3
happen. PostScript is a programming language, not really a page description language. By its very nature, it does not provide for really reliable end-to-end workflows since by definition, content can change on the fly. … Beginning with PDF 1.4, all additions to the Adobe imaging model went into PDF and not PostScript …" — Dov Isaacs (Adobe), 2006, gefragt zu PostScript4
Features ohne Entsprechung in PostScript - Transparenz - ICC Farbprofile - Ebenen - OpenType • APPE auf ( Adobe Print Engine) verwendet PDF statt PostScript • 2005 - Adobe rät zu OpenType Schriften statt PostScript Type 1 • Abkehr von CPSI (Common PostScript Interpreter) PostScript heute • trotz aller Nachteile - immer noch im Gebrauch - es gibt zu viele Bilddaten in Encapsulated PostScript (EPS)
Lösung für einen Informtiker • … das muß besser gehen … textbasiert • Versionsverwaltung • einfache Bearbeitung • Skript oder Programm gibt volle Kontrolle über Layout • Bilder platzieren, skalieren, beschneiden, … • Kalenderberechnung
https://pdfbox.apache.org/ - iText — https://github.com/itext/itext7 • C++ — teilweise auch JavaScript u.a. - Haru — http://libharu.org/ - Hummus PDF — https://pdfhummus.com/ - JagPDF — http://www.jagpdf.org/index.htm - VulcanWare PDF — http://www.vulcanware.com/cpp_pdf/index.html - wxPdfDocument — http://wxcode.sourceforge.net/docs/wxpdfdoc/index.html • HTML - wkhtmltopdf — https://wkhtmltopdf.org/ Das habe ich aber erst hinterher gefunden
Position • Ausschnitt • Größe Kalender berechnen • bekanntes Problem • bekannte Lösungen • regionale Unterschiede - Code ist vorbereitet - zuerst nur Baden-Württemberg - für diesen Vortrag erweitert auf alle Bundesländer
def % left margin /lh 48 def % line height /nl { currentpoint lh sub exch pop lm exch moveto } def nl Operator - Operanden auf dem Stack stack operator leer currentpoint x y lh x y 48 sub x (y-48) exch (y-48) x pop (y-48) lm (y-48) 60 exch 60 (y-48) moveto
Reference Manual - standard mathematical practice - origin is located at the lower-left corner - positive x axis extending horizontally to the right - positive y axis extending vertically upward - length of a unit along x and y axes is 1/72 inch - default user space: all points have positive x and y values
der 1. Januar - an welchem Tag ist Ostern - trivial: Schaltjahr • Gauss - Wochentag des 1. Januar - Osterdatum • Feiertage ableiten von Ostern und Weihnachten • Umrechnungen - n-ter Tag im Jahr zu Datum - Datum zu Tagesnummer oder Wochentag
number of January, 1st, of a year % Gauss' formula, as found in wikipedia % w = (1 + 5 * ((year-1) mod 4) + % 4 * ((year-1) mod 100) + % 6 * ((year-1) mod 400) % ) mod 7 % year --> weekday (0..6 = So..Sa) /firstDay { dup % year year 1 sub 4 mod 5 mul % year 1st exch dup % 1st year year 1 sub 100 mod 4 mul % 1st year 2nd exch dup % 1st 2nd year year 1 sub 400 mod 6 mul % 1st 2nd year 3rd exch pop add add 1 add 7 mod } def
X div 100 2. säkulare Mondschaltung M(K) = 15 + (3K + 3) div 4 - (8K + 13) div 25 3. säkulare Sonnenschaltung S(K) = 2 - (3K + 3) div 4 4. Mondparameter A(X) = X mod 19 5. Keim für den ersten Vollmond im Frühling D(A,M) = (19A + M) mod 30 6. kalendarische Korrekturgröße R(D,A) = (D + A div 11) div 29 7. Ostergrenze OG(D,R) = 21 + D - R 8. ersten Sonntag im März SZ(X,S) = 7 - (X + X div 4 + S) mod 7 9. Entfernung des Ostersonntags von der Ostergrenze (Osterentfernung in Tagen) OE(OG,SZ) = 7 - (OG - SZ) mod 7 10. Datum des Ostersonntags als Märzdatum (32. März = 1. April usw.) OS = OG + OE
% year --> daynumber /easterDay { /X exch def % step 1 % (**** step 1 ****) showstack pop X 100 idiv /K exch def % step 2 % (**** step 2 ****) showstack pop 15 K 1 add 3 mul 4 idiv add K 8 mul 13 add 25 idiv sub /M exch def % step 3 % (**** step 3 ****) showstack pop 2 K 1 add 3 mul 4 idiv sub /S exch def % step 4 % (**** step 4 ****) showstack pop X 19 mod /A exch def % ... usw. ... % return the absolute day number / OS = relative to March X 3 1 dayOfYear 1 sub % get the zeroth of March OS add } def
easter % year --> daynumber /easterDay { /X exch def X 100 idiv /K exch def 15 K 1 add 3 mul 4 idiv add K 8 mul 13 add 25 idiv sub /M exch def 2 K 1 add 3 mul 4 idiv sub /S exch def X 19 mod /A exch def A 19 mul M add 30 mod /D exch def D A 11 idiv add 29 idiv /R exch def 21 D add R sub /OG exch def 7 X X 4 idiv add S add 7 mod sub /SZ exch def 7 OG SZ sub 7 mod sub /OE exch def OG OE add /OS exch def X 3 1 dayOfYear 1 sub % get the zeroth of March OS add } def
Operator implementiert - bildet #include nach - vermeidet mehrfache includes • Unit-Tests analog xUnit - gut für Funktionen, die einen Ergebniswert liefern - noch keine Lösung für rein grafische Operatoren - Sichtkontrolle ist immer noch wichtig
nicht korrekt • Metadaten der Bilder auswerten - Aufnahmedatum • Feiertagsberechnung - Kalender wird für ein bestimmtes Bundesland berechnet - mehr Text-Information nur sinnvoll mit richtiger Schriftberechnung - parametrisiert für Deutschland und deutsche Bundesländer • Erweiterung für andere Länder? - grundsätzlich möglich, da tabellengesteuert - Sprachanpassung? • Kalender interaktiv zusammenstellen? - Desktop - Web-Anwendung
aber trotzdem langsam … - Karlsruhe ab 6:49 - Frankfurt an: 7:52 - Frankfurt ab: 18:05 - Karlsruhe an 19:07 • "Umschaltzeiten" • Dokumentation zu PostScript etc. • WLAN verfügbar? • alle nötigen Dokumente auf dem Rechner? • … • noch oder schon müde?
Kalendarium stimmt • erster Fehlschlag erfolgreich neu implementiert Extrem wichtig • Versionsverwaltung • ZFS Snapshots machen aber nicht soviel Spaß, wenn die Platte ziemlich voll ist
Seite: https://www.typografie.info/3/topic/18030-purup-film-%E2%80%9Egeschichte-der-schrift%E2%80%9C- offline/ (Purup Electronics war ein Hersteller von Fotosatz-Anlagen, gehört jetzt zu Barco; der Purup-Film soll besser gewesen sein als das Video auf dieser Seite, ist aber nicht mehr frei verfügbar) Ein paar Begriffe sind auch hier erklärt: https://typetr.typenetwork.com/news/article/original-proforma-brochure-for-purup-electronics
das Buch Mathematicl Illustrations - A manual of geometry and PostScript; die einzelnen Kapitel sind als PDF-Dokumente abrufbar: http://www.math.ubc.ca/~cass/graphics/manual/ http://rgbcmyk.com.ar/en/history-of-postscript/ http://rgbcmyk.com.ar/en/history-of-pdf/ http://what-when-how.com/itext-5/understanding-the-carousel-object-system-itext-5/ http://hacking-printers.net/wiki/index.php/PostScript http://paulbourke.net/dataformats/postscript http://pages.cs.wisc.edu/~rjl/landscape/