Las exportaciones de fusión de datos a múltiples archivos PDF, todos con un nombre único a partir de los datos

Estoy buscando automatizar la combinación de datos para crear varios PDF por fila de datos (cada PDF tendría 10 páginas) y cada PDF se nombrará de forma única en función de una columna en los datos.

Especificaciones:

  • Documento de InDesign con varias páginas (10 páginas).
  • CSV con 100 personas.
  • Quiero tener un PDF para cada persona (100 pdf).
  • Cada PDF será un documento de 10 páginas para esa persona.
  • El nombre de archivo de cada PDF debe contener el nombre de una sola persona; para saber qué PDF enviar a qué persona (report_john_doe.pdf).

Obstáculos que estoy golpeando:

  • Combinación de datos que genera múltiples documentos de InDesign; Genial, pero ¿cómo los automatizo para luego exportarlos a PDF + nombrar de forma única el archivo en función de una fila/columnas del CSV?
  • Combinación de datos para exportar PDF; esto crea un PDF con cada persona en él.

Software:

  • InDesign CS6
  • acróbata profesional

He buscado en los foros pero ha sido un oso averiguarlo. Secuencias de comandos antiguas, 404 páginas, falta cierta funcionalidad y no hay un tutorial paso a paso para descubrir cómo usar dicha secuencia de comandos.

Encontré este script pero no estoy seguro de cómo configurarlo + usarlo.... ? http://forums.adobe.com/message/5551746#5551746

¿Cuál es el mejor camino para automatizar esto a través de una combinación de combinación de datos, secuencias de comandos, acciones según sea necesario?

¡Gracias por cualquier ayuda!

mi

Parece que el script vinculado podría funcionar. Creo que si lo copia con un editor de texto, lo guarda como un archivo .jsx y lo coloca en su carpeta de scripts de Indesign (use el de Javascript) podría probarse.
Parece que es un script para Acrobat. En realidad no puedo probarlo en esta máquina.

Respuestas (2)

El flujo de trabajo para el que está configurado este script es Combinación de datos >> Exportar PDF, que, como notó, genera un solo PDF masivo.

El script se ejecuta en Acrobat. Toma el archivo CSV como entrada (dicho CSV debe tener una columna llamada "nombre de archivo" que contenga el nombre individual del PDF extraído. Cuenta el número total de páginas en el PDF y lo divide por el número total de registros en el CSV en para calcular el número de páginas por PDF individual, luego itera a través del documento, extrayendo páginas a medida que avanza.

Hay entrada de usuario para el texto como prefijo y/o sufijo en los nombres de los archivos de salida.

No he probado esto, pero parece sencillo (aparte del análisis del CSV, que vino de alguien en stackoverflow y no revisé en detalle).

Para el registro, aquí está el guión:

var CSV = function (data, delimiter) {
var _data = CSVToArray(data, delimiter);
var _head = _data.shift();
return {
    length: function () {return _data.length;}, 
    adjustedLength: function () {return _data.length - 1;}, 
    getRow: function (row) {return _data[row];}, 
    getRowAndColumn: function (row, col) {
        if (typeof col !== "string") {
            return _data[row][col];
        } else {
            col = col.toLowerCase();
            for (var i in _head) {
                if (_head[i].toLowerCase() === col) {
                    return _data[row][i];
                }
            }
        }
    }
};
};
function CSVToArray( strData, strDelimiter ){
    strDelimiter = (strDelimiter || ",");
    var objPattern = new RegExp(
        (
            // Delimiters.
            "(\\" + strDelimiter + "|\\r?\\n|\\r|^)" +
            // Quoted fields.
            "(?:\"([^\"]*(?:\"\"[^\"]*)*)\"|" +
            // Standard fields.
            "([^\"\\" + strDelimiter + "\\r\\n]*))"
        ),
        "gi"
        );
var arrData = [[]];
var arrMatches = null;
while (arrMatches = objPattern.exec( strData )){
    var strMatchedDelimiter = arrMatches[ 1 ];
    if (
        strMatchedDelimiter.length &&
        (strMatchedDelimiter != strDelimiter)
        ){
        arrData.push( [] );
    }
    if (arrMatches[ 2 ]){
        var strMatchedValue = arrMatches[ 2 ].replace(
            new RegExp( "\"\"", "g" ),
            "\""
            );
    } else {
        var strMatchedValue = arrMatches[ 3 ];
    }
    arrData[ arrData.length - 1 ].push( strMatchedValue );
}
return( arrData );
}

function isInt(n) {
    return typeof n === "number" && n % 1 == 0;
}

var prepend = app.response("Enter any text to go at the START of each filename:");
var append = app.response("Enter any text to go at the END of each filename:");
var pathStr = app.response("If the PDFs should be saved in a sub folder, enter the relative path here:", "", "pdf/");

this.importDataObject("CSV Data");
var dataObject = this.getDataObjectContents("CSV Data");
var csvData = new CSV(util.stringFromStream(dataObject, 'utf-8'), ',');
var pagesPerRecord = this.numPages / csvData.length();
if (isInt(pagesPerRecord)) {
    for (var i = 0; i < this.numPages; i ++) {
        var pageStart = i*pagesPerRecord;
        var pageEnd = (i+1)*pagesPerRecord - 1;
        var recordIndex = (i + pagesPerRecord) / pagesPerRecord;
        var filename = csvData.getRowAndColumn(i, "filename");
        if (!filename) {
            app.alert('No filenames found - using "file-XX.pdf". Press Escape after continuing to cancel.');
            filename = "file-" + i;
        }
        var settings = {nStart: pageStart, nEnd: pageEnd, cPath: pathStr+prepend+filename+append+'.pdf'};
        this.extractPages(settings);
    }
} else {
    var message = "The number of pages per row is not an integer (" + pagesPerRecord;
    message += ", " + this.numPages + " pages, " + csvData.length() + " rows).";
}
hola, como alguien con experiencia limitada con secuencias de comandos, ¿cómo puedo ejecutar una secuencia de comandos en Acrobat Reader? ¿O tengo que ejecutar esto en InDesign?

Un colega mío terminó creando un script de python personalizado. Usando ese script de python y el script de InDesign de batch_convert.jsxbin, ahora podemos generar automáticamente cada PDF, con un nombre único basado en los datos CSV.

Nuestro script de python y un ejemplo están disponibles aquí. https://github.com/goinvo/Batch-IDML-Generador

El script batch_convert.jsxbin está disponible aquí. http://www.kahrel.plus.com/indesign/batch_convert.html Esto tomará todos los IDML generados a partir del script de python y luego los convertirá automáticamente en PDF.

Pasos:

  1. Verifique que el archivo python tenga la ruta IDML y la ruta CSV correctas.

  2. Abra la Terminal y 'cd' en el directorio que contiene el script IDML, CSV y python.

  3. En Terminal, ingrese 'python3 batch_idml_editor.py' (éxito = Terminal imprime cada archivo de paciente, falla = Terminal muestra error).

  4. Abra InDesign sin archivos abiertos.

  5. En InDesign, ejecute el script 'batch_convert.jsxbin'

  6. Desde la ventana emergente batch_convert.jsxbin, seleccione su 'Carpeta de entrada'. Esta será la carpeta generada por su secuencia de comandos de python desde el paso 3. Se verá como 'salida XXXXXXX'.

  7. En la ventana emergente batch_convert.jsxbin, seleccione su 'Carpeta de salida'. Este es el directorio donde desea que se coloquen los archivos PDF. Elige cualquier cosa que tenga sentido.

  8. En la ventana emergente batch_convert.jsxbin, seleccione 'Formato de origen' = 'IDML'.

  9. Desde la ventana emergente batch_convert.jsxbin, haga clic en el botón 'Aceptar'. Esto generará todos los archivos PDF y debería completarse en unos minutos.

¡Hecho!