Salut,
J'ai un dossier contenant plus de 100 fichiers PDF, tous présentés dans un format cohérent. Le nom de fichier de chaque PDF représente un numéro de lot que je souhaite utiliser et dans chaque PDF, il y a un tableau particulier de données que je souhaite extraire.
Mon objectif est d'extraire la même table de données pour chaque PDF puis de concaténer toutes les tables de données extraites, étiquetées par nom de fichier PDF (numéro de lot). Enfin, je veux diviser les colonnes dans le tableau concaténé et le regrouper par nom de fichier PDF pour aboutir à une table finale.
J'ai essayé de le faire manuellement et je peux accéder à la table finale dont j'ai besoin, mais cela prend beaucoup de temps car je dois ouvrir et sélectionner le tableau dans chaque PDF séparément.
Par conséquent, je me demande s'il existe un JSL qui pourra vous aider?
Je suis très novice dans le domaine des scripts, mais j'ai pu créer un script qui me donne exactement ce dont j'ai besoin pour les deux premiers fichiers 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)Je dois adapter ce script pour ouvrir tous les fichiers PDF (pas seulement les deux premiers) pour créer le tableau final de données, étiqueté par le nom du fichier PDF.
Est-ce qu'il y a quelqu'un qui peut m'aider?
Merci beaucoup,
Alicia
Si vous en avez deux qui fonctionnent, le code dans Concaténer les tableaux de données vous y mènera probablement. FilesInDirectory () peut être la fonction dont vous avez besoin.
Il existe un certain nombre d'exemples similaires; la recherche de fichiers dans le répertoire les trouvera probablement.
Demandez à nouveau si cela ne vous y mène pas, je pense que vous êtes proche.
Voici un exemple qui contient les étapes dont vous aurez besoin. Le poste de @Craige_Hales aide à comprendre comment ces choses fonctionnent.
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")
);Un grand merci @Craige_Hales et @Georg Pour votre aide. Je vais essayer et voir si je peux adapter le script. Vraiment apprécié!