生成pdf而不将其保存到磁盘然后将其显示给浏览器

Posted

技术标签:

【中文标题】生成pdf而不将其保存到磁盘然后将其显示给浏览器【英文标题】:Generate a pdf without saving it to disk then show it to browser 【发布时间】:2015-10-14 06:38:35 【问题描述】:

是否可以合并pdf文件而不将其保存到磁盘?

我有一个生成的 pdf(通过 itextsharp)和一个物理 pdf 文件。这两个应该在浏览器中显示为合并。

我目前拥有的是,(伪代码)

public ActionResult Index()

  // Generate dyanamic pdf first
  var pdf = GeneratePdf();
  // Then save it to disk for retrieval later
  SaveToDisc(pdf);
  // Retrieve the static pdf
  var staticPdf = GetStaticPdf();
  // Retrieve the generated pdf that was made earlier
  var generatedPdf = GetGeneratedPdf("someGeneratedFile.pdf");
  // This creates the merged pdf
  MergePdf(new List<string>  generatedPdf, staticPdf , "mergedPdf.pdf");

  // Now retrieve the merged pdf and show it to the browser
  var mergedPdf = GetMergedPdf("mergedPdf.pdf");

  return new FileStreamResult(mergedFile, "application/pdf");

这可行,但我只是想知道是否可以合并 pdf 并将其显示给浏览器而不在光盘上保存任何内容?

任何帮助将不胜感激。谢谢

【问题讨论】:

我们一直在我的商店将非磁盘 pdf 推送到 http 响应中。只需将原始二进制文件的引用作为字节数组,清除响应,设置标题(尤其是 mime 类型),然后写入。 @PaulKienitz 很酷,你可以用代码给我看吗?供参考 【参考方案1】:

您可以尝试像这样使用PdfWriter 类和MemoryStream

using (MemoryStream ms = new MemoryStream())

    Document doc = new Document(PageSize.A4, 60, 60, 10, 10);
    PdfWriter pw = PdfWriter.GetInstance(doc, ms);
    //your code to write something to the pdf
    return ms.ToArray();

您也可以参考:Creating a PDF from a RDLC Report in the Background

另外:如果data是内存中的PDF,那么你需要做data.CopyTo(base.Response.OutputStream);

【讨论】:

所以我可以做这样的事情吗?将物理文件转换为 MemoryStream,然后将其附加到 Generated One? @BoyPasmo:- 你可以试试看!【参考方案2】:

试试这个

    string path = Server.MapPath("Yourpdf.pdf");
    WebClient client = new WebClient();
    Byte[] buffer = client.DownloadData(path);

    if (buffer != null)
    
        Response.ContentType = "application/pdf";
        Response.AddHeader("content-length", buffer.Length.ToString());
        Response.BinaryWrite(buffer);
    

【讨论】:

以上是关于生成pdf而不将其保存到磁盘然后将其显示给浏览器的主要内容,如果未能解决你的问题,请参考以下文章

如何在python中生成文件而不将其保存到磁盘?

如何在不使用 Ruby 保存到磁盘的情况下生成 zip 文件?

我已经从 html 创建了 pdf 现在我想将此 pdf 上传到 cloudinary 或我们的服务器而不将其保存到客户端 PC

将远程文件放入hadoop而不将其复制到本地磁盘

如何使用CakePdf创建和下载PDF,而不是在浏览器中显示它

在内存中创建 eml 文件而不将其保存在磁盘上