Hallo Ulrich,
das unten angehängte Skript hatte ich gestern bereits veröffentlicht, es dann aber wieder zurückgezogen, als ich Deine Frage mit dem Einzelseitenexport irrtümlicherweise als gelöst betrachtet hatte.
Mit dem Skript kannst Du QR-Codes in einem leeren InDesign-Dokument auf der Basis einer einfachen Liste (UTF-8 codierte Textdatei) generieren lassen. Die einzelnen Einträge sind durch Zeilenschaltung voneinander getrennt: In jeder Textzeile steht genau ein Link.
Die QR-Codes werden in der Dimension (Höhe x Breite) des aktiven (leeren) InDesign-Dokuments plus Anschnitt erzeugt. Mit der Anpassung des Anschnitts vor Skriptausführung kannst Du also die Größe des Weißraums von den Kanten des Rahmens bis zum eigentlichen Code steuern und das Optimum für Deine Zwecke herausfinden.
Bereite ein leeres Dokument mit Deinen Größen für die Seiten + Beschnitt vor.
Starte das Skript.
Nach der Auswahl der Listendatei per Datei-Öffnen Dialog werden folgende Elemente je Zeile der Liste auf zwei Ebenen einer Seite verteilt:
1. Text: Inhalt der Zeile (in Textrahmen außerhalb dem Beschnitt; ggf. zur Sichtkontrolle)
2. QR-Code Hyperlink
Die Text-Ebene ist standardmäßig ausgeblendet und nicht druckbar.
Aus dieser InDesign-Datei kannst Du dann PDFs mit Einzelseiten oder Bilder mit fortlaufender Nummerierung exportieren.
// qrurl_from_list.jsx
var doc = app.activeDocument,
i = 0,
f = null,
url = '',
rect = null,
tf = null,
str = '',
arr = [],
pg = doc.pages.firstItem(),
layers = {
'url': (doc.layers.itemByName('QR-Code Hyperlink').isValid) ? doc.layers.itemByName('QR-Code Hyperlink') : doc.layers.add({name: 'QR-Code Hyperlink'}),
'str': (doc.layers.itemByName('Text').isValid) ? doc.layers.itemByName('Text') : doc.layers.add({name: 'Text'})
},
// geometricBounds für Rahmen der QR-Codes = Anschnitt rundherum
gb = [
-doc.documentPreferences.documentBleedTopOffset,
-doc.documentPreferences.documentBleedInsideOrLeftOffset,
doc.documentPreferences.pageWidth + doc.documentPreferences.documentBleedTopOffset,
doc.documentPreferences.pageHeight + doc.documentPreferences.documentBleedOutsideOrRightOffset
];
// Einzelseiten
doc.documentPreferences.facingPages = false;
// Textdatei mit Liste der Codes öffnen
f = File.openDialog('Liste für QR-Codes');
if (f != null)
{
// Nullpunkt und Linealursprung setzen; mm
var restoreViewPrefs = setupViewPrefs();
// Ebenen justieren
layers.str.move(LocationOptions.BEFORE, doc.layers.firstItem());
layers.str.printable = false;
layers.str.visible = false;
layers.url.visible = true;
// Textdatei lesen und aus Zeilen ein Array erzeugen
str = read_txt(f);
arr = str.split('\n');
for (i = 0; i < arr.length; i++)
{
url = arr;
// Präparation Hyperlink QR-Code
rect = pg.rectangles.add({geometricBounds: gb, itemLayer : layers.url});
rect.createHyperlinkQRCode(url);
// Ausgabe Listeneintrag
tf = pg.textFrames.add({geometricBounds: [gb[0] - 7, 0, gb[1] - 0.1, gb[3]], itemLayer: layers.str, contents: url});
// Seite einfügen
pg = doc.pages.add();
}
pg.remove(); // letzte = leere Seite löschen
restoreViewPrefs();
alert('Fertig.');
}
// ---------------------------------------------------------------
// Textdatei lesen
// ---------------------------------------------------------------
function read_txt(_file)
{
_file.encoding = 'UTF-8';
var _result = _file.open('r');
var _content = _file.read();
_file.close();
return _content;
}
//-----------------------------------------------------------------
// Maßsystem sichern und restaurieren
//-----------------------------------------------------------------
function setupViewPrefs()
{
var doc = app.activeDocument;
var vp = doc.viewPreferences.properties;
var zp = doc.zeroPoint;
doc.viewPreferences.properties =
{
horizontalMeasurementUnits: MeasurementUnits.MILLIMETERS,
verticalMeasurementUnits: MeasurementUnits.MILLIMETERS,
rulerOrigin: RulerOrigin.pageOrigin
};
doc.zeroPoint = [0, 0];
return function ()
{
doc.viewPreferences.properties = vp;
doc.zeroPoint = zp;
};
}