2010-01-07 12 views
3

Je suis coincé avec le problème suivant:PDF Watermark uniquement pour l'impression, programatically

Je peux tout filigrane PDF déjà, et les images à l'intérieur, tout va bien, mais maintenant je dois le filigrane apparaître lorsque le PDF est imprimé ... Est-ce possible? Comment?

que je dois faire ce programme bien sûr ...

Je suis vraiment coincé et à court de temps, toute aide sera très appréciée.

Merci!

+3

Je ne pense pas que ce soit possible. D'une part, comment allez-vous empêcher les gens d'imprimer une capture d'écran? – SLaks

+0

Comment allez-vous les empêcher d'utiliser Photoshop? –

+0

Êtes-vous sûr de vouloir faire cela? J'ai toujours pensé que l'un des points du PDF était de créer un document électronique visible sur presque toutes les plateformes et d'afficher exactement comment il serait imprimé. Avec ce dernier à l'esprit, j'inclurais un filigrane sur la vue électronique. – Jay

Répondre

1

Vous devez probablement utiliser le fait que l'écran utilise RVB et l'imprimante CMJN. Vous devriez être capable de créer deux couleurs en CMJN qui correspondent à la même valeur RVB. Ce n'est bien sûr pas suffisant contre un spécialiste déterminé.

+0

Merci beaucoup pour votre aide ... Je suppose que je ne vais pas faire ça de toute façon ... on dirait que ce n'est pas possible après tout ... Maintenant je passe du temps à étudier PDF en profondeur :). – Reinier

5

Pour les futurs lecteurs, cela est possible de le faire en enveloppant le filigrane dans un PDF layer (groupe Contenu optionnel), puis la configuration du Utilisation attribut de cette couche comme impression seulement. Voir le PDF Reference Document, Chapitre 4- Graphiques, partie 4.10- Contenu optionnel pour plus de détails.

2

Plus précisément, en utilisant iTextSharp, j'ai pu le faire fonctionner avec ce qui suit, en particulier - version pdf 1.7 et Setprint ("filigrane", true)

 string oldfile = @"c:\temp\oldfile.pdf"; 
     string newFile = @"c:\temp\newfile.pdf"; 
     PdfReader pdfReaderS = new PdfReader(oldfile); 
     Document document = new Document(pdfReaderS.GetPageSizeWithRotation(1)); 
     PdfWriter pdfWriterD = PdfWriter.GetInstance(document, new FileStream(newFile, FileMode.Create, FileAccess.Write)); 
     pdfWriterD.SetPdfVersion(PdfWriter.PDF_VERSION_1_7); 
     document.Open(); 
     PdfContentByte pdfContentByteD = pdfWriterD.DirectContent; 

     BaseFont bf = BaseFont.CreateFont(BaseFont.HELVETICA, BaseFont.CP1252, BaseFont.NOT_EMBEDDED); 

     int n = pdfReaderS.NumberOfPages; 

     string text = "UNCONTROLLED"; 

     for (int i = 1; i <= n; i++) 
     { 
      iTextSharp.text.Rectangle pageSizeS = pdfReaderS.GetPageSizeWithRotation(i); 
      float pageWidth = pageSizeS.Width/2; 
      float pageheight = pageSizeS.Height/2; 

      document.SetPageSize(pageSizeS); 
      document.NewPage(); 
      PdfImportedPage pdfImportedPage = pdfWriterD.GetImportedPage(pdfReaderS, i); 

      PdfLayer layer1 = new PdfLayer("Watermark", pdfWriterD); 
      layer1.SetPrint("Watermark", true); 
      layer1.View = false; 
      layer1.On = false; 
      layer1.OnPanel = false; 

      pdfContentByteD.BeginLayer(layer1); 
      pdfContentByteD.SetColorFill(BaseColor.RED); 
      pdfContentByteD.SetFontAndSize(bf, 30); 

      ColumnText.ShowTextAligned(pdfContentByteD, Element.ALIGN_CENTER, new Phrase(text), 300, 700, 0); 
      pdfContentByteD.EndLayer(); 

      pdfContentByteD.AddTemplate(pdfImportedPage, 0, 0);//, 0, 1, 0, 0); 

     } 
     document.Close(); 
     pdfReaderS.Close(); 
+0

iTextShazrp est une bibliothèque .NET pour la manipulation PDF. Une excellente solution - merci! Upvoted. – KeyszerS