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

本文关键字:然后 显示 浏览器 磁盘 pdf 保存 生成 | 更新日期: 2023-09-27 18:17:40

是否可以合并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不保存到磁盘,然后显示给浏览器

您可以尝试像这样使用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();
}

您也可以参考:在后台从RDLC报告创建PDF

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

try this

    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);
    }