Skip to main content
Participant
July 2, 2025
Question

Can't generate QR code with Indesign Server

  • July 2, 2025
  • 0 replies
  • 150 views

I use InDesign Server to generate previews and materials from my application. I have two scripts, first one to generate a preview (jpeg with watermark added) and material (pdf with pdfpreset). I use the same template file and the same datasource csv for each action. When I generate material QR codes are correctly generated, but for preview instead of QR codes I get gray boxes see attached file). How can I make it work?
I already contacted Robert at ID-Tasker, but I wanted to ask here since I have no working solution yet.
Indesign Server Version 20.0 x64 Windows Server 2022 Standard v. 21H2

generate preview code:

try {
const startTime = new Date();

var logs = [];
var errors = [];
var hasError = false;

var outputFolder = 'C:/OutputFiles/';
var templatePath = '__INDD__';
var datasourcePath = '__CSV__';
var outputName = '__OUT__';
var watermarkFilePath = 'C:/watermark/watermark.png';

var template = new File(templatePath);
var dataSource = new File(datasourcePath);
var outputFile = new File(outputFolder + outputName + '.jpg');
var watermarkFile = new File(watermarkFilePath);
var originalPNGPrefs = app.pngExportPreferences.properties;
var originalJPEGPrefs = app.jpegExportPreferences.properties;

// general settings
try {
app.textImportPreferences.characterSet = TextImportCharacterSet.UTF16;

with (app.jpegExportPreferences) {
exportResolution = 720.0;
jpegExportRange = ExportRangeOrAllPages.EXPORT_ALL;
jpegQuality = JPEGOptionsQuality.MAXIMUM;
jpegColorSpace = JpegColorSpaceEnum.RGB;
antiAlias = true;
exportingSpread = false;
simulateOverprint = true;
jpegRenderingStyle = JPEGOptionsFormat.BASELINE_ENCODING;
}
} catch (e) {
errors.push(e.message);
hasError = true;
}

logs.push('Paths set');
try {
var doc = app.open(template);
} catch (e) {
errors.push(e.message);
hasError = true;
}

// if no error - open data source
if (!hasError) {
logs.push('opened template');
try {
doc.dataMergeProperties.selectDataSource(dataSource);
} catch (e) {
errors.push(e.message);
hasError = true;
}
}

// if no error - export output
if (!hasError) {
logs.push('export output');
try {
doc.dataMergeOptions.createNewDocument = true;
doc.dataMergeOptions.removeBlankLines = true;
doc.dataMergeProperties.mergeRecords();

var mergedDoc = app.documents[0];

for (var s = 0; s < mergedDoc.stories.length; s++) {
var story = mergedDoc.stories[s];

for (var t = story.tables.length - 1; t >= 0; t--) {
var table = story.tables[t];

for (var r = table.rows.length - 1; r >= 0; r--) {
var row = table.rows[r];
var containsLetterOrDigit = false;
var containsImage = false;

for (var c = 0; c < row.cells.length; c++) {
var cell = row.cells[c];

if (/[a-zA-Z0-9]/.test(cell.contents)) {
containsLetterOrDigit = true;
break;
}

if (cell.allGraphics.length > 0) {
containsImage = true;
break;
}
}

if (!containsLetterOrDigit && !containsImage) {
row.remove();
}
}
}
}
logs.push(
'Rows without any letters, digits, or images removed successfully.',
);

var wmLayer = mergedDoc.layers.itemByName('Watermark');
if (!wmLayer.isValid) {
wmLayer = mergedDoc.layers.add({ name: 'Watermark' });
}
wmLayer.move(LocationOptions.AT_BEGINNING);

for (var i = 0; i < mergedDoc.pages.length; i++) {
var pg = mergedDoc.pages[i];

var wf = pg.rectangles.add({
geometricBounds: [
0,
0,
mergedDoc.documentPreferences.pageHeight,
mergedDoc.documentPreferences.pageWidth,
],
strokeWeight: 0,
itemLayer: wmLayer,
});

wf.place(watermarkFile);
wf.fit(FitOptions.fillProportionally);
wf.transparencySettings.blendingSettings.opacity = 20;
wf.bringToFront();
}
logs.push('watermark added to all pages successfully.');

mergedDoc.exportFile(ExportFormat.JPG, outputFile);
} catch (e) {
errors.push(e.message);
hasError = true;
}

try {
var countFile = new File(outputFolder + outputName + '_pages.txt');
countFile.open('w');
countFile.write(mergedDoc.pages.length);
countFile.close();
} catch (e) {
errors.push(e.message);
hasError = true;
}
}

// close file, log time and print message
mergedDoc.close(SaveOptions.NO);
logs.push('time: ' + (new Date() - startTime) / 1000 + 's');
} catch (e) {
$.writeln('Error: ' + e.message);
} finally {
app.pngExportPreferences.properties = originalPNGPrefs;
app.jpegExportPreferences.properties = originalJPEGPrefs;

if (hasError) {
var title = 'Error';
[title, errors[0]].join(' : ');
} else {
logs.join(' --- ');
}
}

Generate material code:
try {
const startTime = new Date();

var logs = [];
var errors = [];
var hasError = false;

var outputFolder = 'C:/OutputFiles/';
var templatePath = '__INDD__';
var datasourcePath = '__CSV__';
var outputName = '__OUT__';

var template = new File(templatePath);
var dataSource = new File(datasourcePath);
var pdfFile = new File(outputFolder + outputName + '.pdf');

// general settings
try {
var pdfPreset = app.pdfExportPresets.itemByName('PDFPreset');
if (!pdfPreset) {
var pdfPreset = app.pdfExportPresets.add({
name: 'PDFPreset',
bleedMarks: true,
cropMarks: true,
colorBars: true,
});
}
if (!pdfPreset.isValid) {
errors.push('pdf preset invalid');
hasError = true;
}

app.textImportPreferences.characterSet = TextImportCharacterSet.UTF16;
} catch (e) {
errors.push(e.message);
hasError = true;
}

logs.push('Paths set');
try {
var doc = app.open(template);
} catch (e) {
errors.push(e.message);
hasError = true;
}

// if no error - open data source
if (!hasError) {
logs.push('opened template');
try {
doc.dataMergeProperties.selectDataSource(dataSource);
} catch (e) {
errors.push(e.message);
hasError = true;
}
}

// if no error - export pdf
if (!hasError) {
logs.push('export pdf');
try {
doc.dataMergeProperties.exportFile(pdfFile, pdfPreset);
} catch (e) {
errors.push(e.message);
hasError = true;
}
}

// close file, log time and print message
doc.close(SaveOptions.NO);
if (hasError) {
var title = 'Error';
[title, errors[0]].join(' : ');
} else {
logs.push('time: ' + (new Date() - startTime) / 1000 + 's');
logs.join(' --- ');
}
} catch (e) {
$.writeln('Error: ' + e.message);
}