Importación de varios archivos pdfAdvertencia: ¡Soy nuevo en la codificación!
Tengo alrededor de 500 archivos pdf que contienen datos tabulados que quiero importar. Me las arreglé para crear un script que extraerá, apilará y transpondrá los datos, así como anexarlos / concatenarlos a una tabla (que llamé " final.jmp "). Cada pdf está representado por una fila en final.jmp . Ahora aquí está el flujo de trabajo y problemas Yo identifiqué:
- Como no pude averiguar cómo importar varios archivos PDF, tuve que recurrir a la importación de cada PDF individualmente cambiando el nombre del archivo * .pdf que se importará en el script (que está incrustado en final.jmp) .
- Después de cada importación, tengo que cerrar todas las tablas intermedias creadas y abiertas en el proceso, y guardar la tabla resultante como nueva. final.jmp .
- Luego vuelvo a abrir final.jmp , edite la secuencia de comandos con el nuevo nombre de archivo pdf, importe un nuevo pdf y así sucesivamente.
Mi pregunta :
¿Es posible ejecutar el script de forma repetitiva, seleccionando cada vez un nuevo PDF hasta que todos los PDF de una carpeta se hayan importado y recopilado en una tabla final?
Open(
"C:\example folder\example.pdf",
PDF Tables(
Table(
table name( "1" ),
add rows( page( 1 ), Rect( 2.0419, 0.9776, 3.1993, 1.1726 ) ),
add rows( page( 1 ), Rect( 1.2137, 3.7819, 6.3603, 3.9069 ) ),
add rows( page( 1 ), Rect( 0.8717, 3.9636, 3.0796, 4.0886 ) ),
add rows(
page( 1 ),
Rect( 0.9853, 4.1436, 3.0029, 4.2686 ),
column borders( 0.9853, 2.5172, 3.0029 )
),
add rows( page( 1 ), Rect( 4.581, 4.1436, 7.297, 4.2686 ) ),
add rows(
page( 1 ),
Rect( 0.8883, 4.4136, 4.6374, 4.5386 ),
column borders( 0.8883, 1.9603, 4.6374 )
),
add rows( page( 1 ), Rect( 0.7556, 4.7979, 7.5908, 8.2654 ) )
)
)
);
Data Table( "1" ) << Stack(
columns( :Column 3, :Column 4, :Column 5, :Column 6 ),
Source Label Column( "Label" ),
Stacked Data Column( "Data" ),
Output table("2")
);
Data Table( "2" ) << Transpose(
columns( :Data ),
Output Table( "Final" )
)
Tabla de datosScriptingRe: importar varios archivos pdfFlujo posible:
- Crear función para manejar un solo archivo pdf
- Obtener todos los archivos en el directorio directorio pdf
- Utilice el primer archivo del directorio para crear una tabla de datos de "recopilador"
- Recorre el resto de los archivos
- Concatenar tablas transpuestas a la tabla de datos del recopilador creada y cerrar después
Quizás algo como esto podría funcionar:
Names Default To Here(1);
//directory where .pdf files exist
pdfDirectory = "C:\example folder\";
//function to open stack and transpose pdf file
stackTransposePdfFile = function({filePath}, {Default Local},
dtTemp = Open(
filePath,
PDF Tables(
Table(
table name("1"),
add rows(page(1), Rect(2.0419, 0.9776, 3.1993, 1.1726)),
add rows(page(1), Rect(1.2137, 3.7819, 6.3603, 3.9069)),
add rows(page(1), Rect(0.8717, 3.9636, 3.0796, 4.0886)),
add rows(page(1), Rect(0.9853, 4.1436, 3.0029, 4.2686), column borders(0.9853, 2.5172, 3.0029)),
add rows(page(1), Rect(4.581, 4.1436, 7.297, 4.2686)),
add rows(page(1), Rect(0.8883, 4.4136, 4.6374, 4.5386), column borders(0.8883, 1.9603, 4.6374)),
add rows(page(1), Rect(0.7556, 4.7979, 7.5908, 8.2654))
)
)
);
//stack data table from pdf
dtTemp_stacked = dtTemp << Stack(
columns(:Column 3, :Column 4, :Column 5, :Column 6),
Source Label Column("Label"),
Stacked Data Column("Data"),
invisible
);
Close(dtTemp, no save); //close table created directly from pdf
//transpose table
dtTemp_transposed = dtTemp_stacked << Transpose(columns(:Data), invisible);
Close(dtTemp_stacked no save); //close stacked table
//return transposed table
return(dtTemp_transposed);
);
//list of files in directory (this assumes that there are only .pdf files)
pdfFile_list = Files In Directory(pdfDirectory);
//use the first table as "collection table"
finalDt = stackTransposePdfFile(pdfDirectory||pdfFile_list[1]);
//loop over files in pdfFile_list starting from second file
For(i = 2, i <= N Items(pdfFile_list), i++,
pdfDt = stackTransposePdfFile(pdfDirectory||pdfFile_list[i]);
finalDt << Concatenate(pdfDt, Append to first table);
Close(pdfDt, no save); //close transposed table
);
Re: importar varios archivos pdfGracias, no sé dónde estaría sin este foro. ¡Buena cosa!