Seite 1 von 2
Scribus-Dokument mit PHP manipulieren
Verfasst: Do 26. Mär 2015, 22:24
von Julius
Moin!
ich habe mir ein kleines
PHP-Script geschrieben, das eine Scribus-Datei (im Beispiel
template.sla) einliest und bestimmte Platzhalter (z.B. wird
;:bp: durch
Joachim Gauck ersetzt) im Dokument durch Werte ersetzt, die im Beispiel direkt im Programm stehen, aber auch aus einer Datenbank oder von einer Eingabe in ein HTML-Formular stammen könnten.
Der Code:
Code: Alles auswählen
<?php
// Array mit den Platzhaltern und den einzusetzenden Werten (Syntax beachten!):
$replace = array(
"j" => "2015",
"bk" => "Angela Merkel",
"bp" => "Joachim Gauck",
"am" => "Frank-Walter Steinmeier",
"t" => date("d.m.Y H:i"),
"zt" => "\neine neue Zeile\n\teine neue Zeile + Tabulator",
"sz" => "€&\"\\äÜß?");
/* HTTP-Header für Ausgabe als reinen Text */
//header("Content-type: text/plain; charset=utf-8");
/* HTTP-Header für Ausgabe als HTML */
//header("Content-type: text/html; charset=utf-8");
/* (zwei) HTTP-Header für das Anbieten zum Download als sla-Datei */
header("Content-type: application/vnd.scribus");
header("Content-Disposition: attachment; filename=template_".time().".sla");
/* Einlesen der Scribus-Datei */
$datei = fopen("template.sla","r");
/* Einlesen der HTML-Datei */
//$datei = fopen("template.html","r");
while(!feof($datei))
{
$dateiinhalt .= fgets($datei);
}
fclose($datei);
foreach($replace as $key => $value)
{
$plh = ";:".$key.":";
$rex = htmlspecialchars($value);
$dateiinhalt = str_replace($plh, $rex, $dateiinhalt);
}
echo $dateiinhalt;
die();
?>
Aus einem Scribus-Dokument wie:
Wird nach dem Ersetzten durch das Script (Datei wird zum Download angeboten):
Das Script könnte sehr praktisch sein, wenn es viele Datenblätter mit gleichem Layout aus einer Datenquelle heraus zu erstellen gilt.
Im Anhang befindet sich eine ZIP-Datei mit allen relevanten Dateien; zum Testen des Exporters die Dateien
a2s.php und
template.sla im gleichen Verzeichnis auf einem Webserver mit PHP-Interpreter speichern und
a2s.php aufrufen.
Ein paar Anmerkungen noch:
- auch das Einfügen von Bildern ist möglich, dafür müsste in der template.sla aus <PAGEOBJECT […] PFILE="beispielbild.jpg" […]> ein <PAGEOBJECT […] PFILE=";:i1:" […]> werden (->Text-Editor, z.B. Notepad++) und dann in das Ersetzungs-Array "i1" => "gewünschtes_Bild.jpg" zusätzlich eingetragen werden (Pfade zum Bild sind relativ, können aber auch absolut sein; das Bild wird nicht eingebettet!)
- man kann auch andere Text-basierte Formate (LaTeX, TeX, reiner Text, XML) bearbeiten, ein HTML-Beispiel liefere ich mit
- auf eine „Live-Demo“ verzichte ich, da gibt es nichts Spektakuläres zu sehen
- Stile können auch angewendet sein, da nur der Text ersetzt wird (wichtig: den kompletten Platzhalter mit einem Stil formatieren, sonst funktioniert das Ersetzen nicht)
- natürlich könnte man das auch mit einem Scribus-Plugin lösen, aber da ich 1.) eine serverseitige Lösung brauchte, die 2.) nicht auf Scribus beschränkt ist und 3.) ich (noch?) kein Python kann , habe ich PHP benutzt...
Fallstricke:
- NULL-Werte im sla-Dokument -> Scribus bricht das Parsen ab (NULL-Wert signalisiert Ende der Datei)
- unsichtbare Steuerzeichen in der sla-Datei verhindern Ersetzen -> sla-Datei in Text-Editor laden und betreffenden PLatzhalter noch einmal ohne Scribus eintippen und speichern
Viel Spaß damit!
Julius
______________________________
Dieses Werk bzw. dieser Inhalt ist als gemeinfrei lizenziert.
(damit der weiteren Verwendung keinerlei Probleme im Weg stehen
)
edit: Ich habe diesen Post bei den Tutorien reingestellt (ok?), weil es meiner Meinung nach kein Scribus-Script im engeren Sinne ist...
Re: Scribus-Dokument mit PHP manipulieren
Verfasst: Fr 27. Mär 2015, 11:05
von a.l.e
clever gemacht!
dazu: wenn du schon vernünftig gut php kannst, es braucht nicht viel, das minimum am python zu lernen, um scripts für scribus zu schreiben...
es ist nicht viel mehr wie ein paar if, for und string manipulation: alles sehr gut im netzt dokumentiert!
grössteils geht es nur darum, die scribus API aufzurufen...
die scripts im scribus wiki können da hilfreich sein!
danke fürs den beitrag
Re: Scribus-Dokument mit PHP manipulieren
Verfasst: Fr 27. Mär 2015, 11:21
von Arran
Vielen Dank Julius für Deine Einsicht in eine Programmierung.
Nut etwas verschweigst Du mir: Wann ich das unter welchen Umständen anwenden sollte. Was könnte ich damit erstellen?
Re: Scribus-Dokument mit PHP manipulieren
Verfasst: Fr 27. Mär 2015, 13:00
von Julius
Moin!
@a.l.e.: Ja, Python steht auch noch auf meiner Wunschliste der zu lernenden und beherrschenden Sprachen...
Welches Scribus-Plugin ist deiner Meinung nach am besten für einen Einstieg geeignet (Python-Kenntnisse vorausgesetzt)?
Ich habe in dem Script halt PHP benutzt, weil das Programm schnell fertig werden musste und das Ganze sowieso auf einem Webserver mit aktivierten PHP laufen soll.
@arran:
Ja, das Beispiel mit dem Einfügen von Amtsträgern in Deutschland ist wahrscheinlich etwas zu simpel, um den enormen Vorteil zu erkennen...
Ein besseres Beispiel als das obige:
Stell dir vor, du stellst irgendwein technisches Produkt mit vielen Varianten (sagen wir mal 30) her, für das du Bedienungsanleitungen und Datenblätter in Scribus erstellen möchtest. Man könnte jetzt hingehen, für beides eine Vorlage in Scribus erstellen und in diese dann jeweils per Hand mit den benötigten Daten füllen.
Soweit alles kein Problem. Die Probleme beginnen erst, wenn du die Vorlage ändern möchtest (kann häufiger und schneller passieren, als man denkt
), weil du alles von vorne per Hand in die Vorlagen schreiben musst.
Die Lösung: In den Vorlagen stehen nur Platzhalter, die das Script durch Werte ersetzt, die es aus einer Datenbank holt (diese Funktion hat mein Beispiel-Script nicht).
So ein System aufzusetzen, ist erst mal ein ziemlicher Aufwand, aber man wird damit belohnt, dass das Aktualisieren von Daten oder der Vorlage und das Erzeugen der einzelnen Dokumente im Idealfall nur ein paar Minuten dauert...
julius
Re: Scribus-Dokument mit PHP manipulieren
Verfasst: Fr 27. Mär 2015, 15:19
von Arran
OK, vielen Dank.
Jetzt habe ich begriffen, warum ich nichts begriffen habe. Aber auch, dass das für mich sicher nie wichtig sein wird. Ich schaffe eher kleinere Projekte, die ganz sicher nie auf eine Datenbank zugreifen müssen. Diese sind bei mir schon seit den guten alten Borland DBase-Zeiten auf totales Unverständnis gestossen. ich bin ja schliesslich gar nie über «Basic» auf einem Texas 4A herausgekommen.
Re: Scribus-Dokument mit PHP manipulieren
Verfasst: Sa 24. Okt 2015, 01:02
von Julius
Moin!
ich habe den Exporter als Python-Skript neu geschrieben. Diese Version liest Daten aus einer CSV-Datei.
Anwendung: Angehängte ZIP-Datei entpacken, Scribus öffnen, über das „Script“-Menü das Script replace.py ausführen, die drei folgenden Dialogen bei den Voreinstellung belassen und abnicken.
Das Ergebnis ist ein neues Dokument, das aus der Vorlage DokumentMitPlatzhaltern.sla und der Datei mit den Inhalten test.csv erzeugt wurde.
Mit Hife dieses Skripts lassen sich beispielsweise mehrsprachige Dokumente (die verschiedenen Sprachversionen kommen in verschiedene .csv-Dateien) erzeugen, die alle auf dem gleichen Layout (die Scribus-Datei) beruhen – es wäre viel zu viel Arbeit, das von Hand zu erledigen (besonders, wenn es später neue Übersetzungen oder neue Designs zu integrieren gilt).
Dieses Skript möchte ich noch um eine vernünftige Benutzeroberfläche erweitern sowie um die Funktion, HTML-Formatierungen in Scribus zu importieren, PDF-Batch-Export und dann noch eine Anbindung an ein Content Managment System, bzw. die Möglichkeit HTML-Dateien vom Server zu holen.
Viel Spaß damit!
Julius
Re: Scribus-Dokument mit PHP manipulieren
Verfasst: Sa 24. Okt 2015, 13:32
von Arran
Julius
Ich finde das sehr gut, was Du da entwickelst. Da ist sicher viel Wissen und können dahinter.
Trotzdem erlaube ich mir die Frage, was Scribus eigentlich will und für welche Anwendungszwecke es gedacht ist.
Meiner Ansicht nach soll Scribus auf die eine oder andere Weise den uralten Bleisatz elektronisch ersetzen. Das Bleisatz- (und später Fotosatz-) Produkt wurde immer gedruckt, sei es auf Papier, Karton, Glas, Eier und viele andere Medien. Aber nie in dynamische Drucksachen. Wenn wir uns das vor Augen halten und überlegen, was denn nun heute im digitalen Zeitalter die Aufgaben für Scribus sind sehe ich das etwa wie folgt:
· Gestaltung von Akzidenzen und Periodikas inkl. Ablieferung von einsatzfähigen Druckvorlagen (ausgeschossen, farbsepariert, etc.). Heimdrucker, Druckerei, Siebdruck, Lithografie, etc.
· Produktion von Präsentationen.
· Produktion von einfachen dynamischen Online-Vorlagen.
Die Anforderungen an ein perfektes Desktop-Publishing-Programm hat Scribus schon noch nicht ganz erfüllt, es bestehen noch einige Margen.
Was aber von meiner Seite her ganz und gar nicht in den Scribus-Bereich passt, ist die Vergewaltigung von Scribus als Pseudo-HTML und einer totalen dynamischen Webanwendung. Dafür sind die Mittel von HTML und CSS viel geeigneter. Wenn die noch bestehenden Kinderkrankheiten, ich denke da zB an das hier schon intensiv behandelte Problem der Fussnoten, ausgemerzt sind, ja dann, vielleicht, sollte man sich mal überlegen, ob eine Ausweitung der Möglichkeiten von Scribus Sinn macht.
Auch dazu gibt es alledings Beispiele, wie eine gute Idee in Grössenwahn ausarten kann. Alle Office-Suiten sind ja ein klassisches Beispiel dafür: wenn ich nur Writer und Calc benötige, alles andere für mich nur Ballast ist, muss ich für die deutschprachige Grundausstattung mit der Offline-Hilfe etwa 240 MB herunterladen, was dann, entpackt und installiert auf dem Rechner in etwa 300 MB beansprucht. Und wenn ich nun nicht mal mehr den Writer benötige, da ich ja alles was ich im Writer machen kann, ebensogut in Scribus erledigen kann, dann ist der Overkill noch viel grösser. andere Beispiele sind Musikabspieler. Wenn ich ganz einfach etwas Internet-Radio im Hintergrund hören möchte, ist doch die Leistungsfähigkeit und dadurch der Zwang ein Programm wie Amarok oder SMplayer total kennen zu lernen viel zu aufwändig.
Re: Scribus-Dokument mit PHP manipulieren
Verfasst: Sa 24. Okt 2015, 13:36
von Arran
Julius hat geschrieben:
Mit Hife dieses Skripts lassen sich beispielsweise mehrsprachige Dokumente (die verschiedenen Sprachversionen kommen in verschiedene .csv-Dateien) erzeugen, die alle auf dem gleichen Layout (die Scribus-Datei) beruhen ...
Meiner Ansicht nach wird das nicht ganz so einfach machbar sein, da die Grössendifferenzen in diversen Sprachen doch ziemlich gross sein können. Deutsch und Englisch sind meistens etwa 10% kleiner als Französisch oder Italienisch. Spanisch liegt da irgendwo in der Mitte. Ergo musst Du das Layout ja gleich wieder von Hand anpassen.
Re: Scribus-Dokument mit PHP manipulieren
Verfasst: Sa 24. Okt 2015, 16:43
von a.l.e
also, es gibt schon schöne dinger, die man damit machen kann!
du kannst zum beispiel in ein wordpress eine zeitung kollaborativ vorbereiten, jeder artikel in eine strukturierte datei speichern lassen.
dann in scribus verschieden sätze von gruppierte rahem mit platzhalter im scrapbook stellen und jeden satz dann per script ausfüllen lassen.
dann wird's gelayoutet.
es gibt aber auch leute die damit rechnungen zusammenstellen möchten. keine typische scribus-arbeit, es gibt aber leute die das machen!
oder ein katalog füllen.
einige haben schon probiert, scribus mit eine webapplikation zu verknüpfen und kunden photo bücher damit erstellen lassen.
du hast vorgegebene layouts im web zum ausfüllen, dann wird das ganze als bilder + text dateien gespeichert und scribus wird dafür gebraucht eine gute PDF-datei zu erzeugen.
Re: Scribus-Dokument mit PHP manipulieren
Verfasst: So 25. Okt 2015, 01:42
von Julius
Danke, a.l.e., ich hätte den Anwendungszweck nicht besser beschreiben können :-)
Alle anderen „großen“ DTP-Programm QuarkXpress und InDesign haben Anbindungen an Redaktionssysteme oder Datenbanken. Ich finde, dass ist definitv ein Manko von Scribus – ich konnte bisher keine funktionierende, halbwegs flexible Lösung dafür finden.
Außerdem würde es ja auch die Scripter-API voranbringen, wenn bei so einer Entwicklung festgestellt wird, welche Funktionen noch benötigt werden (Kann man ein bestimmtes Skript eigentlich mit einem Tastenkürzel aufrufen?).
@Arran: Wieso wird Scribus automatisch zu Bloatware, sobald es ein Script gibt, dass Scribus automatisiert? Dieses Script muss ja nicht mit Scribus ausgeliefert werden.
Ich finde, dass Scribus ein gutes DTP-Programm ist – warum sollte ich es also nicht automatisieren, um automatisiert gute Ergebnisse zu erzeugen?
– Und nein, ich will aus Scribus heraus kein HTML erzeugen (wenn ich deinen Ausdruck „Scribus als Pseudo-HTML und einer totalen dynamischen Webanwendung“ richtig interpretiert habe), wie das InDesign (meine ich mal gelesen zu haben) tut. Ich will lediglich eine Untermenge von HTML als Zwischenformat benutzen, ich könnte auch Markdown, BBCode oder irgendetwas nutzen.
Deinen Bedenken, dass es beim Einsatz anderer Sprachversionen zu Platzproblemen kommen könnte, kann ich zustimmen – wenn das mit Scribus erstellte Layout nicht allzu auf Kante genäht ist, sollte es da nicht viel nachzuarbeiten geben – zumindest einmal drüber schauen sollte man so oder so, was immer noch zeitsparender ist als alles per Hand in die Dateien zu kopieren.
Stell dir vor, du hast eine Produkt, von dem es etwa 20 Varianten gibt, und ein Handbuch (in Scribus erstellt), Datenblatt (ebenfalls in Scribus erstellt) und Webseite (HTML) pro Variante.
Wenn du die Vorlagen einmal erstellt hast, in die dann von Hand die Daten hinein kopierst, ist das machbar, aber ziemlich aufwändig und fehleranfällig. Wenn sich nun der Firmenname – und damit auch die Vorlage – oder das Layout der Vorlage selbst ändert, musst du zwar erstmal nur 3 Vorlagen ändern, aber eben auch 3 x 20 einzelne Dokumente. Wenn du nun in ein Feld entweder Zahlen wie 3,3, 6,8 oder 10,2, aber nie etwas Längeres wie beispielsweise 1000000000,9999 eintragen musst, bleiben die Auswirkungen auf den Textfluss vernachlässigbar.
Ein anderer Anwendungszweck wäre es, den Autoren einer Zeitung oder anderer periodisch herausgegebener Drucksachen eine Oberfläche zu geben, wo sie ihre Texte schreiben und Grafiken einstellen, ihren Beitrag dann als final kennzeichnen, die Redaktion die Artikel noch einmal redigiert und dann der fertige Artikel mit Grafiken auf Mausklick fertig formatiert in Scribus landet, der Layouter muss dann nur noch alles ordentlich arrangieren – das alles (bis auf die Formatierung) hat erst einmal wenig mit Scribus an sich zu tun, allerdings werden Änderungen dann nur noch zentral in der Datenbank vorgenommen und (zumindest Änderungen am Text) lassen sich (wenn man denn der Silbentrennung von Scribus vertrauen mag) mit einem Klick auch in Scribus übernommen.
Wenn mein Script wirklich so funktioniert, dass man es einsetzten könnte, werde ich einen konkreten Ablauf beschreiben, der so auch in der Realität vorkommen könnte, und dazu Beispiele einstellen.
Sollten sich einige Sachen als nicht realisierbar bzw. nicht praktikabel herausstellen, habe ich trotzdem gelernt, wie man ein Script für Scribus schreibt :-)
Julius