2011-03-11 4 views
2

Je dois modifier les informations d'en-tête de plusieurs fichiers PDF. Ce que je voudrais accomplir est de supprimer toutes les données d'en-tête avant %PDF-X.Y.Z. Ce que j'ai proposé comme solution possible était d'ouvrir le PDF en mode binaire, de lire chaque caractère jusqu'à ce que %PDF-X.Y.Z soit trouvé. Continuez ensuite à lire le reste du flux et enregistrez-le dans un nouveau fichier. J'ai pensé de cette façon que je finirai avec une copie binaire exacte du PDF, juste avec différentes informations d'en-tête.Modifier ou supprimer les informations d'en-tête PDF dans C

Quelle est la manière la plus facile/la meilleure de faire cela en C? Y at-il des bibliothèques disponibles qui pourraient m'aider à faire cela? Je suis également intéressé par différentes approches pour résoudre ce problème.

Merci.

Répondre

2

En supposant que le dépouillement du début du fichier résout vraiment votre problème, tout ce dont vous avez besoin est fopen, fread, fwrite et fclose.

Vous ouvrez le fichier pour le lire en mode binaire. Lisez jusqu'à ce que vous trouviez la chaîne magique% PDF. Ouvrez le fichier de sortie pour l'écriture binaire. Ecrivez dans ce fichier, en commençant par votre nouvelle chaîne% PDF. Lorsque vous avez fini d'écrire, fermez les deux fichiers.

+0

Ok, donc je suis sur la bonne voie. Lorsque le fichier était ouvert en mode binaire, quelle est la meilleure façon de lire les octets après octets avec 'fread' et de comparer la valeur à un caractère? – Dominik

+0

L'approche naïve consiste à le lire dans un tampon, puis à avancer dans l'octet de la mémoire tampon par octet en appelant memcmp, afin de rechercher une correspondance. Il y a probablement une fonction de bibliothèque pour cela. Ce serait plus facile en C++, et trivial dans un langage encore plus haut niveau! –

+0

Je vois. Lire le fichier entier dans un tampon est probablement un peu dangereux dans mon cas car les fichiers PDF pourraient avoir plusieurs Go de taille. J'ai choisi C parce que je pensais que c'était probablement le moyen le plus simple de manipuler/travailler avec des données binaires. Donc vous pensez que je ferais mieux d'utiliser par exemple C# ou Python? – Dominik

3

En fait, vous pouvez jeter toutes les informations avant la balise %PDF, MAIS vous rendez la table xref à la fin du fichier invalide. Cette table contient des références de décalage aux objets PDF.

Le moyen le plus simple était: retirez la pièce avant %PDF et comptez, combien vous trow away, réduire les valeurs dans xref selon.

+0

Vous pouvez également remplacer le contenu avant le% PDF avec des espaces! –

+0

Merci d'avoir signalé cela. – Dominik

+0

@David Heffernan: Oui, si le montant n'est pas trop grand, il peut être acceptable, mais peu sale, solution – p4553d

Questions connexes