PDF не загружается в iTextSharp [дубликат]

 private static List list = new ArrayList();

Вы должны указать параметр типа.

Предупреждение указывает, что типы, которые определены для поддержки generics , должны быть параметризованы, а не использовать их необработанную форму.

List определен для поддержки generics: public class List. Это позволяет выполнять много типов безопасных операций, проверенных временем компиляции.

0
задан user3012159 30 January 2014 в 21:27
поделиться

1 ответ

У вас есть пара проблем. Если вы получаете сообщение 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();
1
ответ дан Chris Haas 20 August 2018 в 18:49
поделиться
  • 1
    Спасибо Крису, однако это все еще не работает ... Я тратил часы на это и выяснил, что мне нужно преобразовать свой проект в MVC. звучит как HTML, здесь проблема, и код отлично работает, когда я создаю новую страницу aspx с небольшими данными. Еще раз, спасибо. – user3012159 31 January 2014 в 09:35
  • 2
    Или, может быть, мне не нужно преобразовывать в MVC, но это значит, что я должен поместить все элементы в таблицу внутри панели и закодировать каждую ячейку для копирования в PDF. – user3012159 31 January 2014 в 09:38
  • 3
    после изучения различных способов запуска того же кода. Я взял текстовые поля, которые дают ошибку & quot; должен быть вложен в форму с сервером runat, который он есть? что это значит ? – user3012159 31 January 2014 в 09:50
  • 4
    См. Это для обработки & quot; XYZ должен быть помещен внутри тега формы с помощью runat = & quot; server & quot ;. stackoverflow.com/a/6343859/231316 – Chris Haas 31 January 2014 в 15:56
Другие вопросы по тегам:

Похожие вопросы: