Я пытаюсь экспортировать данные gridview с изображением в PDF.Я использовал относительный путь при сохранении изображения в каталог проекта, но мне нужно вручную включать каждую картинку в проект. Я получаю вышеуказанную ошибку при разборе html. Я новичок и пытаюсь учиться самостоятельно.где я ошибся. Мой код указан ниже:
namespace BudgetApp
{
public partial class display : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
/*protected string GetUrl(string page)
{
string[] splits = Request.Url.AbsoluteUri.Split('/');
if (splits.Length >= 2)
{
string url = splits[0] + "//";
for (int i = 2; i < splits.Length - 1; i++)
{
url += splits[i];
url += "/";
}
return url + page;
}
return page;
}*/
public override void VerifyRenderingInServerForm(Control control)
{
//
}
protected void btnPdf_Click(object sender, EventArgs e)
{
Response.ContentType = "application/pdf";
Response.AddHeader("content-disposition",
"attachment;filename=GridViewExport.pdf");
Response.Cache.SetCacheability(HttpCacheability.NoCache);
StringWriter sw = new StringWriter();
HtmlTextWriter hw = new HtmlTextWriter(sw);
GridView1.AllowPaging = false;
GridView1.DataBind();
GridView1.RenderControl(hw);
StringReader sr = new StringReader(sw.ToString());
Document pdfDoc = new Document(PageSize.A4, 10f, 10f, 10f, 0f);
HTMLWorker htmlparser = new HTMLWorker(pdfDoc);
PdfWriter.GetInstance(pdfDoc, Response.OutputStream);
pdfDoc.Open();
htmlparser.Parse(sr);
pdfDoc.Close();
Response.Write(pdfDoc);
Response.End();
}
}
}
Моя страница aspx:
<body>
<h1 style="text-align:center">Monthly Budget Analysis</h1>
<br /><br />
<div id="wrap">
<div class="well">
<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="True" >
<asp:ListItem>January</asp:ListItem>
<asp:ListItem>February</asp:ListItem>
<asp:ListItem>March</asp:ListItem>
<asp:ListItem>April</asp:ListItem>
<asp:ListItem>May</asp:ListItem>
<asp:ListItem>June</asp:ListItem>
<asp:ListItem>July</asp:ListItem>
<asp:ListItem>August</asp:ListItem>
<asp:ListItem>September</asp:ListItem>
<asp:ListItem>October</asp:ListItem>
<asp:ListItem>November</asp:ListItem>
<asp:ListItem>December</asp:ListItem>
</asp:DropDownList>
<br />
<br />
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" CellPadding="4" DataSourceID="SqlDataSource1" ForeColor="#333333" GridLines="None" Height="267px" Width="913px" ShowHeaderWhenEmpty="True" UseAccessibleHeader="False" EmptyDataText="Oops!!No record found">
<AlternatingRowStyle BackColor="White" />
<Columns>
<asp:BoundField DataField="month" HeaderText="Month" SortExpression="month" >
<ItemStyle HorizontalAlign="Center" />
</asp:BoundField>
<asp:BoundField DataField="expense" HeaderText="Expense" SortExpression="expense" >
<ItemStyle HorizontalAlign="Center" />
</asp:BoundField>
<asp:BoundField DataField="budget" HeaderText="Budget" SortExpression="budget" >
<ItemStyle HorizontalAlign="Center" />
</asp:BoundField>
<asp:BoundField DataField="balance" HeaderText="Balance" SortExpression="balance" >
<ItemStyle HorizontalAlign="Center" />
</asp:BoundField>
<asp:TemplateField HeaderText="Bill" SortExpression="bill">
<EditItemTemplate>
<asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("bill") %>'></asp:TextBox>
</EditItemTemplate>
<ItemTemplate>
<asp:Image ID="Image1" runat="server" Height="100px" ImageUrl='<%# Eval("bill")%>' />
</ItemTemplate>
<ItemStyle HorizontalAlign="Center" />
</asp:TemplateField>
</Columns>
<EditRowStyle BackColor="#7C6F57" />
<FooterStyle BackColor="#1C5E55" Font-Bold="True" ForeColor="White" />
<HeaderStyle BackColor="#1C5E55" Font-Bold="True" ForeColor="White" />
<PagerStyle BackColor="#666666" ForeColor="White" HorizontalAlign="Center" />
<RowStyle BackColor="#E3EAEB" />
<SelectedRowStyle BackColor="#C5BBAF" Font-Bold="True" ForeColor="#333333" />
<SortedAscendingCellStyle BackColor="#F8FAFA" />
<SortedAscendingHeaderStyle BackColor="#246B61" />
<SortedDescendingCellStyle BackColor="#D4DFE1" />
<SortedDescendingHeaderStyle BackColor="#15524A" />
</asp:GridView>
<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:BudgetConnectionString8 %>" SelectCommand="SELECT * FROM [details] WHERE ([month] = @month)">
<SelectParameters>
<asp:ControlParameter ControlID="DropDownList1" Name="month" PropertyName="SelectedValue" Type="String" />
</SelectParameters>
</asp:SqlDataSource>
<br />
<asp:Button ID="btnPdf" runat="server" Text="Export to Pdf" OnClick="btnPdf_Click" />
</ContentTemplate>
</asp:UpdatePanel>
</form>
</div>
</div>
</body>
Код для сохранения данных в базу данных:
namespace BudgetApp
{
public partial class _new : System.Web.UI.Page
{
static String imagelink;
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Button1_Click(object sender, EventArgs e)
{
Response.Redirect("display.aspx");
}
protected void submit_Click(object sender, EventArgs e)
{
ScriptManager.RegisterStartupScript(this.Page,this.Page.GetType(), "script", "<script type='text/javascript'>Budget();</script>", false);
SqlConnection conn = new SqlConnection(@"Data Source=co\sqlexpress;Initial Catalog=Budget;Integrated Security=true");
conn.Open();
if (file1.HasFile == true)
{
String contenttype = file1.PostedFile.ContentType;
if (contenttype == "image/jpeg")
{
string f=Path.GetFileName(file1.PostedFile.FileName);
file1.SaveAs(HttpContext.Current.Server.MapPath(@"~/saveimg/"+ f));
imagelink = "~/saveimg/" + file1.FileName;
}
}
int a = Convert.ToInt32(exp.Text);
int b = Convert.ToInt32(budget.Text);
int balance = b - a;
SqlCommand obj = new SqlCommand("insert into details values('" + ddlmonth.SelectedValue + "','" + exp.Text + "','" + budget.Text + "','" + balance + "','" + imagelink + "')", conn);
obj.ExecuteNonQuery();
conn.Close();
}
}
}
ОБНОВЛЕНИЕ: я добавил новую кнопку, чтобы дать возможность печати, используя javascript, и когда страница печати появилась, я выбрал сохранить как pdf, и изображение также отображается:) Но я бы хотел сохранить его в формате PDF одним нажатием кнопки. Мой код для печати приведен ниже:
<script type="text/javascript">
function PrintGridData() {
var prtGrid = document.getElementById('<%=GridView1.ClientID %>');
var prtwin = window.open('', 'PrintGridView',
'left=100,top=100,width=400,height=400,tollbar=0,scrollbars=1,status=0,resizable=1');
prtwin.document.write(prtGrid.outerHTML);
prtwin.document.close();
prtwin.focus();
prtwin.print();
prtwin.close();
}
</script>
<asp:Button ID="btnPrint" runat="server" Text="Print" OnClientClick="PrintGridData();"/>