Как получить размер файла для загрузки нескольких файлов - PullRequest
0 голосов
/ 15 ноября 2010

Я пишу веб-приложение ASP.NET.

Я рассчитываю общий размер моего PDF-файла, который указан ниже.Что это возвращает?Когда я загружаю файл размером 2 КБ, он возвращает размер 2 КБ, и это правильно.Но когда я загружаю 2 файла размером 2 КБ, общий размер возвращается 2,16 КБ.Это верно?Должен ли он вернуть 4KB?

StringReader reader = new StringReader(content);
MemoryStream ms = new MemoryStream();
Document doc = new Document(PageSize.A4, 50, 50, 30, 30);
HTMLWorker parser = new HTMLWorker(doc);
PdfWriter.GetInstance(doc, ms);
doc.Open();
try
{
    parser.Parse(reader);
}
catch (Exception ex)
{
    Paragraph paragraph = new Paragraph("Error! " + ex.Message);
    paragraph.SetAlignment("center");
    Chunk text = paragraph.Chunks[0] as Chunk;
    if (text != null)
    {
        //text.Font.Color = iTextSharp.text.BaseColor.RED;
    }
    doc.Add(paragraph);
}
finally
{
    doc.SetMargins(10, 10, 10, 10);
    doc.Close();
}
Byte[] buffer = ms.GetBuffer();
if (buffer != null)
{
    Response.ContentType = "application/pdf";
    Response.AppendHeader("content-disposition", "attachment;filename=FileName.pdf");
    //Response.AddHeader("content-length", buffer.Length.ToString());
    Response.BinaryWrite(buffer);
}

1 Ответ

0 голосов
/ 24 ноября 2010

Похоже, вы открываете два файла в один и тот же буфер и ожидаете, что они будут добавлены один к другому. Вместо этого второй заменяет первый.

Попробуйте все это автономно в простой программе на C #. Если он там не работает, он явно не будет работать на странице ASP. OTOH, если он работает там, но не в ASP, то это проблема ASP, а не проблема с iTextSharp.

PS: я думал, что doc.close закроет поток, используемый PdfWriter. Глядя на код, он будет по умолчанию (protected boolean closeStream = true; из исходного кода Java). Что-то могло бы вызвать setCloseStream(false) где-то вдоль линии.

PPS. Объединение двух PDF-файлов в один двоичный поток не является хорошей идеей. Вам нужно записать их как отдельные вложения ... с этого момента весь этот вопрос спорен.

...