2017-10-10 7 views
1

Le problème est le même que celui rapporté here.Le PDF d'iText échoue avec le message "La clé de dictionnaire endstream n'est pas un nom"

J'ai pris this image et converti en this PDF utilisant GraphicsMagick v1.3.26 (build sur 4/7/2017):

gm convert itext_banner_InvalidPdfException.jpg itext_banner_InvalidPdfException.pdf

Lorsque je tente de le lire avec iText v5.5.12 je reçois la exception suivante:

java -cp itextpdf-5.5.12.jar com.itextpdf.text.pdf.parser.PdfContentReaderTool itext_banner_InvalidPdfException.pdf 
com.itextpdf.text.exceptions.InvalidPdfException: Rebuild failed: Dictionary key endstream is not a name. at file pointer 1197; Original message: Dictionary key endstream is not a name. at file pointer 1197 
    at com.itextpdf.text.pdf.PdfReader.readPdf(PdfReader.java:764) 
    at com.itextpdf.text.pdf.PdfReader.<init>(PdfReader.java:197) 
    at com.itextpdf.text.pdf.PdfReader.<init>(PdfReader.java:235) 
    at com.itextpdf.text.pdf.PdfReader.<init>(PdfReader.java:223) 
    at com.itextpdf.text.pdf.PdfReader.<init>(PdfReader.java:213) 
    at com.itextpdf.text.pdf.parser.PdfContentReaderTool.listContentStream(PdfContentReaderTool.java:200) 
    at com.itextpdf.text.pdf.parser.PdfContentReaderTool.main(PdfContentReaderTool.java:249) 

questions:

  • Qu'est-ce qui ne va pas avec PDF? Il semble qu'il y ait un problème dans GhostScript qui est indirectement utilisé par GraphicsMagick.
  • Lorsque je l'ouvre avec iText RUPS v5.8.8, il n'imprime aucun avertissement à Console tab. Cela signifie-t-il qu'il est valable du point de vue iText RUPS?

Répondre

1

Votre PDF contient cet objet cassé:

11 0 obj 
<< 

endstream 
endobj 

L'ouverture << est fermée par un endstream. Cela ne correspond pas.

Si cet objet était censé être un simple dictionnaire, il devrait ressembler à ceci:

11 0 obj 
<< 
    [a reasonable number of dictionary entries] 
>> 
endobj 

Si cet objet était censé être un cours d'eau, il devrait ressembler à ceci:

11 0 obj 
<< 
    [a reasonable number of dictionary entries] 
>> 
stream 
    [stream data] 
endstream 
endobj 

BTW, l'objet en question n'est référencé à partir d'aucun autre objet dans le PDF. Si vous ouvrez le PDF dans un PdfReader en mode partiel, le problème sera ignoré.

+0

Savez-vous pourquoi iText RUPS ne le signale pas? Je pense qu'il a été conçu aussi pour cela: récupérer la structure cassée mais aussi la signaler. –

+0

Je verrai plus tard. Mais je ne m'attendrais pas à ce que RUPS gère spécifiquement cette erreur. – mkl