2010-01-07 8 views
3

программно я застрял со следующей проблемой:PDF Watermark только для печати,

Я могу WaterMark любой PDF уже и изображения внутри, все в порядке, но теперь мне нужно водяной знак только появляется, когда PDF печатается ... Возможно ли это? Как?

мне нужно сделать это программно конечно ...

Я действительно застрял и не хватает времени, любая помощь будет высоко оценен.

Спасибо!

+3

Я не думаю, что это возможно. Во-первых, как вы можете запретить людям печатать скриншот? – SLaks

+0

Как вы можете помешать им использовать Photoshop? –

+0

Вы уверены, что хотите это сделать? Я всегда думал, что одной из точек PDF является создание электронного документа, который можно просматривать практически на любой платформе, и отображает, как именно он будет печататься. Имея это в виду, я бы включил водяной знак на электронный взгляд. – Jay

ответ

1

Возможно, вам следует воспользоваться тем фактом, что на экране используются RGB и принтер CMYK. Вы должны иметь возможность создавать два цвета в CMYK, которые сопоставляются с тем же значением RGB. Этого, конечно, недостаточно для определенного специалиста.

+0

Большое спасибо за вашу помощь ... Думаю, я не сделаю этого в любом случае ... похоже, что это невозможно в конце концов ... Теперь я трачу некоторое время на изучение PDF глубоко :). – Reinier

5

Для будущих читателей, это можно сделать путем оборачивания водяного знака в PDF layer (опционно Content Group), то настройка Использование атрибут этого слоя как Print-Only. См. Раздел PDF Reference Document, глава 4- Графика, часть 4.10- Дополнительный контент для получения более подробной информации.

2

В частности, с помощью itextsharp, я был в состоянии заставить его работать со следующими, в частности - PDF версия 1,7 и SetPrint ("Водяной знак", правда)

 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 - это библиотека .NET для Манипуляции PDF. Отличное решение - спасибо! Upvoted. – KeyszerS

Смежные вопросы