使用iTextSharp以可填写的pdf动态添加图像

时间:2013-06-06 07:23:35

标签: asp.net .net pdf itextsharp

我有一个交互式PDF表单。我可以填写此表单,但我还想动态地在PDF底部添加一个图像。图像因登录用户而异。

我如何添加图片?我正在使用以下代码来创建数据表:

DataTable dt = new DataTable();
String pdfPath1 = Server.MapPath("pdfs\\transmittal2.pdf");
if (File.Exists(pdfPath1)) {
    dt = objClsTransmittal.GetTransmittal(jobid, cid);
    String comment = "Correspondence generated for " + dt.Rows[0]["Recipient"].ToString();
    var formfield = PDFHelper.GetFormFieldNames(pdfPath1);
    formfield["Enter Date"] = DateTime.Now.ToLongDateString();
    formfield["Contact Name"] = dt.Rows[0]["Recipient"].ToString();
    formfield["Enter Project Name"] = dt.Rows[0]"PropertyAddress"].ToString();
    formfield["Enter Project Number"] = dt.Rows[0]["JobID"].ToString();
    formfield["Company Name"] = dt.Rows[0]["Company"].ToString();
    formfield["Company address"] = dt.Rows[0]["Address1"].ToString();
    formfield["City State ZIP"] = dt.Rows[0]["address2"].ToString();
    formfield["User Name"] = dt.Rows[0]["Recipient"].ToString();
    formfield["Combo Box11"] = "Select from List";    
    var pdfcontent = PDFHelper.GeneratePDF(pdfPath1, formfield);
    PDFHelper.ReturnPDF(pdfcontent, "Transmittal.pdf");
}

我期待着回复。

编者注:我已经针对语言编辑了这个问题。也许我也应该删除代码片段,因为它是代码中不相关的部分。相关部分位于GeneratePDF()方法中,未在任何位置显示。在我的回答中,我添加了几行,表明可能在GeneratePDF()中完成了什么。 (Bruno Lowagie)

1 个答案:

答案 0 :(得分:1)

请查看StampStationery示例。

当你填写表格时,我猜你已经有了这样的事情:

using (PdfStamper stamper = new PdfStamper(reader, ms)) {           
    AcroFields form = stamper.AcroFields;
    form.SetField(key, value);
}

其中keyvalue是代码段中的键和值。

你现在想要的是这样的:

PdfContentByte background = stamper.GetUnderContent(pagenumber);
background.AddImage(image, x, y);

其中pagenumber是您要添加图片的网页编号,image是图片实例,xy是坐标。请注意,底部的y值低于顶部的y值。实际坐标取决于表单的CropBox值。如果没有CropBox,请使用MediaBox值。

请注意,使用GetUnderContent()表示您要在现有内容下添加图片。如果图片可以覆盖现有内容,请使用GetOverContent()