C# 从当前页面ASP.NET创建pdf
我想通过单击按钮从当前页面创建PDF。 现在,我的代码如下所示:C# 从当前页面ASP.NET创建pdf,c#,asp.net,pdf,render,C#,Asp.net,Pdf,Render,我想通过单击按钮从当前页面创建PDF。 现在,我的代码如下所示: protected void btnSave_Click(object sender, EventArgs e) { renderPDF = true; } protected override void Render(HtmlTextWriter writer) { if (renderPDF == true) { dtAnswer
protected void btnSave_Click(object sender, EventArgs e)
{
renderPDF = true;
}
protected override void Render(HtmlTextWriter writer)
{
if (renderPDF == true)
{
dtAnswer = taAnswer.GetData();
MemoryStream mem = new MemoryStream();
StreamWriter twr = new StreamWriter(mem);
HtmlTextWriter myWriter = new HtmlTextWriter(twr);
base.Render(myWriter);
myWriter.Flush();
myWriter.Dispose();
StreamReader strmRdr = new StreamReader(mem);
//strmRdr.BaseStream.Position = 3300;
//string pageContent = strmRdr.ReadToEnd();
//strmRdr.Dispose();
//mem.Dispose();
//writer.Write(pageContent);
//CreatePDFDocument(pageContent);
StringBuilder sb = new StringBuilder();
sb.Append("<table border='1' width='100%' style='font-size:11px; font-weight:bold; border-collapse:collapse; font-family: Arial, 'Lucida Sans Unicode', sans-serif; '>");
sb.Append("<tr>");
sb.Append("<td style='background-color:red; text-align:center;' colspan ='3'>maxon motor</td>");
sb.Append("</tr>");
sb.Append("<tr>");
sb.Append("<td width='18%'><p>maxon motor ag</p><p>Sachseln</p></td>");
sb.Append("<td width ='64%' style='text-align:center'><p>Vorstellungsgespräch</p></td>");
sb.Append("<td width='18%'><p>Seite</p></td>");
sb.Append("</tr>");
sb.Append("</table>");
sb.Append("<br /><br />");
sb.Append("<Table style=\"width:100%;font-weight:bold;border-collapse:collapse; font-family: Arial, 'Lucida Sans Unicode', sans-serif;\">");
sb.Append("<tr>");
sb.Append("<td><p>Name / Vorname:</p></td>");
sb.Append("<td></td>");
sb.Append("</tr>");
sb.Append("<tr>");
sb.Append("<td><p>Geb. Datum:</p></td>");
sb.Append("<td></td>");
sb.Append("</tr>");
sb.Append("<tr>");
sb.Append("<td><p>Offene Stelle zugewiesen:</p></td>");
sb.Append("<td></td>");
sb.Append("</tr>");
sb.Append("<tr>");
sb.Append("<td><p>Gesprächsteilnehmer:</p></td>");
sb.Append("<td></td>");
sb.Append("</tr>");
sb.Append("</table>");
sb.Append("<br /><br />");
sb.Append("<div>");
for (int i = 0; i < pQuestions.Controls.Count; i++)
{
string sName = "lbl" + pQuestions.Controls[i].ID.Substring(3, pQuestions.Controls[i].ID.Length - 3);
if (pQuestions.Controls[i].ID == sName)
{
if (!pQuestions.Controls[i].ID.Contains(","))
{
string sBlockName = pQuestions.Controls[i].ID.Substring(3, pQuestions.Controls[i].ID.Length - 3);
sb.Append("<p><b>" + sBlockName + "</b></p>");
sb.Append("<br />");
for (int t = 0; t < pQuestions.Controls.Count; t++)
{
if (pQuestions.Controls[t].ID.Contains(sBlockName))
{
if (pQuestions.Controls[t].ID.Contains("lbl") && pQuestions.Controls[t].ID != pQuestions.Controls[i].ID)
{
sb.Append("<p>" + ((Label)(pQuestions.Controls[t])).Text + "</p>");
sb.Append("<br />");
}
else if (pQuestions.Controls[t].ID.Contains("txt"))
{
if (((TextBox)(pQuestions.Controls[t])).Text != "")
{
sb.Append("<p>" + ((TextBox)(pQuestions.Controls[t])).Text + "</p>");
sb.Append("<br />");
}
else
{
sb.Append("<br /><br /><br /><br />");
}
}
}
}
}
}
}
sb.Append("</div>");
StringReader sr = new StringReader(sb.ToString());
string rr= sb.ToString();
CreatePDFDocument(rr);
}
else
{
System.Text.StringBuilder sb = new System.Text.StringBuilder();
HtmlTextWriter tw = new HtmlTextWriter(new StringWriter(sb));
base.Render(tw);
// get the captured markup as a string
string pageSource = tw.ToString();
//Get the rendered content
string sContent = sb.ToString();
//Now output it to the page, if you want
writer.Write(sContent);
}
}
public void CreatePDFDocument(string strHtml)
{
string strHTMLpath = "c:\\MyHTML.html";
StreamWriter strWriter = new StreamWriter(strHTMLpath, false, System.Text.Encoding.UTF8);
strWriter.Write(strHtml);
strWriter.Close();
string strFileName = "C:\\map1.pdf";
// step 1: creation of a document-object
Document document = new Document();
// step 2:
// we create a writer that listens to the document
PdfWriter.GetInstance(document, new FileStream(strFileName, FileMode.Create));
StringReader se = new StringReader(strHtml);
TextReader tr = new StreamReader("C:\\MyHTML.html");
//add the collection to the document
document.Open();
HTMLWorker worker = new HTMLWorker(document);
worker.StartDocument();
//// step 5: parse the html into the document
worker.Parse(tr);
//// step 6: close the document and the worker
worker.EndDocument();
//worker.Parse(tr); // getting error "Illegal characters in path"
document.Close();
ShowPdf(strFileName);
}
public void ShowPdf(string strFileName)
{
Response.ClearContent();
Response.ClearHeaders();
Response.AddHeader("Content-Disposition", "inline;filename=" + strFileName);
Response.ContentType = "application/pdf";
Response.WriteFile(strFileName);
Response.Flush();
Response.Clear();
}
protectedvoidbtnsave\u单击(对象发送方,事件参数e)
{
renderPDF=true;
}
受保护的覆盖无效渲染(HtmlTextWriter编写器)
{
如果(renderPDF==true)
{
dtAnswer=taAnswer.GetData();
MemoryStream mem=新的MemoryStream();
StreamWriter twr=新StreamWriter(mem);
HtmlTextWriter myWriter=新的HtmlTextWriter(twr);
base.Render(myWriter);
myWriter.Flush();
myWriter.Dispose();
StreamReader strmRdr=新的StreamReader(mem);
//strmRdr.BaseStream.Position=3300;
//字符串pageContent=strmRdr.ReadToEnd();
//strmRdr.Dispose();
//mem.Dispose();
//writer.Write(页面内容);
//创建PDF文档(页面内容);
StringBuilder sb=新的StringBuilder();
某人加上(“”);
某人加上(“”);
sb.附加(“maxon马达”);
某人加上(“”);
某人加上(“”);
sb.追加(“maxon motor agSachseln”);
sb.追加(“vorstellungspräch”;
sb.追加(“Seite”);
某人加上(“”);
某人加上(“”);
某人追加(“
”);
某人加上(“”);
某人加上(“”);
sb.追加(“名称/Vorname:”);
某人加上(“”);
某人加上(“”);
某人加上(“”);
sb.追加(“Geb.数据:”);
某人加上(“”);
某人加上(“”);
某人加上(“”);
sb.追加(“Offeine Stelle zugewiesen:”);
某人加上(“”);
某人加上(“”);
某人加上(“”);
sb.追加(“Gesprächsteinehmer:”;
某人加上(“”);
某人加上(“”);
某人加上(“”);
某人追加(“
”);
某人加上(“”);
对于(int i=0;i”);
sb.追加(“
”);
对于(int t=0;t”;
sb.追加(“
”);
}
else if(pQuestions.Controls[t].ID.Contains(“txt”))
{
如果(((文本框)(pQuestions.Controls[t]).Text!=“”)
{
sb.追加(“”+((文本框)(pQuestions.Controls[t])).Text+””;
sb.追加(“
”);
}
其他的
{
某人追加(“
”);
}
}
}
}
}
}
}
某人加上(“”);
StringReader sr=新的StringReader(sb.ToString());
字符串rr=sb.ToString();
创建PDF文档(rr);
}
其他的
{
System.Text.StringBuilder sb=新的System.Text.StringBuilder();
HtmlTextWriter tw=新的HtmlTextWriter(新的StringWriter(sb));
基本渲染(tw);
//将捕获的标记作为字符串获取
字符串pageSource=tw.ToString();
//获取渲染的内容
字符串sContent=sb.ToString();
//如果需要,现在将其输出到页面
作者:写(内容);
}
}
public void CreatePDFDocument(字符串strHtml)
{
string strHTMLpath=“c:\\MyHTML.html”;
StreamWriter strWriter=newstreamwriter(strHTMLpath,false,System.Text.Encoding.UTF8);
strWriter.Write(strHtml);
strWriter.Close();
string strFileName=“C:\\map1.pdf”;
//步骤1:创建文档对象
文档=新文档();
//步骤2:
//我们创建一个侦听文档的编写器
GetInstance(文档,新文件流(strFileName,FileMode.Create));
StringReader se=新的StringReader(strHtml);
TextReader tr=新的StreamReader(“C:\\MyHTML.html”);
//将集合添加到文档中
document.Open();
HTMLWorker=新的HTMLWorker(文档);
worker.StartDocument();
////步骤5:将html解析到文档中
worker.Parse(tr);
////步骤6:关闭文档和工作人员
worker.EndDocument();
//worker.Parse(tr);//获取错误“路径中的非法字符”
document.Close();
ShowPdf(strFileName);
}
public void ShowPdf(字符串strFileName)
{
Response.ClearCont
string = "Pdf Contents in html format";
StringReader sr = new StringReader(sb.ToString());
Document pdfDoc = new Document(PageSize.A4, 10f, 10f, 10f, 0f);
HTMLWorker htmlparser = new HTMLWorker(pdfDoc);
using (MemoryStream memoryStream = new MemoryStream())
{
PdfWriter writer = PdfWriter.GetInstance(pdfDoc, memoryStream);
pdfDoc.Open();
htmlparser.Parse(sr);
pdfDoc.Close();
byte[] bytes = memoryStream.ToArray();
memoryStream.Close();
}