Файл поврежден и не может быть восстановлен

string attachment = "attachment; filename=" + filename + ".pdf"; 
    Response.ClearContent(); 
    Response.AddHeader("content-disposition", attachment);
    Response.ContentType = "application/pdf";
    StringWriter stw = new StringWriter();
    HtmlTextWriter htextw = new HtmlTextWriter(stw);
    htextw.AddStyleAttribute("font-size", "7pt");
    htextw.AddStyleAttribute("color", "Black");
    Panel_Name.RenderControl(htextw);// .RenderControl(htextw);
    //Name of the Panel 
    Document document = new Document();
    document = new Document(PageSize.A4, 5, 5, 15, 5);
    FontFactory.GetFont("Arial", 50, iTextSharp.text.BaseColor.BLUE);
    PdfWriter.GetInstance(document, Response.OutputStream);
    document.Open();
    StringReader str = new StringReader(stw.ToString());
    HTMLWorker htmlworker = new HTMLWorker(document);
    htmlworker.Parse(str);
    document.Close();
    Response.Write(document);

Я вернул этот код для создания PDF-файла страницы aspx (т.е. Default.aspx в Default.pdf). Он создает файл PDF, но созданный файл PDF не поддерживается. У меня установлена ​​последняя версия PDF. Выдает ошибку открытия документа. Файл поврежден и не может быть восстановлен.


person Patel Tejas    schedule 20.07.2011    source источник
comment
Я вернул этот код для создания pdf-файла страницы aspx (т.е. Default.aspx для Default.pdf). Он генерирует pdf-файл, но сгенерированный pdf-файл не поддерживается. У меня последняя версия pdf. Это дает ошибку открытия документ. Файл поврежден и не может быть восстановлен.   -  person Patel Tejas    schedule 20.07.2011
comment
Кроме того, еще одна ошибка связана с document.Close();->, где говорится, что он не может получить путь. Я действительно застрял с этим. Мне нужна помощь, поэтому, пожалуйста, кто-нибудь может что-нибудь посоветовать. Заранее спасибо.   -  person Patel Tejas    schedule 20.07.2011
comment
библиотека ITextSharp предоставляет возможность конвертировать aspx в PDS, а также другие возможности, пожалуйста, просмотрите мой пост, он вам поможет. Спасибо.   -  person ankitkanojia    schedule 13.01.2020


Ответы (2)


Вам необходимо скачать ITextSharp и добавить ссылку на него в свой проект. ITextSharp — это бесплатная библиотека HTML для PDF. Вы можете загрузить его, используя следующую ссылку для скачивания.

Разметка HTML

<form id="form1" runat="server">
    <div>
       <img src = "//www.aspsnippets.com/images/Blue/Logo.png" /><br />
    </div>
    <div style = "font-family:Arial">This is a test page</div>
    <div>
       <table border = "1" width = "100">
          <tr><td>Name</td><td>Age</td></tr>
          <tr><td>John</td><td>11</td></tr>
          <tr><td>Sam</td><td>13</td></tr>
          <tr><td>Tony</td><td>12</td></tr>
       </table>
    </div>
    <div>
       <asp:Button ID="btnExport" runat="server" Text="Export" onclick="btnExport_Click" />
    </div>
</form>

Пространства имен

using System.IO;
using iTextSharp.text;
using iTextSharp.text.html.simpleparser;
using iTextSharp.text.pdf;

Код C#

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);
    StringWriter sw = new StringWriter();
    HtmlTextWriter hw = new HtmlTextWriter(sw);
    this.Page.RenderControl(hw);
    StringReader sr = new StringReader(sw.ToString());
    Document pdfDoc = new Document(PageSize.A4, 10f, 10f, 100f, 0f);
    HTMLWorker htmlparser = new HTMLWorker(pdfDoc);
    PdfWriter.GetInstance(pdfDoc, Response.OutputStream);
    pdfDoc.Open();
    htmlparser.Parse(sr);
    pdfDoc.Close();
    Response.Write(pdfDoc);
    Response.End();
}
person ankitkanojia    schedule 13.01.2020
comment
По сути, это мой очень старый вопрос, который wqs уже решил, но ваш ответ также кажется правильным. Существует еще одна библиотека с именем syncfusion, которая предоставляет гораздо больше возможностей, чем iTextSharp. Но дело в стоимости. - person Patel Tejas; 13.01.2020

Вы можете использовать стороннюю библиотеку для создания PDF, например PDFizer.

person Peyman    schedule 20.07.2011
comment
Я скачал сейчас, пожалуйста, подскажите, как использовать. Я уже сделал это с помощью ItextSharp.dll, но он не работает. - person Patel Tejas; 20.07.2011
comment
Pdfizer также основан на iTextSharp. Это работает, но бесплатная версия не поддерживает изображения CSS и backgroupd. Если вы хотите иметь хорошие инструменты, я предлагаю вам ABCPdf. Я использую ABCPdf и очень доволен этим. websupergoo.com/abcpdf-9.htm - person Peyman; 21.07.2011
comment
Документ theDoc = новый документ(); theDoc.AddImageUrl(google.com/); theDoc.Save(Server.MapPath(htmlimport.pdf)); Док.Очистить(); когда я использую приведенный выше код, он дает мне ошибку, например, документ типа или имени пространства имен не может быть найден. Можете ли вы сказать, почему возникает эта ошибка? - person Kartik Patel; 04.12.2012