【发布时间】:2012-05-13 00:00:30
【问题描述】:
我有一个新要求,即在我的网页中有一个按钮,点击后,它会将网页显示为 PDF。在研究中,我发现iTextSharp 用于此目的。
但是我的网页中也有很多Telerik 和ASP 控件。我也可以使用iTextSharp 在 PDF 中获取它吗?
如果是,那么任何人都可以提供一个基本链接以开始使用iTextSharp,因为我还没有遇到过这个工具。
根据@ahaliav 的回答,我尝试使用以下代码。但是,我没有得到 pdf 上的控件。
protected void btnExport_Click(object sender, EventArgs e)
{
Response.ContentType = "application/pdf";
Response.AddHeader("content-disposition", "attachment;filename=TestPage.pdf");
Response.Cache.SetCacheability(HttpCacheability.NoCache);
MemoryStream msOutput = new MemoryStream();
TextReader reader = new StringReader(HtmlContent);
// step 1: creation of a document-object
Document document = new Document(PageSize.A4, 30, 30, 30, 30);
HTMLWorker worker = new HTMLWorker(document);
// step 2:
// we create a writer that listens to the document
// and directs a XML-stream to a file
PdfWriter writer = PdfWriter.GetInstance(document, Response.OutputStream);
// step 3: we create a worker parse the document
// step 4: we open document and start the worker on the document
document.Open();
worker.StartDocument();
// step 5: parse the html into the document
worker.Parse(reader);
// step 6: close the document and the worker
worker.EndDocument();
worker.Close();
document.Close();
//Response.Write(document);
//Response.End();
}
protected override void Render(HtmlTextWriter writer)
{
// setup a TextWriter to capture the markup
TextWriter tw = new StringWriter();
HtmlTextWriter htw = new HtmlTextWriter(tw);
// render the markup into our surrogate TextWriter
base.Render(htw);
// get the captured markup as a string
string pageSource = tw.ToString();
// render the markup into the output stream verbatim
writer.Write(pageSource);
// remove the viewstate field from the captured markup
HtmlContent = Regex.Replace(pageSource,
"<input type=\"hidden\" name=\"__VIEWSTATE\" id=\"__VIEWSTATE\" value=\".*?\" />",
"", RegexOptions.IgnoreCase);
// the page source, without the viewstate field, is in viewStateRemoved
// do what you like with it
}
请帮忙。 我还有其他选择,即当我单击按钮时显示完整网页的图像。谁能指导我解决这两个问题的任何可能方向。
我终于把我的代码改成了:
Response.ContentType = "application/msword";
Response.AddHeader("content-disposition", "attachment;filename=TestPage.doc");
Response.Cache.SetCacheability(HttpCacheability.NoCache);
MemoryStream msOutput = new MemoryStream();
有了这个,我可以得到包含我所有控件的 msword 文档,但我也得到了一些不需要的文本,如果有人遇到同样的问题,我该如何删除?
【问题讨论】:
-
我在我的一个项目中使用wkhtmltopdf基于网页生成PDF。
-
我可以在那个pdf中获得telerik控件吗
-
不确定,但我猜不会。
-
我已经进一步修改了我的问题,请帮忙
标签: asp.net telerik pdf-generation itextsharp webpage