Hola,
Tengo una carpeta que contiene más de 100 archivos PDF, todos dispuestos en un formato coherente. El nombre de archivo de cada PDF representa un número de lote que quiero utilizar y en cada PDF hay una tabla particular de datos que quiero extraer.
Mi objetivo es extraer la misma tabla de datos para cada PDF y luego concatenar todas las tablas de datos extraídas, etiquetadas por nombre de archivo PDF (número de lote). Finalmente, quiero dividir las columnas de la tabla concatenada y agruparlas por nombre de archivo PDF para obtener una tabla final.
Intenté hacer esto manualmente y puedo llegar a la tabla final que necesito; sin embargo, lleva mucho tiempo ya que tengo que abrir y seleccionar la tabla en cada PDF por separado.
Por lo tanto, me pregunto si hay algún JSL que pueda ayudar con esto.
Soy muy nuevo en el mundo de las secuencias de comandos, pero pude crear una secuencia de comandos que me brinda exactamente lo que necesito para los dos primeros archivos PDF:
//Opening up the first two files (Batch Number 1 & Batch Number 2) from the folder
Open(
"C:\Example folder\Batch 1.pdf",
PDF Tables(
Table(
table name( "Batch 1" ),
add rows( page( 1 ), Rect( 0.4143, 5.3995, 7.5889, 6.6781 ) )
)
)
)
;
Open(
"C:\Example folder\Batch 2.pdf",
PDF Tables(
Table(
table name( "Batch 2" ),
add rows( page( 1 ), Rect( 0.4143, 5.3995, 7.5889, 6.6781 ) )
)
)
)
;
//Concatenating the data for the first 2 batches into one table and adding a source column:
Data Table( "Batch 1" ) << Concatenate(
Data Table( "Batch 2" ),
Create source column,
Output table("Concat")
)
;
//Splitting by the concatenated table by the Characteristic column and grouping by source column (batch number) to create a Final table:
Data Table( "Concat" ) << Split(
Split By( :Characteristic ),
Split( :Value ),
Group( :Source Table ),
Remaining Columns( Drop All ),
Sort by Column Property,
Output table("Final")
)
;
//Close all other tables
Close("Batch 1", no save)
;
Close("Batch 2", no save)
;
Close("Concat", no save)Necesito adaptar este script para abrir todos los archivos PDF (no solo los dos primeros) para crear la tabla final de datos, etiquetada por el nombre del archivo PDF.
Hay alguien que pueda ayudarme?
Muchas gracias,
alicia
Muchas gracias @Craige_Hales y @Georg para su ayuda. Lo intentaré y veré si puedo adaptar el guión. ¡Muy apreciado!
A continuación se muestra un ejemplo que contiene los pasos que necesitará. el puesto de @Craige_Hales ayuda a entender cómo funcionan estas cosas.
Names Default To Here( 1 );
// Prepare a directory
tempdir = "$TEMP\pdf_test";
If( !Directory Exists( tempdir ),
Create Directory( tempdir ),
file_lst = Files In Directory( tempdir );
For( i = 1, i <= N Items( file_lst ), i++,
Delete File( tempdir || "/" || file_lst[i] )
);
);
// Open sample Table
cdt = Open( "$SAMPLE_DATA/Big Class.jmp" );
// Prepare PDF's
For( i = 1, i <= 10, i++,
jrn = cdt << Journal;
jrn << save pdf( tempdir || "/" || Char( i ) || "_Big Class.pdf" );
jrn << close window;
);
// Read PDF's
file_lst = Files In Directory( tempdir );
table_lst = {};
For( i = 1, i <= N Items( file_lst ), i++,
Insert Into( table_lst, Open( tempdir || "/" || file_lst[i], PDF All Tables() ) )
);
// Concat PDF's
If( N Items( table_lst ) > 1,
result_table = table_lst[1] << concatenate( table_lst[2 :: N Items( table_lst )], Output Table( "ResultTable" ), Create Source Column )
);
// Close single PDF's
For( i = 1, i <= N Items( table_lst ), i++,
Close( table_lst[i], noSave )
);
split_table = result_table << Split(
Split By( :sex ),
Group( :Source Table ),
Split( :age ),
Remaining Columns( Drop All ),
Sort by Column Property, output table("Split_Result")
);Si tienes dos funcionando, el código en Concatenar tablas de datos probablemente te llevará allí. FilesInDirectory() puede ser la función que necesita.
Hay varios ejemplos similares; si busca Archivos en el directorio probablemente los encontrará.
Pregunte nuevamente si eso no lo lleva allí, creo que está cerca.