我卡具有以下问题:PDF水印只进行打印,编程
我已经水印任何PDF,以及里面的图片,一切就OK了,但现在我需要的水印只显示在PDF起来打印...这可能吗?怎么样?
我必须这样做编程的过程...
我真的被卡住,时间不多了,任何帮助将不胜感激。
谢谢!
我卡具有以下问题:PDF水印只进行打印,编程
我已经水印任何PDF,以及里面的图片,一切就OK了,但现在我需要的水印只显示在PDF起来打印...这可能吗?怎么样?
我必须这样做编程的过程...
我真的被卡住,时间不多了,任何帮助将不胜感激。
谢谢!
您应该利用屏幕使用RGB和打印机CMYK这一事实。您应该能够在CMYK中创建映射到相同RGB值的两种颜色。对于一个坚定的专家来说,这当然是不够的。
非常感谢您的帮助......我想我不会这样做......看起来毕竟是不可能的...... 现在我花了一些时间深入学习PDF格式:)。 – Reinier 2010-01-09 11:40:28
对于未来的读者,这是有可能通过包装在(可选内容组)水印做,然后配置该层作为打印只的使用属性。请参阅PDF Reference Document,第4章 - 图形,部分4.10-可选内容了解更多详情。
bOnScreen参数确定在计算机屏幕上查看PDF时是否显示水印,bOnPrint确定在打印PDF时是否显示水印。
- https://acrobatusers.com/tutorials/watermarking-a-pdf-with-javascript
具体而言,使用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();
iTextShazrp是一个用于PDF操作的.NET库。一个好的解决方案 - 谢谢! Upvoted。 – KeyszerS 2015-09-19 07:09:21
我不认为这是可能的。首先,你将如何防止人们打印截图? – SLaks 2010-01-07 19:23:19
你将如何防止他们使用Photoshop? – 2010-01-07 19:26:30
您确定要这样做吗?我一直认为PDF的一个要点是要创建一个几乎可以在任何平台上查看的电子文档,并准确显示它将如何打印。考虑到后者,我会在电子视图中加入水印。 – Jay 2010-01-07 19:29:12