En Python 3, j'ai un PDF "Ativos_Fevereiro_2018_servidores_rj.pdf" avec 6 041 pages. Je suis sur une machine avec Ubuntu
Sur chaque page, il y a du texte en haut de la page, deux lignes. Et sous un tableau, avec en-tête et deux colonnes. Chaque tableau en 36 lignes, moins sur la dernière page
À la fin de chaque page, après les tableaux, il y a aussi une ligne de texte
Je veux créer un CSV à partir de ce PDF, en ne considérant que les tableaux des pages. Et ignorer les textes avant et après les tableaux
Au départ, j'ai testé le tabula-py. Mais il génère un fichier vide:
from tabula import convert_into
convert_into("Ativos_Fevereiro_2018_servidores_rj.pdf", "test_s.csv", output_format="csv")
S'il vous plaît, quelqu'un connaît-il une autre méthode pour utiliser tabula-py pour ce type de demande?
Ou une autre façon de convertir PDF en CSV dans ce type de fichier?
Ok, j'ai trouvé le problème: vous devez définir spreadsheet=True
et conserver le codage utf-8:
df = tabula.read_pdf("Ativos_Fevereiro_2018_servidores_rj.pdf", encoding='utf-8', spreadsheet=True, pages='1-6041')
Dans l'image ci-dessous, je l'ai testé avec seulement la première page (car votre fichier est énorme):
Vous pouvez ensuite enregistrer le DataFrame au format csv:
df.to_csv('otuput.csv', encoding='utf-8')
Ok, l'erreur pourrait être un problème de mémoire Java. Pour le rendre plus rapide, j'ai ajouté l'option pages
. Et il y avait aussi un problème d'encodage, donc encoding='utf-8'
ajouté à l'export csv. Si vous continuez à rencontrer l'erreur Java, essayez de l'analyser en morceaux, par ex. pages='1-300'
. Je viens de faire tous les 6041 (sur une machine de 64 Go RAM), cela a bien fonctionné.