Ish*_*han 3 c# pdf asp.net pdf-generation itext
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();
}
Run Code Online (Sandbox Code Playgroud)
我正在使用上面的代码从HTMLEditor(ajax控件)中的html文本生成pdf.如果我用不同宽度的每一列硬编码一个表,进入HTMLEditor文本而不是生成pdf时,列得到相同的分配即使所有列在pdf上都有固定的大小,即使我为每列指定了一些自定义宽度.
我想生成可以将html转换为pdf的pdf,也可以将表格列除以指定的宽度.怎么做?
我认为HTMLWorker(iTextSharp)还不支持表格宽度.
所以你需要:
解析HTML以查找列宽 - 使用正则表达式或类似Html Agility Pack.
调用HTMLWorker.ParseToList()迭代iText元素并查找PdfPTable(s)
通过调用SetWidthPercentage()手动设置PdfPTable宽度
这是使用HTTP处理程序的示例(不包括步骤1):
<%@ 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; }
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
25480 次 |
| 最近记录: |