private void CreateBlankN0() { n0 = new PdfFormXObject(new Rectangle(100, 100)); n0.MakeIndirect(document); PdfCanvas canvas = new PdfCanvas(n0, document); canvas.WriteLiteral("% DSBlank\n"); }
/// <summary>Get Layer 2 of the appearance.</summary> /// <returns>layer 2</returns> public virtual PdfFormXObject GetLayer2() { if (n2 == null) { n2 = new PdfFormXObject(rect); n2.MakeIndirect(document); } return(n2); }
/// <summary>Get Layer 0 of the appearance.</summary> /// <returns>layer 0</returns> public virtual PdfFormXObject GetLayer0() { if (n0 == null) { n0 = new PdfFormXObject(rect); n0.MakeIndirect(document); } return(n0); }
/// <summary>Constructs appearance (top-level) for a signature.</summary> /// <remarks> /// Constructs appearance (top-level) for a signature. /// <p> /// Consult <A HREF="http://partners.adobe.com/asn/developer/pdfs/tn/PPKAppearances.pdf">PPKAppearances.pdf</A> /// for further details. /// </remarks> /// <returns>a top-level signature appearance</returns> /// <exception cref="System.IO.IOException"/> protected internal virtual PdfFormXObject GetAppearance() { PdfCanvas canvas; if (IsInvisible()) { PdfFormXObject appearance = new PdfFormXObject(new Rectangle(0, 0)); appearance.MakeIndirect(document); return(appearance); } if (n0 == null && !reuseAppearance) { CreateBlankN0(); } if (n2 == null) { n2 = new PdfFormXObject(rect); n2.MakeIndirect(document); String text; if (layer2Text == null) { StringBuilder buf = new StringBuilder(); buf.Append("Digitally signed by "); String name = null; CertificateInfo.X500Name x500name = CertificateInfo.GetSubjectFields((X509Certificate)signCertificate); if (x500name != null) { name = x500name.GetField("CN"); if (name == null) { name = x500name.GetField("E"); } } if (name == null) { name = ""; } buf.Append(name).Append('\n'); buf.Append("Date: ").Append(SignUtils.DateToString(signDate)); if (reason != null) { buf.Append('\n').Append(reasonCaption).Append(reason); } if (location != null) { buf.Append('\n').Append(locationCaption).Append(location); } text = buf.ToString(); } else { text = layer2Text; } if (image != null) { if (imageScale == 0) { canvas = new PdfCanvas(n2, document); canvas.AddImage(image, rect.GetWidth(), 0, 0, rect.GetHeight(), 0, 0); } else { float usableScale = imageScale; if (imageScale < 0) { usableScale = Math.Min(rect.GetWidth() / image.GetWidth(), rect.GetHeight() / image.GetHeight()); } float w = image.GetWidth() * usableScale; float h = image.GetHeight() * usableScale; float x = (rect.GetWidth() - w) / 2; float y = (rect.GetHeight() - h) / 2; canvas = new PdfCanvas(n2, document); canvas.AddImage(image, w, 0, 0, h, x, y); } } PdfFont font; if (layer2Font == null) { font = PdfFontFactory.CreateFont(); } else { font = layer2Font; } float size = layer2FontSize; Rectangle dataRect = null; Rectangle signatureRect = null; if (renderingMode == PdfSignatureAppearance.RenderingMode.NAME_AND_DESCRIPTION || renderingMode == PdfSignatureAppearance.RenderingMode .GRAPHIC_AND_DESCRIPTION && this.signatureGraphic != null) { if (rect.GetHeight() > rect.GetWidth()) { signatureRect = new Rectangle(MARGIN, rect.GetHeight() / 2, rect.GetWidth() - 2 * MARGIN, rect.GetHeight() / 2); dataRect = new Rectangle(MARGIN, MARGIN, rect.GetWidth() - 2 * MARGIN, rect.GetHeight() / 2 - 2 * MARGIN); } else { // origin is the bottom-left signatureRect = new Rectangle(MARGIN, MARGIN, rect.GetWidth() / 2 - 2 * MARGIN, rect.GetHeight() - 2 * MARGIN ); dataRect = new Rectangle(rect.GetWidth() / 2 + MARGIN / 2, MARGIN, rect.GetWidth() / 2 - MARGIN, rect.GetHeight () - 2 * MARGIN); } } else { if (renderingMode == PdfSignatureAppearance.RenderingMode.GRAPHIC) { if (signatureGraphic == null) { throw new InvalidOperationException(); } /*MessageLocalization.getComposedMessage("a.signature.image.should.be.present.when.rendering.mode.is.graphic.only")*/ signatureRect = new Rectangle(MARGIN, MARGIN, rect.GetWidth() - 2 * MARGIN, rect.GetHeight() - 2 * MARGIN); } else { // take all space available dataRect = new Rectangle(MARGIN, MARGIN, rect.GetWidth() - 2 * MARGIN, rect.GetHeight() * (1 - TOP_SECTION ) - 2 * MARGIN); } } switch (renderingMode) { case PdfSignatureAppearance.RenderingMode.NAME_AND_DESCRIPTION: { String signedBy = CertificateInfo.GetSubjectFields((X509Certificate)signCertificate).GetField("CN"); if (signedBy == null) { signedBy = CertificateInfo.GetSubjectFields((X509Certificate)signCertificate).GetField("E"); } if (signedBy == null) { signedBy = ""; } canvas = new PdfCanvas(n2, document); Paragraph paragraph = new Paragraph(signedBy).SetFont(font).SetFontSize(layer2FontSize).SetMargin(0).SetMultipliedLeading (0.9f); new iText.Layout.Canvas(canvas, document, signatureRect).Add(paragraph); break; } case PdfSignatureAppearance.RenderingMode.GRAPHIC_AND_DESCRIPTION: { if (signatureGraphic == null) { throw new InvalidOperationException(); } /*MessageLocalization.getComposedMessage("a.signature.image.should.be.present.when.rendering.mode.is.graphic.and.description")*/ float imgWidth = signatureGraphic.GetWidth(); if (imgWidth == 0) { imgWidth = signatureRect.GetWidth(); } float imgHeight = signatureGraphic.GetHeight(); if (imgHeight == 0) { imgHeight = signatureRect.GetHeight(); } float multiplierH = signatureRect.GetWidth() / signatureGraphic.GetWidth(); float multiplierW = signatureRect.GetHeight() / signatureGraphic.GetHeight(); float multiplier = Math.Min(multiplierH, multiplierW); imgWidth *= multiplier; imgHeight *= multiplier; float x = signatureRect.GetRight() - imgWidth; float y = signatureRect.GetBottom() + (signatureRect.GetHeight() - imgHeight) / 2; canvas = new PdfCanvas(n2, document); canvas.AddImage(signatureGraphic, imgWidth, 0, 0, imgHeight, x, y); break; } case PdfSignatureAppearance.RenderingMode.GRAPHIC: { float imgWidth_1 = signatureGraphic.GetWidth(); if (imgWidth_1 == 0) { imgWidth_1 = signatureRect.GetWidth(); } float imgHeight_1 = signatureGraphic.GetHeight(); if (imgHeight_1 == 0) { imgHeight_1 = signatureRect.GetHeight(); } float multiplierH_1 = signatureRect.GetWidth() / signatureGraphic.GetWidth(); float multiplierW_1 = signatureRect.GetHeight() / signatureGraphic.GetHeight(); float multiplier_1 = Math.Min(multiplierH_1, multiplierW_1); imgWidth_1 *= multiplier_1; imgHeight_1 *= multiplier_1; float x_1 = signatureRect.GetLeft() + (signatureRect.GetWidth() - imgWidth_1) / 2; float y_1 = signatureRect.GetBottom() + (signatureRect.GetHeight() - imgHeight_1) / 2; canvas = new PdfCanvas(n2, document); canvas.AddImage(signatureGraphic, imgWidth_1, 0, 0, imgHeight_1, x_1, y_1); break; } } if (renderingMode != PdfSignatureAppearance.RenderingMode.GRAPHIC) { canvas = new PdfCanvas(n2, document); Paragraph paragraph_1 = new Paragraph(text).SetFont(font).SetFontSize(layer2FontSize).SetMargin(0).SetMultipliedLeading (0.9f); new iText.Layout.Canvas(canvas, document, dataRect).Add(paragraph_1); } } int rotation = document.GetPage(page).GetRotation(); Rectangle rotated = new Rectangle(rect); if (topLayer == null) { topLayer = new PdfFormXObject(rotated); topLayer.MakeIndirect(document); float scale = Math.Min(rect.GetWidth(), rect.GetHeight()) * 0.9f; float x = (rect.GetWidth() - scale) / 2; float y = (rect.GetHeight() - scale) / 2; scale /= 100; canvas = new PdfCanvas(topLayer, document); if (rotation == 90) { canvas.ConcatMatrix(0, 1, -1, 0, rect.GetHeight(), 0); } else { if (rotation == 180) { canvas.ConcatMatrix(-1, 0, 0, -1, rect.GetWidth(), rect.GetHeight()); } else { if (rotation == 270) { canvas.ConcatMatrix(0, -1, 1, 0, 0, rect.GetWidth()); } } } if (reuseAppearance) { PdfAcroForm acroForm = PdfAcroForm.GetAcroForm(document, true); PdfFormField field = acroForm.GetField(fieldName); PdfStream stream = field.GetWidgets()[0].GetAppearanceDictionary().GetAsStream(PdfName.N); PdfFormXObject xobj = new PdfFormXObject(stream); if (stream != null) { topLayer.GetResources().AddForm(xobj, new PdfName("n0")); PdfCanvas canvas1 = new PdfCanvas(topLayer, document); canvas1.AddXObject(xobj, 1, 0, 0, 1, 0, 0); } else { reuseAppearance = false; if (n0 == null) { CreateBlankN0(); } } } if (!reuseAppearance) { topLayer.GetResources().AddForm(n0, new PdfName("n0")); PdfCanvas canvas1 = new PdfCanvas(topLayer, document); canvas1.AddXObject(n0, 1, 0, 0, 1, 0, 0); } topLayer.GetResources().AddForm(n2, new PdfName("n2")); PdfCanvas canvas1_1 = new PdfCanvas(topLayer, document); canvas1_1.AddXObject(n2, 1, 0, 0, 1, 0, 0); } PdfFormXObject napp = new PdfFormXObject(rotated); napp.MakeIndirect(document); napp.GetResources().AddForm(topLayer, new PdfName("FRM")); canvas = new PdfCanvas(napp, document); canvas.AddXObject(topLayer, 0, 0); return(napp); }