如何将可打印或不可打印的位图标记添加到PDF?

时间:2015-03-24 10:02:33

标签: c# pdf pdf-generation itextsharp digital-signature

我想在PDF文件中添加位图图章,根据实际的Acrobat Reader打印设置,该图案可以是可打印的或不可打印的。

即。当用户在AR打印对话框组合框中选择选项"文档" - 然后它不会被打印,但是当"文件和邮票"选中后会打印位图。

现在我可以创建可打印或不可打印的位图,但我无法根据用户选择创建可打印和不可打印的位图

使用PdfStamper

这可能吗?

2 个答案:

答案 0 :(得分:1)

创建戳记注释在my book的第7章中有所描述,更具体地说,在TimeTableAnnotations3示例中描述:

PdfAnnotation annotation = PdfAnnotation.createStamp(stamper.getWriter(),
    rect, "Press only", "NotForPublicRelease");
annotation.setFlags(PdfAnnotation.FLAGS_PRINT);

如果您查看打印预览,可以看到如果您打印没有标记的文档,这些注释就不会显示:

enter image description here

在C#中,代码与Java代码非常相似:

 PdfAnnotation annotation = PdfAnnotation.CreateStamp(
     stamper.Writer, rect, "Press only", "NotForPublicRelease"
 );
 annotation.Flags = PdfAnnotation.FLAGS_PRINT;

请注意,PDF查看器应至少包含以下名称的预定义图标:

  • 批准,
  • 实验,
  • NotApproved,
  • ASIS,
  • 已过期,
  • NotForPublicRelease,
  • 保密,
  • 最后,
  • 已售出,
  • 部门,
  • ForComment,
  • 绝密,
  • 草案
  • ForPublicRelease。

这些图标的外观取决于观众与观众之间的关系。

答案 1 :(得分:1)

我将在这里添加工作解决方案,因为从提供的示例中弄清楚它并不是非常简单。现在PDF文档中有一个自定义位图图章注释,点击后,会出现数字签名的属性窗口。

PdfReader reader = new PdfReader(this.inputPDF);
PdfStamper stamper = new PdfStamper(reader, fs);
PdfSignatureAppearance sap;
Rectangle stampRect = null;
//Add stamp annotation
if (StampImagePath != null && StampImagePath.Length > 0 && File.Exists(StampImagePath))
{
    Image stampImg = Image.GetInstance(stampImagePath);
    Rectangle location = new Rectangle(stampXpos, stampYpos, stampXpos + stampImg.Width, stampYpos + stampImg.Height);
    PdfAnnotation pdfStamp = PdfAnnotation.CreateStamp(
        stamper.Writer, location, null, Guid.NewGuid().ToString());                    
    stampImg.SetAbsolutePosition(0, 0);
    PdfAppearance app = stamper.GetOverContent(1).CreateAppearance(stampImg.Width, stampImg.Height);
    app.AddImage(stampImg);
    pdfStamp.SetAppearance(PdfName.N, app);
    pdfStamp.SetPage();
    pdfStamp.Flags = PdfAnnotation.FLAGS_PRINT;
    stamper.AddAnnotation(pdfStamp, 1);
    stampRect = location;
}

....
//After signing the document set visible signature to the annotation rectangle
if (stampRect!=null)
      sap.SetVisibleSignature(stampRect, 1, "SignatureESift");