我正在尝试将图像插入 pdf 文件,并且此代码在没有 foreach 循环的情况下正常工作,但不适用于 foreach 循环。图像的位置(上、左)保存在数据库中,因此 foreach 循环获取图像的位置,然后动态放置它们。但是,当我使用 foreach 循环时,此代码不起作用,如果我为要插入 pdf 文件的图像提供静态位置,那么它就可以正常工作。而且我必须放置多个图像,这就是我使用 foreach 循环的原因,图像的位置将是动态的,因此必须使用 foreach 循环。此代码中的另一个问题是它只是导出 pdf 文件的第一页,而不是我想导出 pdf 文件的所有页面,即带有图像的完整 pdf 文档。这里的任何人都可以帮我解决这个问题
string pdfFile = Server.MapPath("~/files/" + arg);
ViewBag.file = pdfFile;
var getAllPostitions = db.DraggedElements.Where(l => l.doc_name == arg).ToList();
ViewBag.tag_positions = getAllPostitions;
string imagepath = Server.MapPath("~/images/sign.png");
string DEST = @"e:/TestComplete.pdf";
//string IMG = @"C:Saved//TestImage.JPG";
iTextSharp.text.pdf.PdfReader reader = new iTextSharp.text.pdf.PdfReader(pdfFile);
iTextSharp.text.Rectangle Size = reader.GetPageSizeWithRotation(1);
Document document = new Document(Size);
FileStream fs = new FileStream(DEST, FileMode.Create, FileAccess.Write);
iTextSharp.text.pdf.PdfWriter weiter = iTextSharp.text.pdf.PdfWriter.GetInstance(document, fs);
document.Open();
PdfContentByte cb = weiter.DirectContent;
PdfImportedPage page = weiter.GetImportedPage(reader, 1);
cb.AddTemplate(page, 0, 0);
iTextSharp.text.Image signImg = iTextSharp.text.Image.GetInstance(imagepath);
signImg.ScaleToFit(50, 50);
foreach (var position in getAllPostitions)
{
string topStr = position.top;
string topStr1 = topStr.Split(':')[1];
string topStr2 = topStr1.Split('p')[0];
float top = float.Parse(topStr2);
string leftStr = position.left;
string leftStr1 = leftStr.Split(':')[1];
string leftStr2 = leftStr1.Split('p')[0];
float left = float.Parse(leftStr2);
signImg.SetAbsolutePosition(top, left);
document.Add(signImg);
}
document.Close();
fs.Close();
weiter.Close();
reader.Close();