31 votes

Suppression d'objets PDF invisibles avec iTextSharp

Est possible d'utiliser iTextSharp pour supprimer à partir d'un document PDF d'objets qui ne sont pas visibles (ou au moins ne s'affiche pas)?

Plus de détails:

1) Ma source est une page PDF contenant des images et du texte (peut-être que certains vectoriel) et les polices incorporées.

2) Il y a une interface pour la conception de multiples cultures cases".

3) je dois générer un fichier PDF qui contient seulement ce qui est à l'intérieur de la culture des boîtes. Autre chose doit être retiré du document final (en effet, je peux accepter le contenu qui est à moitié à l'intérieur et à moitié à l'extérieur, mais ce n'est pas l'idéal et il ne doit pas apparaître de toute façon).

Ma solution pour l'instant:

J'ai réussi à développer une solution qui crée de nouveaux temporaire de documents, chacun contenant le contenu de chaque zone de recadrage (à l'aide de l'écrivain.GetImportedPage et contentByte.AddTemplate à une page qui est exactement la taille de la zone de recadrage). Puis-je créer le document final et répétez le processus, à l'aide de la AddTemplate méthode de la position de chaque "recadrée page" à la page finale.

Cette solution a 2 gros inconvénients:

  • la taille du document est la [taille d'origine] * [nombre de cultures de cases], puisque la totalité de la page est là, estampillé de nombreuses fois! (invisible, mais il est là)
  • le texte invisible peut encore être consulté en sélectionnant tout (CTRL+A) dans Reader et collé.

Donc, je pense que j'ai besoin de parcourir les objets PDF, de détecter si elle est visible ou non, et de le supprimer. Au moment de la rédaction, je suis en train d'utiliser pdfReader.GetPdfObject.

Merci pour l'aide.

1voto

user976188 Points 61

Si le PDF que vous essayez est un modèle / prédéfini / corrigé, vous pouvez supprimer cet objet en appelant RemoveField.

 PdfReader pdfReader = new PdfReader(../Template_Path.pdf"));
PdfStamper pdfStamperToPopulate = new PdfStamper(pdfReader, new FileStream(outputPath, FileMode.Create));
AcroFields pdfFormFields = pdfStamperToPopulate.AcroFields;
pdfFormFields.RemoveField("fieldNameToBeRemoved");
 

1voto

نرخ یاب Points 209
PdfReader pdfReader = new PdfReader(../Template_Path.pdf"));
PdfStamper pdfStamperToPopulate = new PdfStamper(pdfReader, new FileStream(outputPath, FileMode.Create));
AcroFields pdfFormFields = pdfStamperToPopulate.AcroFields;
pdfFormFields.RemoveField("fieldNameToBeRemoved");

1voto

HABJAN Points 5681

Oui, c'est possible. Vous devez analyser pdf le contenu de la page d'octets à PdfObjects, les stocker sur la mémoire, supprimer unvanted PdfObject, de construire le contenu Pdf à partir de PdfObject est de retour pour un contenu pdf octets, remplacer le contenu de la page dans PdfReader juste avant d'importer la page via PdfWriter.

Je vous recommande de consulter ce: http://habjan.blogspot.com/2013/09/proof-of-concept-converting-pdf-files.html

De l'échantillon à partir du lien que met en œuvre le contenu Pdf octets de l'analyse, la construction de sauvegarde de PdfObjec, remplaçant PdfReader contenu de la page octets...

0voto

B2K Points 919

Avez-vous essayé d'utiliser un IRenderListener? Vous pouvez ajouter de manière sélective uniquement les éléments du nouveau fichier PDF qui se trouvent dans les régions de recadrage en examinant les objets StartPoint et EndPoint ou Area des objets TextRenderInfo ou ImageRenderInfo.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X