0

我需要通过使用 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)
4

1 回答 1

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 页面的宽度

于 2013-11-13T07:53:59.067 回答