Web ページにボタンを配置するという新しい要件があり、クリックすると Web ページが PDF として表示されます。iTextSharp
調べてみると、そのような目的で使用されていることがわかりました。しかし、私の Web ページにも多くTelerik
の ASP コントロールがあります。を使用してPDFでも取得できますiTextSharp
か?
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
}
助けてください 。ボタンをクリックしたときに Web ページ全体の画像を表示するという他のオプションもあります。
最終的にコードを次のように変更しました。
Response.ContentType = "application/msword";
Response.AddHeader("content-disposition", "attachment;filename=TestPage.doc");
Response.Cache.SetCacheability(HttpCacheability.NoCache);
MemoryStream msOutput = new MemoryStream();
これで、すべてのコントロールを含む msword ドキュメントを取得できますが、不要なテキストもいくつか取得しています。同じ問題が発生した場合、それを削除するにはどうすればよいですか?