2016-12-01 113 views
2

我使用Visual Studio 2013,C#Windows应用程序,iTextSharp的:创建iTextSharp的PDF不保存文件

我可以轻松地创建/保存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

我只是猜测,但你正在创建一个Web应用程序吗?你想提供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

那么,一个mmf可以通过传递句柄或指针在进程间共享。 –