【发布时间】:2016-04-29 15:07:44
【问题描述】:
我有必须合并为一个的 PDF 文件。如果我一次拥有所有 PDF 文件,这不是问题。然而,PDF 文件是分阶段进入的,并且由于工作流程的原因,我们需要在它们到达时将它们合并。
所以工作流程如下所示:
1:如果不存在 PDF 文件,则创建一个并将第一组页面合并到新的 PDF 文件中,然后关闭。
2:如果 PDF 已经存在(目标文件)打开它并将新页面合并到目标 PDF 文件中。然后关闭
3:重复。
下面是我的代码,但它只是覆盖了以前插入的页面,所以我的问题是如何使用 PDFSmartCopy 将 PDF 文件插入到现有的 PDF 文件中。
我需要使用 PDFSmartCopy 因为我需要优化字体。 我在StackOverflow 上找到了这个不错的文档,它展示了如何追加,但他们使用的是 PDFSmartCopy 以外的不同技术。
注意:我不确定是否需要创建一个中间 PDF 文件来保存目标 PDF 页面,然后删除目标 PDF,然后将中间 PDF 保存为目标 PDF。但是,在我这样做之前,我想知道是否有一种方法可以在没有中间步骤的情况下做到这一点。
using (FileStream stream = new FileStream(targetFile, FileMode.OpenOrCreate))
{
Document pdfDoc = new Document(PageSize.LETTER);
PdfSmartCopy pdf = new PdfSmartCopy(pdfDoc, stream);
pdfDoc.Open();
foreach (string file in files)
{
PdfReader reader = new PdfReader(file);
pdf.AddDocument(reader);
pdf.FreeReader(reader) ;
reader.Close();
}
}
【问题讨论】:
-
我认为这就是您正在寻找的Edit DirectContent of iTextSharp PdfSmartCopy class。如果不是,我认为这会让你朝着你需要去的方向前进。我没用过
PdfSmartCopy。希望对您有所帮助。 -
嗨,埃里克,谢谢你,但我最终会遇到同样的问题。该文件将被新数据覆盖,旧数据将丢失。 ..
-
当我将 pdf 合并在一起时,我会使用原始文件和将所有内容合并到的文件创建子文件夹。我创建了一个面包屑,这样如果出现问题,我仍然可以从一开始就拥有一切。
-
@Eric,不是我的意思是合并 PDF 文件(目标)页面被我试图合并的 PDF 文件覆盖。因此,如果我的第一次合并是 10 页有效,如果第二次合并是 2 页,我应该有 12 页,但目标 PDF 中只有两页。我开始倾向于尝试在内存中执行此操作,但是这些文件有 37,000 多页。
-
ooooo .... 所以在查看源代码后,我看起来您可以使用与
PdfCopy相同的代码。如果您希望我用于将文件合并在一起,我可以添加下面的代码。您只需将PdfCopy替换为PdfSmartCopy
标签: c# pdf itextsharp