首页 > 解决方案 > 找不到路径“C:\Program Files\IIS Express\saveimg\newimg.jpg”的一部分

问题描述

我正在尝试将带有图像的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();"/>

标签: asp.netgridview

解决方案


推荐阅读