Generating html to pdf using itextsharp
public voi开发者_开发技巧d 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?
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; }
}
}
精彩评论