如何合并物理文件(pdf)和生成的文件(pdf)并将它们输出到浏览器?

Posted

技术标签:

【中文标题】如何合并物理文件(pdf)和生成的文件(pdf)并将它们输出到浏览器?【英文标题】:How to merge a physical file (pdf) and a generated one (pdf) and output them to the browser? 【发布时间】:2016-01-10 23:27:36 【问题描述】:

一直在努力解决这个问题。

我有一个物理文件 (pdf) 和一个由 iTextSharp (pdf) 生成的生成文件,我的目标是合并它们并将其输出到浏览器。

顺便说一句,我使用的是 ASP.NET MVC 4

所以,在我的控制器中,我有这样的东西:

public ActionResult Index()

  MemoryStream memoryStream = new MemoryStream();
  var path = Server.MapPath("~/Doc/../myfile.pdf"); // This is my physical file
  var fileStream = new FileStream(path, FileMode.Open, FileAccess.Read);

  GenerateFile(); // This is my generated file thru iTextSharp

  Response.AddHeader("Content-Disposition", "inline");
  memoryStream.Position = 0;

  return new FileStreamResult(// Maybe merged file goes here? not sure.
                             ,"application/pdf");


private void GenerateFile()

  MemoryStream stream = new MemoryStream();
  var document = new Document(/*some settings here*/);
  PdfWriter.GetInstance(document, stream).CloseStream = false;

  document.Open();
  // generate pdf here
  document.Close();

是否可以将生成的 pdf 设置为第一个(或它将生成多少页)页面,然后附加物理文件?

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

【问题讨论】:

请访问此链接***.com/questions/6029142/… var generatedFile = GenerateFile();GenerateFile 返回void @codroipo 哦,是的,那是个错误。我会编辑它。 @MuhammadUsman 谢谢老兄,我试试这个 @MuhammadUsman 嘿伙计,你能告诉我如何使用这个功能吗?似乎无法使它工作。我无法使其与生成的 pdf 和物理 pdf 一起使用 【参考方案1】:

我可以为 c# 提供一个示例

首先你需要安装一个第三方库:例如pdfium.net sdk

你可以通过 nuget 做到这一点 安装包 pdfium.net.sdk

public void MergeDocument()

    //Initialize the SDK library
    //You have to call this function before you can call any PDF processing functions.
    PdfCommon.Initialize();

    //Open and load a PDF document in which will be merged other files
    using (var mainDoc = PdfDocument.Load(@"c:\test001.pdf"))
    
        //Open one PDF document.
        using (var doc = PdfDocument.Load(@"c:\doc1.pdf"))
        
            //Import all pages from document
            mainDoc.Pages.ImportPages(
                doc,
                string.Format("1-0", doc.Pages.Count),
                mainDoc.Pages.Count
                );
        

        //Open another PDF document.
        using (var doc = PdfDocument.Load(@"c:\doc2.pdf"))
        
            //Import all pages from document
            mainDoc.Pages.ImportPages(
                doc,
                string.Format("1-0", doc.Pages.Count),
                mainDoc.Pages.Count
                );
        

        mainDoc.Save(@"c:\ResultDocument.pdf", SaveFlags.NoIncremental);


    
    //Release all resources allocated by the SDK library
    PdfCommon.Release();

【讨论】:

你忘了说 patagames 提供付费解决方案【参考方案2】:

如果有帮助的话,我已经使用 PDFSharp 做了类似的事情(合并物理和代码生成的 PDF)。

PdfDocument document = new PdfDocument();

PdfDocument physicalDoc = PdfSharp.Pdf.IO.PdfReader.Open(filepath);
PdfPage coverPage = physicalDoc.Pages[0];

document.AddPage(coverPage);

然后添加您自己生成的页面可以这样完成:

PdfPage generatedPage = new PdfPage();
XGraphics g = XGraphics.FromPdfPage(generatedPage);

g.DrawRectangle(color, x, y, width, height);  
g.DrawString("This release document describes the contents of..."
             ,font, textColor, x, y);

document.AddPage(generatedPage)

【讨论】:

你怎么知道哪个页面会先出现? @BoyPasmo Pages 数组的排序方式与物理 pdf 相同。所以 PDF 中的第一页将是数组中的第一页 生成的pdf怎么样?我将如何添加它们?很抱歉提出此类问题 @BoyPasmo 我已经更新了我的答案以包含生成的页面。您需要按照希望它们在 PDF 中显示的顺序添加页面。

以上是关于如何合并物理文件(pdf)和生成的文件(pdf)并将它们输出到浏览器?的主要内容,如果未能解决你的问题,请参考以下文章

[多个双层pdf文件合并]什么是双层PDF?如何用高拍仪生成双层PDF文件?

合并/合并几个PDF文件[重复]

怎样将多个PDF文件合并

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

合并 PDF 文件

实用脚本!Python 提取 PDF 指定内容生成新文件!