2009-12-02 8 views
6

Je n'arrive pas à trouver comment ajouter une image externe (référencée par une URL) à un fichier PDF en utilisant iText. Est-ce que ce genre de chose est possible? La spécification PDF en 7.1.5 indique que vous devriez pouvoir référencer un PDF via une URL en utilisant une spécification d'URL. Voilà ce que j'ai jusqu'à présent:Ajout d'images externes au format PDF en utilisant iText

PdfFileSpecification pdfSpec = 
    PdfFileSpecification.url(writer, "http://www.someurl.com/test.jpg"); 

StringBufferInputStream sbis = new StringBufferInputStream(""); 
PdfStream dict = new PdfStream(sbis, writer); 
dict.put(PdfName.FILTER, PdfName.DCTDECODE) 
dict.put(PdfName.TYPE, PdfName.XOBJECT); 
dict.put(PdfName.SUBTYPE, PdfName.IMAGE); 
dict.put(PdfName.WIDTH, new PdfNumber(100)); 
dict.put(PdfName.HEIGHT, new PdfNumber(100)); 
dict.put(PdfName.BITSPERCOMPONENT, new PdfNumber(8)); 
dict.put(PdfName.LENGTH, new PdfNumber(0)); 
dict.put(PdfName.F, pdfSpec); 

PdfIndirectObject img = writer.addToBody(dict); 

Je sais que je dois encore vous assurer que l'espace de couleur est ajoutée et d'autres choses, mais ma principale préoccupation est en ce moment en fait obtenir cette image dans le corps du document . Je ne peux pas comprendre comment faire ceci ... il semble que je ne peux pas obtenir une référence à un PdfPage ou au dictionnaire de ressources ou n'importe quoi. Est-ce possible en utilisant iText?

En note, cet exercice est inutile si je reçois un avertissement de sécurité lorsque la vue essaie de charger l'image. Est-ce que quelqu'un sait si c'est le cas?

+0

Egalement - si ce type d'opération de bas niveau n'est pas possible dans iText, y a-t-il une autre bibliothèque PDF qui facilite cela? – MikeQ

+0

Basé sur votre commentaire ci-dessous, ce que vous essayez vraiment de faire est de suivre quand un document est ouvert par un utilisateur. Voici un exemple d'ajout de code pour passer un appel actif vers une URL: http://stackoverflow.com/questions/8099927/tracking-code-into-a-pdf-or-postscript-file – CobaltBlue

Répondre

6

Le contenu externe est décrit dans la spécification PDF, mais presque aucun processeur PDF ne les supporte réellement. À ce jour, Acrobat 9 prend en charge cette fonctionnalité, mais je serais très prudent avec cette fonctionnalité: vos clients ou utilisateurs ne pourront peut-être pas voir le contenu référencé.

+1

Hmm, merci beaucoup , c'est utile. Ce que j'essaie vraiment de faire, c'est juste obtenir le document pour contacter un serveur en arrière-plan (allait juste intégrer une image 1px). Je travaille avec un client qui veut générer des documents sensibles pour ses clients et détecter s'ils sont copiés tout autour. – MikeQ

+0

... et j'ai rapidement découvert que le lecteur Adobe avait des protections contre ce genre de choses depuis la version 7 (il affiche un avertissement de sécurité, ce qui est une bonne chose). – MikeQ