private static List
list = new ArrayList (); Вы должны указать параметр типа.
Предупреждение указывает, что типы, которые определены для поддержки generics , должны быть параметризованы, а не использовать их необработанную форму.
List
определен для поддержки generics:public class List
. Это позволяет выполнять много типов безопасных операций, проверенных временем компиляции.
У вас есть пара проблем. Если вы получаете сообщение The document has no pages
, что означает, что в PDF не было добавлено содержание, что почти наверняка означает, что существует проблема с методом RenderControl
и не имеет никакого отношения к iTextSharp. Другая проблема заключается в том, что вы пишете файл Response.OutputStream
, а также выводите литеральный документ с помощью Response.Write(pdfDoc)
. Вам только нужно сделать первое, я не уверен, что произойдет с последним.
Сообщение The document has no pages
также может означать, что iTextSharp не смог найти что-либо для создания контента. Таким образом, у вас может быть допустимый HTML, но iTextSharp просто не знает, что с ним делать. Возможно, это не так, но я просто должен был упомянуть об этом.
Я собираюсь разбить код на шаги, чтобы помочь отлаживать вещи. Первые два блока преобразуют элемент управления в HTML, а затем здравомыслие проверяет его, чтобы убедиться, что у нас что-то есть. Вы должны проверить содержимое buf
, если у вас возникли проблемы.
Третий блок создает PDF-файл из MemoryStream
, а затем выгружает его в массив байтов вместо того, чтобы напрямую писать в Response.OutputStream
, Хотя нет ничего неправильного в написании файла Response.OutputStream
, вы часто обнаружите, что вы глотаете ошибки, а в целом отладка намного сложнее. После того, как этот блок будет выполнен, вы должны проверить bytes
, чтобы убедиться, что у него что-то есть.
Последний блок делает последний щелчок в браузере.
//Convert our control to HTML
string buf;
using (var sw = new StringWriter()) {
using (var hw = new HtmlTextWriter(sw)) {
Panel1.RenderControl(hw);
}
buf = sw.ToString();
}
//Sanity check
if (String.IsNullOrWhiteSpace(buf)) {
throw new ApplicationException("No content found");
}
//Create our PDF and get a byte array
byte[] bytes;
using (var ms = new MemoryStream()) {
using (var pdfDoc = new Document(PageSize.A4, 10f, 10f, 100f, 0f)) {
using (var writer = PdfWriter.GetInstance(pdfDoc, ms)) {
pdfDoc.Open();
using (var htmlparser = new HTMLWorker(pdfDoc)) {
using (var sr = new StringReader(buf)) {
htmlparser.Parse(sr);
}
}
pdfDoc.Close();
}
}
bytes = ms.ToArray();
}
//Output the PDF
Response.Clear();
Response.AddHeader("content-disposition", "attachment;filename=Quote.pdf");
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.BinaryWrite(bytes);
Response.End();