C# 使用iTextSharp创建PDF而不保存文件
我正在使用Visual Studio 2013、c#Windows应用程序、iTextSharp: 我可以很容易地创建/保存pdf文件并写入其中,但是有没有一种方法可以只使用pdf文件并写入而不首先保存它?我不想每次有人运行报表时都创建一个临时pdf文件。提前谢谢C# 使用iTextSharp创建PDF而不保存文件,c#,itext,C#,Itext,我正在使用Visual Studio 2013、c#Windows应用程序、iTextSharp: 我可以很容易地创建/保存pdf文件并写入其中,但是有没有一种方法可以只使用pdf文件并写入而不首先保存它?我不想每次有人运行报表时都创建一个临时pdf文件。提前谢谢 Document doc = new Document(iTextSharp.text.PageSize.LETTER, 10,10,42,35); PdfWriter wri = PdfWriter.GetInstance(doc
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();
您可以使用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;
}
您可以使用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;
}
在不保存的情况下对其进行写入?我只是猜测,可能是重复的,但您是否正在创建web应用程序?您是否希望提供pdf作为下载,而不将其保存到磁盘?不,不是web应用程序,windows/桌面应用程序写入,而不保存?我只是猜测,可能是重复的,但您正在创建web应用程序吗?您想提供pdf作为下载,而不将其保存到磁盘上吗?不,不是web应用程序,windows/桌面应用程序。如果可以使用MemoryStream,为什么要使用mmf?嗯,对于一个应用程序,mmf可以通过传递句柄或指针在进程之间共享。要使用mmf,必须指定最大大小。选择此大小太小,当PDF需要更多内存时将失败。选择此大小太高,当进程中的地址空间无法提供足够的连续内存时,它将失败。仍然没有有效的原因这是无效的。我回答了OP的问题,这段代码可以在需要大量内存分配的应用程序中使用,这些内存分配类似于文件。该文件可用于进程间通信。@NineBerry-谢谢您的评论。你说得对。CreateNew的实现方式需要一个预先大小要求。如果可以只使用MemoryStream,为什么要使用mmf?嗯,对于其中一个,mmf可以通过传递句柄或指针在进程之间共享。要使用mmf,必须指定最大大小。选择此大小太小,当PDF需要更多内存时将失败。选择此大小太高,当进程中的地址空间无法提供足够的连续内存时,它将失败。仍然没有有效的原因这是无效的。我回答了OP的问题,这段代码可以在需要大量内存分配的应用程序中使用,这些内存分配类似于文件。该文件可用于进程间通信。@NineBerry-谢谢您的评论。你说得对。CreateNew的实现方式需要一个预先的大小要求。