Generating html to pdf using itextsharp
i don't think HTMLWorker (iTextSharp) supports table widths yet.
so you need to:
parse your HTML to find the columns widths - use a regular expression or something like Html Agility Pack.
call HTMLWorker.ParseToList() to iterate over iText elements and look for PdfPTable(s)
manually set the PdfPTable width by calling SetWidthPercentage()
here's an example (excluding step 1) using a HTTP handler:
<%@ WebHandler Language='C#' Class='tableColumnWidths' %>
using System;
using System.Collections.Generic;
using System.IO;
using System.Web;
using iTextSharp.text;
using iTextSharp.text.html.simpleparser;
using iTextSharp.text.pdf;
public class tableColumnWidths : IHttpHandler {
public void ProcessRequest (HttpContext context) {
context.Response.ContentType = "application/pdf";
string html = @"
<html><head></head><body>
<p>A paragraph</p>
<table border='1'>
<tr><td>row1-column1</td><td>row1-column2</td><td>row1-column3</td></tr>
<tr><td>row2-column1</td><td>row2-column2</td><td>row2-column3</td></tr>
</table>
</body></html>
";
/*
* need the Rectangle for later when we set the column widths
*/
Rectangle rect = PageSize.LETTER;
Document document = new Document(rect);
PdfWriter.GetInstance(document, context.Response.OutputStream);
document.Open();
/*
* iterate over iText elements
*/
List<IElement> ie = HTMLWorker.ParseToList(
new StringReader(html), null
);
/*
* page width
*/
float pageWidth = rect.Width;
/*
* look for PdfPTable(s)
*/
foreach (IElement element in ie) {
PdfPTable table = element as PdfPTable;
/*
* set the column widths
*/
if (table != null) {
table.SetWidthPercentage(
new float[] {
(float).25 * pageWidth,
(float).50 * pageWidth,
(float).25 * pageWidth
},
rect
);
}
document.Add(element);
}
document.Close();
}
public bool IsReusable {
get { return false; }
}
}
Ishan
Hello i am into ASP.net C#/ Sharepoint development and constantly learning in order to expertise in the field.
Updated on April 26, 2020Comments
-
Ishan about 4 years
public void pdfgenforffd(TextBox TextBox3, HiddenField HiddenField1, HiddenField HiddenField4, AjaxControlToolkit.HTMLEditor.Editor Editor1) { HttpContext.Current.Response.Clear(); HttpContext.Current.Response.ContentType = "application/pdf"; // Create PDF document Document pdfDocument = new Document(PageSize.A4, 50, 25, 15, 10); PdfWriter wri = PdfWriter.GetInstance(pdfDocument, new FileStream("d://" + HiddenField1.Value + "_" + HiddenField4.Value + ".pdf", FileMode.Create)); PdfWriter.GetInstance(pdfDocument, HttpContext.Current.Response.OutputStream); pdfDocument.Open(); string htmlText = Editor1.Content; //string htmlText = htmlText1.Replace(Environment.NewLine, "<br/>"); HTMLWorker htmlWorker = new HTMLWorker(pdfDocument); htmlWorker.Parse(new StringReader(htmlText)); pdfDocument.Close(); HttpContext.Current.Response.End(); }
i am using the above code for pdf generation from html text in HTMLEditor(ajax control). If i hardcode a table with each column of different width, into HTMLEditor text than while generating pdf the column get devided equally i.e all column have fixed size on pdf even if i specify some custom width for each column.
I want to generate pdf that can convert html to pdf,also divide table column with specified width. How to do it?
-
Ishan about 13 yearsI did not understand how to use step1 in my program.
-
kuujinbo about 13 yearsif you don't show the HTML you are trying to convert no one can help you.
-
Ishan about 13 yearsthe html content is taken from HTMLEditor (ajax control),so user can modify the content in HTML.
-
kuujinbo about 11 years@LyubenTodorov: Thanks for that! :) The same happens with many other good questions/answers with different tags throughout stackoverflow, so it's OK with me.