web-dev-qa-db-fra.com

Table Xref non indexée à zéro. Les numéros d'identification des objets seront corrigés. ne continuera pas

J'essaie d'ouvrir un pdf pour obtenir le nombre de pages. J'utilise PyPDF2.

Voici mon code:

def pdfPageReader(fileName):
    try:
        pdf_file = open(fileName, 'rb')
        read_pdf = PyPDF2.PdfFileReader(pdf_file, strict=True)
        number_of_pages = read_pdf.getNumPages()
        print(str(fileName) + " = " + str(number_of_pages))
        pdf_file.close()
        return number_of_pages
    except:
        return "1"

Mais alors je rencontre cette erreur:

PdfReadWarning: table Xref non indexée à zéro. Les numéros d'identification des objets seront corrigés. [pdf.py:1736]

J'ai essayé d'utiliser strict = True et strict = False, lorsqu'il est vrai, il affiche ce message, et rien, j'ai attendu 30 minutes, mais rien ne s'est produit. Quand c'est faux, ça n'affiche rien, et c'est tout, ne fais rien, si j'appuie sur ctrl+c sur le terminal (cmd, windows 10) puis il annule cette ouverture et continue (je l'exécute dans un lot de fichiers pdf). Seul 1 du lot a eu ce problème.

Mes questions sont, comment puis-je résoudre ce problème, ou comment ignorer cela, ou comment puis-je l'annuler et passer aux autres fichiers pdf?

8
JBin

Si quelqu'un a eu un problème similaire et qu'il a même planté le programme avec ce message d'erreur

Fichier "C:\Programy\Anaconda3\lib\site-packages\PyPDF2\pdf.py", ligne 1604, dans getObject% (indirectReference.idnum, indirectReference.generation, idnum, génération)) PyPDF2.utils.PdfReadError: objet attendu L'ID (14 0) ne correspond pas à la réalité (13 0); table xréf non indexée à zéro.

Cela m'a aidé à ajouter l'argument strict égal à Faux pour mon lecteur pdf

pdf_reader = PdfFileReader(input_file,strict=False)

2
Gibron

J'ai eu le même problème et j'ai cherché un moyen de le contourner. Je ne suis pas un programmeur mais en regardant la documentation sur les avertissements, il y a un morceau de code qui vous aide à éviter une telle entrave.

Bien que je ne recommanderais pas cela comme une solution, le morceau de code que j'ai utilisé à mes fins est (copié et collé à partir du document sur le lien)

import sys

if not sys.warnoptions:
    import warnings
    warnings.simplefilter("ignore")
2
cektek1