В моем проекте я использую MVC4, C# и ItExtSharp для генерации PDF из HTML. Мне нужно вставить заголовок с логотипом и именем шаблона, а также нижний колонтитул с пейджингом (номер страницы/общее количество страниц). Я сделал нижний колонтитул, я использовал этот код, чтобы добавить нижний колонтитул в файл PDF: < /p>
public static byte[] AddPageNumbers(byte[] pdf)
{
MemoryStream ms = new MemoryStream();
ms.Write(pdf, 0, pdf.Length);
// we create a reader for a certain document
PdfReader reader = new PdfReader(pdf);
// we retrieve the total number of pages
int n = reader.NumberOfPages;
// we retrieve the size of the first page
Rectangle psize = reader.GetPageSize(1);
// step 1: creation of a document-object
Document document = new Document(psize, 50, 50, 50, 50);
// step 2: we create a writer that listens to the document
PdfWriter writer = PdfWriter.GetInstance(document, ms);
// step 3: we open the document
document.Open();
// step 4: we add content
PdfContentByte cb = writer.DirectContent;
int p = 0;
Console.WriteLine("There are " + n + " pages in the document.");
for (int page = 1; page
Если вам нужно какое -либо объяснение этого кода, дайте мне знать. Затем я попытался использовать этот код, но не повезло: (< /p>
public _events(string TemplateName,string ImgUrl)
{
this.TempName = TemplateName;
this.ImageUrl = ImgUrl;
}
private string TempName = string.Empty;
private string ImageUrl = string.Empty;
public override void OnEndPage(PdfWriter writer, Document doc)
{
//Paragraph footer = new Paragraph("THANK YOU ", FontFactory.GetFont(FontFactory.TIMES, 10, iTextSharp.text.Font.NORMAL));
Paragraph header = new Paragraph("Template Name:" + TempName + " " +DateTime.UtcNow, FontFactory.GetFont(FontFactory.TIMES, 10, iTextSharp.text.Font.NORMAL));
//adding image (logo)
string imageURL = HttpContext.Current.Server.MapPath("~/Content/images.jpg");
iTextSharp.text.Image jpg = iTextSharp.text.Image.GetInstance(imageURL);
//Resize image depend upon your need
jpg.ScaleToFit(140f, 120f);
//Give space before image
jpg.SpacingBefore = 10f;
//Give some space after the image
jpg.SpacingAfter = 1f;
jpg.Alignment = Element.ALIGN_LEFT;
header.Alignment = Element.ALIGN_TOP;
PdfPTable headerTbl = new PdfPTable(1);
headerTbl.TotalWidth = 400;
headerTbl.HorizontalAlignment = Element.ALIGN_CENTER;
PdfPCell cell11 = new PdfPCell(header);
PdfPCell cell2 = new PdfPCell(jpg);
cell2.Border = 0;
cell11.Border = 0;
cell11.PaddingLeft = 10;
cell2.PaddingLeft = 10;
headerTbl.AddCell(cell11);
headerTbl.AddCell(cell2);
headerTbl.WriteSelectedRows(0, -1, doc.LeftMargin, doc.PageSize.Height - 10, writer.DirectContent);
}
}
< /code>
Вот мой метод действия, к которому возвращает файл PDF в качестве ответа. И я использовал этот класс в нем. Приносим извинения, я должен опубликовать это в начале моего вопроса. < /p>
[HttpGet]
[HandleException]
public ActionResult GenerateLeadProposalPDF()
{
TempData.Keep();
long LeadId = Convert.ToInt64(TempData["Leadid"]);
long EstimateId = Convert.ToInt64(TempData["Estimateid"]);
long ProposalTemplateId = Convert.ToInt64(TempData["ProposalTemplateId"]);
Guid SubscriberId = SessionManagement.LoggedInUser.SubscriberId;
var data = this._LeadEstimateAPIController.GetLeadProposalDetails(LeadId, EstimateId, ProposalTemplateId, SubscriberId);
System.Text.StringBuilder strBody = new System.Text.StringBuilder("");
string SubscriberProjectBody = this.ControllerContext.RenderRazorViewToString(ViewData, TempData, "~/Areas/Subscriber/Views/Shared/_GenerateProposalTemplate.cshtml", data);
string Header = this.ControllerContext.RenderRazorViewToString(ViewData, TempData, "~/Areas/Subscriber/Views/Shared/_HeaderGenerateProposals.cshtml", data);
string styleCss = System.IO.File.ReadAllText(Server.MapPath("~/ProposalDoc_CSS.txt"));
strBody.Append(@" ");
strBody.Append(@"");
// strBody.Append(Header);
strBody.Append(SubscriberProjectBody);
strBody.Append(@"");
String htmlText = strBody.ToString();
Document document3 = new Document(PageSize.A4, 36, 36, 36, 36);
_events e = new _events(data.objProposalLeadDetailsModel.ProposalFullName,"test");
string filePath = HostingEnvironment.MapPath("~/");
filePath = filePath + "pdf-.pdf";
var stream=new FileStream(filePath, FileMode.Create);
var objPdfWriter= PdfWriter.GetInstance(document3, stream);
document3.Open();
objPdfWriter.PageEvent = e;
iTextSharp.text.html.simpleparser.HTMLWorker hw = new iTextSharp.text.html.simpleparser.HTMLWorker(document3);
hw.Parse(new StringReader(htmlText));
document3.Close();
var result = System.IO.File.ReadAllBytes(filePath);
var abd = new FileStream(filePath, FileMode.Open, FileAccess.Read);
var streamArray = ReadFully(abd);
var streamFile = AddPageNumbers(streamArray);
// Response.End();
string contentType = "application/pdf";
return File(streamFile, contentType, "LeadProposal.pdf");
}
Я много искал Google, мой PDF выглядит так, как это
В моем проекте я использую MVC4, C# и ItExtSharp для генерации PDF из HTML. Мне нужно вставить заголовок с логотипом и именем шаблона, а также нижний колонтитул с пейджингом (номер страницы/общее количество страниц). Я сделал нижний колонтитул, я использовал этот код, чтобы добавить нижний колонтитул в файл PDF: < /p>
[code]public static byte[] AddPageNumbers(byte[] pdf) { MemoryStream ms = new MemoryStream(); ms.Write(pdf, 0, pdf.Length); // we create a reader for a certain document PdfReader reader = new PdfReader(pdf); // we retrieve the total number of pages int n = reader.NumberOfPages; // we retrieve the size of the first page Rectangle psize = reader.GetPageSize(1);
// step 1: creation of a document-object Document document = new Document(psize, 50, 50, 50, 50); // step 2: we create a writer that listens to the document PdfWriter writer = PdfWriter.GetInstance(document, ms); // step 3: we open the document
string imageURL = HttpContext.Current.Server.MapPath("~/Content/images.jpg"); iTextSharp.text.Image jpg = iTextSharp.text.Image.GetInstance(imageURL); //Resize image depend upon your need jpg.ScaleToFit(140f, 120f); //Give space before image jpg.SpacingBefore = 10f; //Give some space after the image jpg.SpacingAfter = 1f; jpg.Alignment = Element.ALIGN_LEFT;
Вот мой метод действия, к которому возвращает файл PDF в качестве ответа. И я использовал этот класс в нем. Приносим извинения, я должен опубликовать это в начале моего вопроса. < /p>
[HttpGet] [HandleException] public ActionResult GenerateLeadProposalPDF() { TempData.Keep(); long LeadId = Convert.ToInt64(TempData["Leadid"]); long EstimateId = Convert.ToInt64(TempData["Estimateid"]); long ProposalTemplateId = Convert.ToInt64(TempData["ProposalTemplateId"]); Guid SubscriberId = SessionManagement.LoggedInUser.SubscriberId; var data = this._LeadEstimateAPIController.GetLeadProposalDetails(LeadId, EstimateId, ProposalTemplateId, SubscriberId); System.Text.StringBuilder strBody = new System.Text.StringBuilder(""); string SubscriberProjectBody = this.ControllerContext.RenderRazorViewToString(ViewData, TempData, "~/Areas/Subscriber/Views/Shared/_GenerateProposalTemplate.cshtml", data); string Header = this.ControllerContext.RenderRazorViewToString(ViewData, TempData, "~/Areas/Subscriber/Views/Shared/_HeaderGenerateProposals.cshtml", data); string styleCss = System.IO.File.ReadAllText(Server.MapPath("~/ProposalDoc_CSS.txt")); strBody.Append(@" "); strBody.Append(@""); // strBody.Append(Header); strBody.Append(SubscriberProjectBody); strBody.Append(@""); String htmlText = strBody.ToString(); Document document3 = new Document(PageSize.A4, 36, 36, 36, 36); _events e = new _events(data.objProposalLeadDetailsModel.ProposalFullName,"test"); string filePath = HostingEnvironment.MapPath("~/"); filePath = filePath + "pdf-.pdf"; var stream=new FileStream(filePath, FileMode.Create); var objPdfWriter= PdfWriter.GetInstance(document3, stream); document3.Open(); objPdfWriter.PageEvent = e; iTextSharp.text.html.simpleparser.HTMLWorker hw = new iTextSharp.text.html.simpleparser.HTMLWorker(document3); hw.Parse(new StringReader(htmlText)); document3.Close(); var result = System.IO.File.ReadAllBytes(filePath); var abd = new FileStream(filePath, FileMode.Open, FileAccess.Read);
В моем проекте я использую MVC4, C# и itextsharp для создания PDF-файла из HTML. Мне нужно вставить заголовок с логотипом и названием шаблона, а также нижний колонтитул с разбивкой по страницам (номер страницы/общее количество страниц). Я закончил с...
В моем проекте я использую MVC4, C# и itextsharp для создания PDF-файла из HTML. Мне нужно вставить заголовок с логотипом и названием шаблона, а также нижний колонтитул с разбивкой по страницам (номер страницы/общее количество страниц). Я закончил с...
Как создать нижний колонтитул
Проблема в том, что я не создаю нижний колонтитул с помощью HTML и CSS, пожалуйста, помогите мне, нижний колонтитул, это самая сложная тема, создайте динамический нижний колонтитул, пожалуйста, кодирование очень сложно,...