如何合并物理文件(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)
【讨论】:
你怎么知道哪个页面会先出现? @BoyPasmoPages
数组的排序方式与物理 pdf 相同。所以 PDF 中的第一页将是数组中的第一页
生成的pdf怎么样?我将如何添加它们?很抱歉提出此类问题
@BoyPasmo 我已经更新了我的答案以包含生成的页面。您需要按照希望它们在 PDF 中显示的顺序添加页面。以上是关于如何合并物理文件(pdf)和生成的文件(pdf)并将它们输出到浏览器?的主要内容,如果未能解决你的问题,请参考以下文章