2010-10-04 23 views
3

J'ai un programme en Python (en utilisant pyPDF) qui fusionne un tas de documents PDF différents. Parfois, le pdf résultant est bien, à l'exception de quelques pages vierges au milieu. Lorsque je consulte ces documents avec Acrobat Reader, un message d'erreur indiquant "données insuffisantes pour l'image" s'affiche. Quand je regarde les documents avec FoxIT Reader, je reçois des pages vierges et une image munged. La seule chose étrange à propos du PDF qui crée les pages vierges est qu'il semble être PDF Version 1.4, et PyPdf semble créer des fichiers avec PDF Version 1.3.ce qui cause "données insuffisantes pour l'image" dans un pdf

1) Est-ce que la version ressemble à la cause de mon problème?

2) Existe-t-il un moyen de faire en sorte que PyPdf s'en charge correctement?

+0

Les extraits de code, s'il vous plaît? – Almad

Répondre

1

Je suspecte que le flux XObject de l'image est mal formé. Sans accès à un fichier PDF avec le problème, tout ce que la plupart des gens peuvent faire est de deviner. Par exemple, si l'information pdf indique que l'image a 10 pixels de large, 10 pixels de haut et 8 bits par pixel, le flux doit être décompressé sur 100 octets. Si ça ne se décompresse pas, je m'attendrais à une erreur comme celle que vous voyez.

C'est probablement un bug en pypdf concernant le format d'image que vous utilisez. IIRC, il n'y a pas de bourrage de ligne de balayage en PDF et pas de limites de mots, bien que les derniers bits soient remplacés par un octet si besoin est. La confusion pourrait facilement conduire à trop d'octets, ce qui n'est pas le problème ici.

Il peut également s'agir d'un mauvais espace de couleur. Si vous avez une image couleur indexée (gif), et qu'ils la traduisent à mi-chemin vers une image RVB, mais utilisent les octets de couleur indexés d'origine, vous obtiendrez un flux qui peut s'attendre à n * 3 bits par pixel, mais seulement avoir n bits par pixel.

Il est possible que ce soit un ancien bug qui a été corrigé dans pypdf. Utilisez-vous la version actuelle?

2

J'ai eu ce problème, et j'ai pu le comprendre en regardant le pdf original côte à côte avec le PyPDF dans un éditeur hexadécimal.

Le problème semble être que PyPDF laisse effectivement un octet - il semble que probablement le premier octet dans chaque flux d'image est manquant. Lorsque j'ai ajouté les octets dans le fichier PyPDF, le pdf s'est bien ouvert sans l'erreur.