2016-12-01 2 views
2

Я использую Visual Studio 2013, C# Windows Application, iTextSharp:Создать PDF с iTextSharp без сохранения файла

Я могу легко создать/сохранить файл в формате PDF и запись в него, но есть способ, чтобы просто использовать pdf-файл и написать ему, не сохранив его первым? Я не хочу создавать временный файл PDF каждый раз, когда кто-то запускает отчет. Заранее спасибо !!

Document doc = new Document(iTextSharp.text.PageSize.LETTER, 10,10,42,35); 

PdfWriter wri = PdfWriter.GetInstance(doc, new FileStream("Test.pdf", 
FileMode.Create)); 

doc.Open(); 

\\\\ Then I do a bunch of stuff, then do a close 


doc.Close(); 
+1

* Напишитесь на него, не сохраняя *? – Hackerman

+3

Возможный дубликат [Создать PDF в памяти вместо физического файла] (http://stackoverflow.com/questions/2815761/create-pdf-in-memory-instead-of-physical-file) – NineBerry

+0

Я просто догадываюсь, но вы создаете веб-приложение? И вы хотите предложить pdf в качестве загрузки, не сохраняя его на диск? –

ответ

-2

Вы можете использовать MemoryMappedFile и писать на него, и это не основано на дисках.

using (MemoryMappedFile mmf = MemoryMappedFile.CreateNew("INMEMORYPDF.pdf", 1000000)) 
{ 
    PDFPageMargins margins = new PDFPageMargins(10, 10, 10, 10); 
    var document = new Document((_pageWidth > 540) ? PageSize.A4.Rotate() : PageSize.A4, margins.Left, margins.Right, margins.Top, margins.Bottom); 
    using (MemoryMappedViewStream stream = mmf.CreateViewStream()) 
    {      

     PdfWriter.GetInstance(document, stream); 
     document.Open(); 
     //MODIFY DOCUMENT 
     document.Close();      
    } 
    byte[] content; 
    using (MemoryMappedViewStream stream = mmf.CreateViewStream()) 
    { 
     BinaryReader rdr = new BinaryReader(stream); 
     content = new byte[mmf.CreateViewStream().Length]; 
     rdr.Read(content, 0, (int)mmf.CreateViewStream().Length); 
    } 
    return content;    
} 
+0

Не знаю, почему downvote. Что я упустил? –

+1

Зачем использовать mmf, если вы можете просто использовать MemoryStream? – NineBerry

+0

Ну, за один миллиметр может быть разделен между процессами, передавая ручки или указатели. –

Смежные вопросы