我的数据库中存储了.pdf文件,并且我的数据库中存储了一个签名文件(.png)。我正在尝试使用iTextSharp将签名图像添加到.pdf文件中,并将结果显示给浏览器。
这是我的代码:
byte[] file = Repo.GetDocumentBytes(applicantApplication.ApplicationID, documentID);
byte[] signatureBytes = Repo.GetSignatureBytes((Guid)applicantApplicationID, signatureID);
iTextSharp.text.Image signatureImage = iTextSharp.text.Image.GetInstance(signatureBytes);
iTextSharp.text.Document document = new iTextSharp.text.Document();
using (System.IO.MemoryStream ms = new System.IO.MemoryStream(file, 0, file.Length, true, true))
{
PdfWriter writer = PdfWriter.GetInstance(document, ms);
document.Open();
signatureImage.SetAbsolutePosition(200, 200);
signatureImage.ScaleAbsolute(200, 50);
document.Add(signatureImage);
document.Close();
return File(ms.GetBuffer(), "application/pdf");
}
页面加载,并且有一个带有签名的.pdf,但原始文档无处可寻。看起来我正在创建一个新的.pdf文件并将图像放在那里而不是编辑旧的.pdf文件。
我已经验证原始.pdf文档正在加载到“file”变量中。我还验证了MemoryStream“ms”的长度与byte []“file”的长度相同。
答案 0 :(得分:1)
我最终在我的存储库中执行了类似的操作:
using (Stream inputPdfStream = new MemoryStream(file, 0, file.Length, true, true))
using (Stream inputImageStream = new MemoryStream(signatureBytes, 0, signatureBytes.Length, true, true))
using (MemoryStream outputPdfStream = new MemoryStream())
{
var reader = new PdfReader(inputPdfStream);
var stamper = new PdfStamper(reader, outputPdfStream);
var cb = stamper.GetOverContent(1);
iTextSharp.text.Image image = iTextSharp.text.Image.GetInstance(inputImageStream);
image.SetAbsolutePosition(400, 100);
image.ScaleAbsolute(200, 50);
cb.AddImage(image);
stamper.Close();
return outputPdfStream.GetBuffer();
}
我在StackOverflow上的其他一些答案中对其进行了调整