[GastForen Programme Print/Bildbearbeitung Adobe InDesign Skriptwerkstatt Notiz in Text wandeln (CS4, WIN)

  • Suche
  • Hilfe
  • Lesezeichen
  • Benutzerliste
Print/Bildbearbeitung - Photos, Layout, Design
Themen
Beiträge
Moderatoren
Letzter Beitrag

Notiz in Text wandeln (CS4, WIN)

cwenet
Beiträge gesamt: 1139

30. Okt 2010, 18:29
Beitrag # 1 von 50
Bewertung:
(11348 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo,

ich möchte gerne bestehende Notizen, die sich im Fliesstext befinden wieder zurück in den Text platzieren. Und zwar an die Stelle, an der vorher die Notiz war. Ideal wäre, wenn der Text dann in einem eigenen Absatz stünde.
Da von mehreren Nutzern Notizen existieren, möchte ich nur von einem bestimmten Nutzer den Text zurückholen.
Folgendes Script habe ich schon im www entdeckt.
Bin aber überfragt, wie ich die Nutzerabfrage mache und statt in eine externe Datei direkt ins Indesigndokument zurückschreibe.
Kann mir jemand debei bitte helfen.

Hier das Script. Weiss leider nicht mehr woher ich es genau habe:

Code
function myExportNotes(myFolder) 
{
for (i=app.activeDocument.groups.length-1;i>=0;i--)
app.activeDocument.groups[i].ungroup();
for (i=app.activeDocument.textFrames.length-1;i>=0;i--)
{
if (app.activeDocument.textFrames.item(i).locked=='true')
app.activeDocument.textFrames.item(i).locked='false';
}
var DName=myDocument.name.replace(".indd","");
var myFilePath = myFolder + "/" +DName+"_Notes "+".txt";
var myFile = new File(myFilePath);
myFile.open("w");
myFile.write("#\tPage\tUsername\tCreated Date\tModified Date\tNotes\n");
//Collect Info About Notes
var mypages=myDocument.pages.length;
for(p=0;p<mypages;++p)
{
for (t=0;t<myDocument.pages.item(p).allPageItems.length;++t)
{
if(myDocument.pages.item(p).allPageItems[t].constructor.name=="TextFrame")
{
for (i=0;i<myDocument.pages.item(p).allPageItems[t].paragraphs.length;++i)
{
for (j=0;j<myDocument.pages.item(p).allPageItems[t].paragraphs.item(i).notes.length;++j)
{
count=1;
if(x<=notecount)
{
x=x+1;
myFile.write(x+"\t");
try
{
myFile.write(String(myDocument.pages.item(p).name)+"\t");
}
catch(myError)
{
alert("Page Number not found for Note "+ x);
myFile.write("NIL"+"\t");
}
myFile.write(String(myDocument.pages.item(p).allPageItems[t].paragraphs.item(i).notes.item(j).userName)+"\t");
var str1=String(myDocument.pages.item(p).allPageItems[t].paragraphs.item(i).notes.item(j).creationDate);
var str2=str1.replace("GMT-0400","");
str2=str2.replace("GMT-0500","");
str2=str2.replace("GMT+0530","");
myFile.write(str2+"\t");
var str1=String(myDocument.pages.item(p).allPageItems[t].paragraphs.item(i).notes.item(j).modificationDate);
var str2=str1.replace("GMT-0400","");
str2=str2.replace("GMT-0500","");
str2=str2.replace("GMT+0530","");
myFile.write(str2+"\t");
myFile.write(myDocument.pages.item(p).allPageItems[t].paragraphs.item(i).notes.item(j).texts.item(0).contents+"\n");
}
}
}
}
}
}
myFile.execute();
}//function ends
if(app.documents.length!= 0)
{
var myDocument=app.activeDocument;
var notecount=0;
var x=0;
var myStories=myDocument.stories.length;
for(s=0;s<myStories;++s)
notecount=myDocument.stories.item(s).notes.length+notecount;
if(notecount==0)
{
alert("There are no Notes in the Document", "Notes");
exit();
}
var myFolder = Folder.selectDialog ("The Report will be stored in the below selected folder", "The Report will be stored in the below selected folder");
if(myFolder != null)
{

myExportNotes(myFolder);
alert("Script Executed Successfully !!!", "Notes");
}
}
else
{
alert("Please open a document and try again.", "Notes");
}


Über Hilfe freue ich mich.

Gruss
Christoph
X

Notiz in Text wandeln (CS4, WIN)

SamiSalami
Beiträge gesamt: 66

2. Nov 2010, 13:18
Beitrag # 2 von 50
Beitrag ID: #455762
Bewertung:
(11280 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo :-)

Also in den For-Schleifen iteriert das Skript durch bis zu den Notes:

Code
for (j=0;j<myDocument.pages.[p].allPageItems[t].paragraphs[i].notes.length;++j) 


Guckst du hier für die Eigenschaften von Note:
http://www.indesignscriptingreference.com/CS3/JavaScript/Note.htm

Dort gibt es "userName".

Das heißt um das Geschreibe kannst du als einfachste Variante eine if-Bedingung machen:

Code
if (myDocument.pages[p].allPageItems[t].paragraphs[i].notes[j].userName == "Dein Autor"){  
Dann schreibe
}
else {
Schreibe nicht sondern mach break und lauf für die nächste note von vorn los
}


Um die Note nicht in eine Textdatei sondern an ihre Stelle zu schreiben musst du ihren InsertionPoint speichern.
Dafür hat jede Note einen Index den speichern wir mal und schreiben den Content anschließend in unseren Pragraph (das alles in obengenannte Schleife):

Code
if (myDocument.pages[p].allPageItems[t].paragraphs[i].notes[j].userName == "Dein Autor"){  
var myNote = myDocument.pages[p].allPageItems[t].paragraphs[i].notes[j];
var myParagraph = myDocument.pages[p].allPageItems[t].paragraphs[i];
var myIndex = myNote.index;

myParagraph.insertionPoint[myIndex].contents = myNote.texts[0].contents;

}
else {
break;
}


Alle Textdatei-Sachen kannst du rausnehmen.
Möchtest du auch den Autor und Datum stehen haben musst du diese extra einfügen, aber es klang nicht danach?

Ich hoffe du kommst damit zurecht?


Liebe Grüße,
SamiSalami


als Antwort auf: [#455632]

Notiz in Text wandeln (CS4, WIN)

cwenet
Beiträge gesamt: 1139

5. Nov 2010, 19:53
Beitrag # 3 von 50
Beitrag ID: #456161
Bewertung:
(11222 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Vielen Dank SamiSalami,

gerade merke ich, dass mein Vorhaben so gar nicht sinvoll ist.
Ich erkäre gerade mal, was ich erreichen will.

Im Dokument sind einige Notizen platziert, die jeweils (als Text) eine individuelle Nr. enthalten.
Im gleichen Dokument existieren Textrahmen, die jeweils mit einen Scriptlabel versehen wurden. Dieses Scriptlabel hat ebenfalls jeweils eine individuelle Nr.

Es existieren also immer eine Notiz und ein Scriptlabel mit der gleichen Nr.
Im ganzen Dokument gibt es also sog. Nr.-Paare.

Diese Paare möchte ich nun via Script zusammenbringen.

Ergebnis soll z.B. sein:
Der Text aus Frame mit Label-Nr. 123 soll im Fliesstext platziert werden.
Und zwar an der Stelle an der sich die Notiz mit Textinhalt 123 befindet.
Diese Aktion soll für alle Paare im Dokument gelten.

Kannst Du mir dabei bitte nochmals helfen?

Gruss
Christoph


als Antwort auf: [#455762]

Notiz in Text wandeln (CS4, WIN)

SamiSalami
Beiträge gesamt: 66

6. Nov 2010, 11:23
Beitrag # 4 von 50
Beitrag ID: #456171
Bewertung:
(11185 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Nun gut, ausnahmsweise ;-)

Aber bitte bedenke, dass ich selbst keine professionelle Indesignskripterin bin und daher selbst auch keine Gewähr geben kann, dass das Skript nicht mal unter bestimmten Umständen knallt.

Wichtig zu erwähnen auch: Ich schreibe meine Skripte mit Indesign CS5, diese funktionieren meist reibungslos ab CS3.
Bei CS2 hört der Spaß allerdings meistens auf - falls du unter irgendwelchen Umständen noch mit CS2 arbeiten solltest, hier kracht es meistens.

- Den Autor habe ich rausgeschmissen
- es ist komplett ungetestet (sorry, keine Zeit gehabt da jetzt n ind.-Dokument zu machen), also schmeiß direkt einmal an, es könnten grobe Fehler drinnen sein, die ich dann noch einmal korrigiere
- ich habe mich bei der Vorgehensweise an deinem Skript orientiert

Code
var wantedParent; 

function getParent(myObj, wantedParent) {
while (wantedParent != myObj.constructor.name ) {
myObj = myObj.parent;
getParent(myObj, wantedParent);
}
return myObj;
}


var myDoc = app.activeDocument;
var myPages = myDoc.pages;
for (var a=0; a < myPages.length; a++){

for (var b=0; b < myPages[a].allPageItems.length; b++){

if ( myPages[a].allPageItems[b].constructor.name=="TextFrame" ){

var myTextframe = myPages[a].allPageItems[b];
var myLabel = myTextframe.label;

for ( var c=0; c < myDoc.stories.length; c++){

for ( var x=0; x < myDoc.stories[c].notes.length; x++){

var myNote = myDoc.stories[c].notes[x];

if (myNote.texts[0].contents == myLabel){

var myIndex = myNote.index;
var myParagraph = getParent(myNote, "Paragraph");
myParagraph.insertionPoint[myIndex].contents = myNote.texts[0].contents;

}
else {

break;

}
}
}
}
else {

break;
}
}
}



als Antwort auf: [#456161]

Notiz in Text wandeln (CS4, WIN)

cwenet
Beiträge gesamt: 1139

6. Nov 2010, 13:48
Beitrag # 5 von 50
Beitrag ID: #456178
Bewertung:
(11169 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Vielen Dank für Dein Script.

Leider bekomme ich eine Fehlermeldung. Stapelüberlauf.

Da habe ich leider keine Idee, an welcher Stelle ich eingreifen muss.

Gruss
Christoph


als Antwort auf: [#456171]

Notiz in Text wandeln (CS4, WIN)

SamiSalami
Beiträge gesamt: 66

6. Nov 2010, 15:42
Beitrag # 6 von 50
Beitrag ID: #456181
Bewertung:
(11152 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Könntest du bitte die komplette Fehlermeldung posten?
Danke!

Welche Version nutzt du?


als Antwort auf: [#456178]

Notiz in Text wandeln (CS4, WIN)

cwenet
Beiträge gesamt: 1139

6. Nov 2010, 17:47
Beitrag # 7 von 50
Beitrag ID: #456184
Bewertung:
(11138 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Der Fehler lautet nur:
Fehlernummer 27
Stapelüberlauf

Ich nutze CS4 6.04

Ich habe noch den Screenshot der Fehlermeldung drangehängt

Gruss
Christoph


als Antwort auf: [#456181]
Anhang:
Unbenannt-1.png (14.3 KB)

Notiz in Text wandeln (CS4, WIN)

WernerPerplies
Beiträge gesamt: 2763

6. Nov 2010, 18:07
Beitrag # 8 von 50
Beitrag ID: #456185
Bewertung:
(11131 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hi,

ich habe keine Ahnung von Javaskript, aaaber:

Code
function getParent(myObj, wantedParent) {   
while (wantedParent != myObj.constructor.name ) {
myObj = myObj.parent;
getParent(myObj, wantedParent);
}
return myObj;
}


Wenn ich das richtig sehe, wird die Funktion getParent() rekursiv aufgerufen.
Falls Deine Bedingung (wantedParent != myObj.constructor.name ) niemals unwahr wird, hast Du eine Endlosschleife mit Rekursion.

Bei jedem Aufruf der Funktion wird die Rückkehradresse auf dem Stack abgelegt, und das führt dann zum Stacküberlauf.

Kurz: Prüfe Deine Abbruchbedingung.


als Antwort auf: [#456171]

Notiz in Text wandeln (CS4, WIN)

cwenet
Beiträge gesamt: 1139

8. Nov 2010, 14:21
Beitrag # 9 von 50
Beitrag ID: #456259
Bewertung:
(11017 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Vielen Dank WernerPerplies,
für den Hinweis.
Vielleicht kann mir jemand ncoh bei der Lösung des Problems helfen.
Da habe ich auch keine Idee, wie ich das abfangen kann.

Gruss
Christoph


als Antwort auf: [#456185]

Notiz in Text wandeln (CS4, WIN)

WernerPerplies
Beiträge gesamt: 2763

8. Nov 2010, 14:41
Beitrag # 10 von 50
Beitrag ID: #456264
Bewertung:
(11013 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Christoph,

Antwort auf [ cwenet ] Vielen Dank WernerPerplies,
für den Hinweis.
Vielleicht kann mir jemand ncoh bei der Lösung des Problems helfen.
Da habe ich auch keine Idee, wie ich das abfangen kann.

Gruss
Christoph


Code
function getParent(myObj, wantedParent) {    
while (wantedParent != myObj.constructor.name ) {
myObj = myObj.parent;
getParent(myObj, wantedParent);
}
return myObj;
}


Ohne die genaue Bedeutung des Codes zu verstehen:

1. Falls myObj nicht per Reference übergeben wird, müsste es wohl hier eigentlich:
myObj = getParent(myObj, wantedParent) heißen,
andernfalls würde ja immer das gleiche Objekt ausgewertet.

2. Falls keines der Parents gleich wantedParent ist, würde die Schleife endlos laufen. Prüfe also mit "OR" oder innerhalb der Schleife auf ein Objekt, dass garantiert vorkommt, im Zweifelsfall die Application, die müsste ja wirklich immer vorkommen, oder?


als Antwort auf: [#456259]

Notiz in Text wandeln (CS4, WIN)

WernerPerplies
Beiträge gesamt: 2763

8. Nov 2010, 15:03
Beitrag # 11 von 50
Beitrag ID: #456266
Bewertung:
(10997 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Christoph,

Noch eine Änderung:


Code
function getParent(myObj, wantedParent) {    
myObj = myObj.parent;
while (wantedParent != myObj.constructor.name ) {
if (myObj.constructor.name == "Abbruchobjekt")
{
return null; // falls so etwas erlaubt ist
}
myObj = getParent(myObj, wantedParent);
}
return myObj;
}


Bei Aufrufen auf null prüfen und ggf. Fehlerhandling
HTH


als Antwort auf: [#456264]

Notiz in Text wandeln (CS4, WIN)

SamiSalami
Beiträge gesamt: 66

8. Nov 2010, 15:29
Beitrag # 12 von 50
Beitrag ID: #456269
Bewertung:
(10988 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo!

Ja, ihr habt vollkommen recht.
Mein Fehler! Aber hier ist auch noch ein zweiter Fehler, ich bin davon ausgegangen, dass eine Notiz immer den Parent "Pargraph" hat, was falsch ist. Sie befindet sich aber immer in einem Textframe.

Ich habe nun einfach nen Abbruch bei "Page" reingehauen (und dann wird auch gleich das komplette Skript abgebrochen, da es dazu eigtl nicht kommen darf), falls kein Textframe gefunden wird, darf aber eiglt nicht passieren.
Code
var wantedParent;  

function getParent(myObj, wantedParent) {
while (wantedParent != myObj.constructor.name ) {
if (myObj.parent.constructor.name == "Page"){
alert("Invalide Notiz");
exit();
}
myObj = myObj.parent;
getParent(myObj, wantedParent);
}
return myObj;
}


var myDoc = app.activeDocument;
var myPages = myDoc.pages;
for (var a=0; a < myPages.length; a++){

for (var b=0; b < myPages[a].allPageItems.length; b++){

if ( myPages[a].allPageItems[b].constructor.name=="TextFrame" ){

var myTextframe = myPages[a].allPageItems[b];
var myLabel = myTextframe.label;

for ( var c=0; c < myDoc.stories.length; c++){

for ( var x=0; x < myDoc.stories[c].notes.length; x++){

var myNote = myDoc.stories[c].notes[x];

if (myNote.texts[0].contents == myLabel){

var myIndex = myNote.index;
var myTextframe = getParent(myNote, "Textframe");
myTextframe.insertionPoint[myIndex].contents = myNote.texts[0].contents;

}
else {

break;

}
}
}
}
else {

break;
}
}
}


Also hier nochmal :-)


als Antwort auf: [#456266]

Notiz in Text wandeln (CS4, WIN)

WernerPerplies
Beiträge gesamt: 2763

8. Nov 2010, 15:35
Beitrag # 13 von 50
Beitrag ID: #456271
Bewertung:
(10982 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hi,

Code
function getParent(myObj, wantedParent) {    
while (wantedParent != myObj.constructor.name ) {
if (myObj.parent.constructor.name == "Page"){
alert("Invalide Notiz");
exit();
}
myObj = myObj.parent;
getParent(myObj, wantedParent);
}
return myObj;
}


ich muss noch einmal nachfragen:
getParent(myObj, wantedParent); -> Übergabe per reference?

Außerdem holst Du Dir ein Parent: myObj = myObj.parent;
Und gleich nochmal eins, ohne Prüfung?
-> getParent(myObj, wantedParent);


als Antwort auf: [#456269]

Notiz in Text wandeln (CS4, WIN)

SamiSalami
Beiträge gesamt: 66

8. Nov 2010, 16:16
Beitrag # 14 von 50
Beitrag ID: #456274
Bewertung:
(10969 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Werner,

nein, das ist schon so gedacht.
Die Funktion soll solange rekursiv immer wieder augerufen werden,
bis sie die Referenz zum gewünschten Parent hat.

Gedacht ist es also folgendermaßen:
Solange ich gewünschten Parent nicht habe, rufe Funktion mit nächstem Parent erneut auf.
Erst wenn Parent erreicht, dann returnen -> Ergebnis ist Referenz auf ein Objekt.

Natürlich sind while-Schleifen oft eine pikante Angelegenheit,
die leicht in Endlosschleifen enden können - von daher hast du auch völlig recht, dass ich das ein wenig "schlampig" angegangen bin ;-)


als Antwort auf: [#456271]

Notiz in Text wandeln (CS4, WIN)

WernerPerplies
Beiträge gesamt: 2763

8. Nov 2010, 16:29
Beitrag # 15 von 50
Beitrag ID: #456280
Bewertung:
(10963 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Sami,

soweit hatte ich das schon verstanden, und wenn das Object per Reference übergeben wird, ist auch die Rückgabe klar, was mir aber nicht klar ist, ist der Ablauf der Schleife:

Du gehst mit Note in die Funktion:
Code
function getParent(myObj, wantedParent) {     
// fragst hier ob Note ein Paragraph ist
while (wantedParent != myObj.constructor.name ) {
if (myObj.parent.constructor.name == "Page"){
alert("Invalide Notiz");
exit();
}
// holst hier Note.Parent
myObj = myObj.parent;
// holst hier Note.Parent.Parent
getParent(myObj, wantedParent);
// fragst dann bei Schleifenbeginn ob Note.Parent.Parent
// ein Paragraph ist.
}
return myObj;
}


Deshalb müsste m. E. die Schleife so aussehen:
Code
function getParent(myObj, wantedParent) {    
// parent von Note holen
myObj = myObj.parent;
// fragst hier ob Note.Parent ein Paragraph ist
while (wantedParent != myObj.constructor.name ) {
if (myObj.parent.constructor.name == "Page"){
alert("Invalide Notiz");
exit();
}
// holst hier Note.Parent.Parent // ... usw. je Schleifendurchlauf
getParent(myObj, wantedParent);
// Abfrage jeweils bei Schleifenbeginn.
}
return myObj;
}


Ich hoffe, ich habe die Problematik einigermaßen erklären können.


als Antwort auf: [#456274]
X

Veranstaltungskalender

Hier können Sie Ihre Anlässe eintragen, welche einen Zusammenhang mit den Angeboten von HilfDirSelbst.ch wie z.B. Adobe InDesign, Photoshop, Illustrator, PDF, Pitstop, Affinity, Marketing, SEO, Büro- und Rechtsthemen etc. haben. Die Einträge werden moderiert freigeschaltet. Dies wird werktags üblicherweise innert 24 Stunden erfolgen.

pdf-icon Hier eine kleine Anleitung hinsichtlich Bedeutung der auszufüllenden Formularfelder.

Veranstaltungen
14.05.2024

Online
Dienstag, 14. Mai 2024, 10.00 - 10.30 Uhr

Webinar

Prozessoptimierung ist ein Teamsport! Keine Software und keine Maschine allein kann Ihnen helfen, die Effizienzpotenziale Ihres Betriebes maximal auszuschöpfen. Von der Auftragsannahme über die Vorstufe und den Druck bis hin zur Weiterverarbeitung – alles muss optimal ineinandergreifen. Apropos Weiterverarbeitung – in vielen Druckbetrieben fristet sie in Sachen Prozessoptimierung immer noch ein Schattendasein. Dabei liegen hier mittlerweile die größten Einsparpotenziale! In einem Webinar von Horizon und Impressed erfahren Sie, wie Sie diese Einsparungen realisieren können. Horizon, bekannt für innovative Lösungen in der Druckweiterverarbeitung, bietet mit iCE LiNK eine Workflowlösung für die Weiterverarbeitung. iCE LiNK überwacht, visualisiert und analysiert Produktionsabläufe und unterstützt bei der Wartung – damit immer alles reibungslos läuft. Den gleichen Anspruch hat der von Impressed entwickelte Impressed Workflow Server – er ist die smarte PDF-Workflow-Lösung für Druckereien, die Datenmanagement, Preflight und Produktionssteuerung übernimmt. Im Webinar zeigen Ihnen die Experten von Horizon und Impressed, wie beide Lösungen im Team die Effizienz und Produktivität Ihres Betriebes steigern können. Melden Sie sich am besten gleich an, wir freuen uns auf Sie! PS: Melden Sie sich in jedem Fall an – sollten Sie zum Termin verhindert sein, erhalten Sie die Aufzeichnung.

kostenlos

Ja

Organisator: Impressed / Horizon

https://www.impressed.de/schulung.php?c=sDetail&sid=327

Einsparpotenziale in der Weiterverarbeitung
Veranstaltungen
16.05.2024

Online
Donnerstag, 16. Mai 2024, 10.00 - 10.30 Uhr

Webinar

Komplizierte, kleinteilige Aufträge; alles sehr speziell; seit Jahren bewährte Prozesse – da können wir nichts standardisieren und automatisieren! Das sagen viele Großformatdrucker – aber stimmt das wirklich, ist dem tatsächlich so? Günther Business Solutions und Impressed treten in einem Webinar den Gegenbeweis an. Experten beider Unternehmen zeigen, wie Großformatdrucker vom Einsatz zweier bewährter Lösungen profitieren können: • von advanter print+sign von Günther Business Solutions, dem ERP-System für den Großformatdruck, dass alle Phasen der Wertschöpfung im Large Format Printing abdeckt • von Impressed Workflow Server, der smarten PDF-Workflow-Lösung für Druckereien, die Datenmanagement, Preflight und Produktionssteuerung übernimmt Über die Kombination beider Lösungen können Großformatdrucker ihre Prozesse mit modernen Workflows Schritt für Schritt automatisieren – und so zügig deutliche Zeit- und Kosteneinsparungen realisieren. Das Webinar sollten Sie sich nicht entgehen lassen – damit Sie keine Effizienzpotenziale mehr liegen lassen. Melden Sie sich am besten gleich an, wir freuen uns auf Sie! PS: Melden Sie sich in jedem Fall an – sollten Sie zum Termin verhindert sein, erhalten Sie die Aufzeichnung.

kostenlos

Nein

Organisator: Impressed / Günther Business Solutions

https://www.impressed.de/schulung.php?c=sDetail&sid=326

Und es geht doch: Automatisierung im Großformatdruck!