使用itext在pdf中以签名字段动态添加图像

时间:2013-11-13 06:04:38

标签: c# pdf itextsharp

我需要一个示例代码或参考,通过使用itextsharp动态读取签名字段名称,将签名图像放置在签名字段中。图像应放在签名字段上方,并带有相应大小的签名字段..任何人都可以帮助我..

我正在尝试将签名图像放置在签名字段中,但图像不会放置在签名字段中。签名字段矩形的宽度和高度不同,如果将比例更改为适合,则图像大小会有所不同。这是我的代码:

PdfContentByte pdfContentByte = stamper.GetOverContent(1);
iTextSharp.text.Image image = iTextSharp.text.Image.GetInstance(inputImageStream);
iTextSharp.text.pdf.AcroFiel‌​ds fields = stamper.AcroFields;
IList<iTextSharp.text.pdf.AcroFields.FieldPosition> signatureArea = fields.GetFieldPositions("DoctorSign");
TextSharp.text.Rectangle rect = signatureArea.First().position;
image.ScaleAbsolute(rect.Width, rect.Height);
image.SetAbsolutePosition(rect.Left -image.ScaledWidth +(rect.Width -image.ScaledWidth )/2, rect.Bottom+ (rect.Height-image.ScaledHeight)/2 );
pdfContentByte.AddImage(image)

1 个答案:

答案 0 :(得分:1)

您可以使用PDFContentbyte添加图片。

Foll是VB .NET中的代码示例,您可以使用converter.telerik.com将其转换为c#。

    Imports iTextSharp.text
    Imports iTextSharp.text.pdf

    ' Set the File Details
    Dim fs As New FileStream("FILE_NAME", FileMode.Create, FileAccess.Write)
    Dim reader As New PdfReader(inPDF)
    Dim document As New iTextSharp.text.Document(PageSize.A4)

    ' open writer
    Dim writer As PdfWriter = PdfWriter.GetInstance(document, fs)
    document.Open()
    Dim cb As PdfContentByte = writer.DirectContent


    ' create the new page and add it to the pdf
    Dim page As PdfImportedPage = writer.GetImportedPage(reader, 1)
    cb.AddTemplate(page, 0, 0)

    'Add Image
    Dim hdImg As iTextSharp.text.Image
    hdImg = iTextSharp.text.Image.GetInstance(AppDomain.CurrentDomain.BaseDirectory & "Images\sample.png")
    Dim wid As Integer = page.Width
    hdImg.ScalePercent(50)

    hdImg.SetAbsolutePosition(30, 775)
    cb.AddImage(hdImg)

    ' close the streams
    document.Close()
    fs.Close()
    writer.Close()
    reader.Close()

此外,请注意您需要对“SetAbsolutePosition(30,775)”中图像坐标的各种组合进行位测试,以将签名设置在正确的位置。

另请注意,这里的坐标是点而不是像素。我添加了wid变量,以便您知道pdf页面的宽度是什么