c# - MVC中的iTextSharp,如何在pdf的第3页上添加自定义x,y边距的图像?
问题描述
我正在使用 .NET 平台上的 iTextSharp 在 MVC 项目中创建 PDF。我正在“下载 PDF”功能中发送一个 HTML div,并使用 iTextSharp 类从 c# 代码添加图像,但现在我想在第 3 页上添加一个图像,但不幸的是我无法做到这一点。请帮我。
请找到我为在第一页、最后一页添加图像而编写的以下代码以及在每页上添加图像的循环...(但我不能仅在第三页上添加图像)...
using (MemoryStream stream = new System.IO.MemoryStream())
{
string Grid = GridHtml.Replace("<br>", "\n\r");
StringReader sr = new StringReader(Grid);
iTextSharp.text.Document pdfDoc = new iTextSharp.text.Document(PageSize.A4, 10f, 10f, 100f, 0f);
pdfDoc.SetMargins(50f, 50f, 90f, 0f);
PdfWriter writer = PdfWriter.GetInstance(pdfDoc, stream);
MyEvent events = new MyEvent();
writer.PageEvent = events;
pdfDoc.Open();
string imageURL1 = Server.MapPath("~/UploadedFiles/Calibehr.png");
iTextSharp.text.Image jpg12 = iTextSharp.text.Image.GetInstance(imageURL1);
////Resize image depend upon your need
jpg12.ScaleToFit(140f, 120f);
jpg12.SpacingBefore = 10f;
//////Give some space after the image
jpg12.SpacingAfter = 1f;
jpg12.Alignment = Element.ALIGN_CENTER;
jpg12.SetAbsolutePosition(40, 750);
pdfDoc.Add(jpg12);
if ((fc["hdnFormatType"] != "ManageService"))
{
string imageURL3 = Server.MapPath("~/UploadedFiles/Swati-Sign.png");
iTextSharp.text.Image jpgSign = iTextSharp.text.Image.GetInstance(imageURL3);
////Resize image depend upon your need
jpgSign.ScaleToFit(140f, 120f);
jpgSign.SpacingBefore = 10f;
//////Give some space after the image
jpgSign.SpacingAfter = 1f;
jpgSign.Alignment = Element.ALIGN_LEFT;
jpgSign.SetAbsolutePosition(40, 160);
//jpg12.
pdfDoc.Add(jpgSign);
}
string imageURL2 = Server.MapPath("~/UploadedFiles/footer.jpg");
iTextSharp.text.Image jpgFooter = iTextSharp.text.Image.GetInstance(imageURL2);
////Resize image depend upon your need
jpgFooter.ScaleToFit(140f, 120f);
jpgFooter.SpacingBefore = 10f;
//////Give some space after the image
jpgFooter.SpacingAfter = 1f;
jpgFooter.Alignment = Element.ALIGN_LEFT;
jpgFooter.ScaleAbsoluteWidth(510);
jpgFooter.ScaleAbsoluteHeight(70);
jpgFooter.SetAbsolutePosition(40, 0);
//jpg12.
pdfDoc.Add(jpgFooter);
XMLWorkerHelper.GetInstance().ParseXHtml(writer, pdfDoc, sr);
string imageURL4 = Server.MapPath("~/UploadedFiles/Swati-Sign.png");
iTextSharp.text.Image jpgFooterSign = iTextSharp.text.Image.GetInstance(imageURL4);
////Resize image depend upon your need
jpgFooterSign.ScaleToFit(140f, 120f);
jpgFooterSign.SpacingBefore = 10f;
//////Give some space after the image
jpgFooterSign.SpacingAfter = 1f;
jpgFooterSign.Alignment = Element.ALIGN_LEFT;
if ((fc["hdnFormatType"] == "ManageService"))
{
jpgFooterSign.SetAbsolutePosition(20, 150);
}
else
{
jpgFooterSign.SetAbsolutePosition(20, 450);
}
writer.DirectContent.AddImage(jpgFooterSign, false);
pdfDoc.Close();
return File(stream.ToArray(), "application/pdf", CandName + "-" + empId + ".pdf");
}
}
解决方案
试试这个:- 设置你想要的位置。
public void AddImage(int pageNumber)
{
if (pageNumber > 0)
{
string pdfTemplate =
@"D:\Input.pdf";
string newFile = @"D:\Output.pdf";
PdfReader pdfReader = new PdfReader(pdfTemplate);
PdfStamper pdfStamper = new PdfStamper(pdfReader, new FileStream(
newFile, FileMode.Create));
AcroFields pdfFormFields = pdfStamper.AcroFields;
string chartLoc = string.Empty;
chartLoc = @"C:\img.png";
iTextSharp.text.Image chartImg = iTextSharp.text.Image.GetInstance(chartLoc);
iTextSharp.text.pdf.PdfContentByte underContent;
iTextSharp.text.Rectangle rect;
try
{
Single X, Y; int pageCount = 0;
rect = pdfReader.GetPageSizeWithRotation(1);
if (chartImg.Width > rect.Width || chartImg.Height > rect.Height)
{
chartImg.ScaleToFit(rect.Width, rect.Height);
X = (rect.Width - chartImg.ScaledWidth) / 2;
Y = (rect.Height - chartImg.ScaledHeight) / 2;
}
else
{
X = (rect.Width - chartImg.Width) / 2;
Y = (rect.Height - chartImg.Height) / 2;
}
chartImg.SetAbsolutePosition(X, Y);
pageCount = pdfReader.NumberOfPages;
//Below to add image to all pages
//for (int i = 1; i < pageCount; i++)
//{
// underContent = pdfStamper.GetOverContent(i);//.GetUnderContent(i);
// underContent.AddImage(chartImg);
//}
if (pageCount >= pageNumber)
{
underContent = pdfStamper.GetOverContent(pageNumber);//.GetUnderContent(i);
underContent.AddImage(chartImg);
}
pdfStamper.Close();
pdfReader.Close();
}
catch (Exception ex)
{
throw ex;
}
}
}
推荐阅读
- python - 如何使用python在循环中明智地使用cumsum函数组
- angular - PrimeNG 巴比伦主题
- python - 蟒蛇和BS4 | 获取具有特定文本内容的所有表格数据
- scala - 如何在每个条目的所有行条目上获得 scala-spark 中数组类型列的平均值?
- c# - 如何在 UWP 应用程序中向受信任的根证书颁发机构添加证书
- python - 从手机上的 API 获取信息时出错
- ios - 点击按钮后如何删除 SKNode?
- wso2 - 使用 WSO2 身份服务器在旧令牌到期后获取新访问令牌失败
- r - 在 navbarPage 的选项卡中重用 ouputs$xxx
- r - 在 R 中使用 lpsolve 最小化目标函数问题