在 C# 上合并多个 PDF 表单
Merging several PDF forms on C#
嘿,我无法将多个 PDF 表单合并为一个。
我已经尝试使用 PDFSharp 来完成它,但它无法打开只读 pdf 表单。我已经用 pdfsharp 和他的 unethicalreading 参数进行了测试,它完成了一些工作。它合并 PDF 但删除了表单内容...(遗憾的是我错过了填写它的时间...)
这是我的代码的一些部分,也许它只是一个我没有考虑过的缺失参数...
private void MergePDFs(string outPutFilePath, params string[] filesPath)
{
List<PdfReader> readerList = new List<PdfReader>();
foreach (string filePath in filesPath)
{
PdfReader pdfReader = new PdfReader(filePath);
PdfReader.unethicalreading = true;
readerList.Add(pdfReader);
}
Document document = new Document(PageSize.A4, 0, 0, 0, 0);
PdfWriter writer = PdfWriter.GetInstance(document, new FileStream(outPutFilePath, FileMode.Create));
document.Open();
foreach (PdfReader reader in readerList)
{
for (int i = 1; i <= reader.NumberOfPages; i++)
{
PdfImportedPage page = writer.GetImportedPage(reader, i);
document.Add(iTextSharp.text.Image.GetInstance(page));
}
}
document.Close();
}
因此,如果有人知道如何合并“受修改保护”的 PDF 表单,我已准备好对其进行测试!
编辑:
在对非受保护的 PDF 表单进行一些其他测试后,它似乎不是一个保护问题。我的 MergePDFs 没有使用表单内容。
所以任务仍然是“在 C# 上合并多个 PDF 表单”
EDIT2:这是我要合并的 2 个文件。一种受 modif 保护,一种不受保护。两个都满了。
https://drop.infini.fr/r/XFt_Sd8gFc#7thQxyjeGdo8uIkXN6oys82KLB8VE0AHmflb0uYRkVM=
https://drop.infini.fr/r/NUa2n2No0R#FaOAGyzk0SrTDtB6CiXUhF7WEKw0EHGHHM7gaKz20o4=
感谢@mkl 的评论,我找到了解决方案。
private void Merge2PDFs(string outPutFilePath, params string[] filesPath)
{
byte[] mergedPdf = null;
using (FileStream fs = new FileStream(outPutFilePath, FileMode.OpenOrCreate))
{
using (MemoryStream ms = new MemoryStream())
{
using (Document PDFdocument = new Document())
{
using (PdfCopy copy = new PdfCopy(PDFdocument, ms))
{
PDFdocument.Open();
foreach (string filePath in filesPath)
{
PdfReader reader = new PdfReader(filePath);
PdfReader.unethicalreading = true;
// loop over the pages in that document
int n = reader.NumberOfPages;
for (int page = 0; page < n;)
{
copy.AddPage(copy.GetImportedPage(reader, ++page));
}
}
}
}
mergedPdf = ms.ToArray();
fs.Write(mergedPdf, 0, mergedPdf.Length);
fs.Close();
}
}
}
实际上,我的第一个方法只复制基本文档而不是表单内容。
this post for more information
嘿,我无法将多个 PDF 表单合并为一个。 我已经尝试使用 PDFSharp 来完成它,但它无法打开只读 pdf 表单。我已经用 pdfsharp 和他的 unethicalreading 参数进行了测试,它完成了一些工作。它合并 PDF 但删除了表单内容...(遗憾的是我错过了填写它的时间...)
这是我的代码的一些部分,也许它只是一个我没有考虑过的缺失参数...
private void MergePDFs(string outPutFilePath, params string[] filesPath)
{
List<PdfReader> readerList = new List<PdfReader>();
foreach (string filePath in filesPath)
{
PdfReader pdfReader = new PdfReader(filePath);
PdfReader.unethicalreading = true;
readerList.Add(pdfReader);
}
Document document = new Document(PageSize.A4, 0, 0, 0, 0);
PdfWriter writer = PdfWriter.GetInstance(document, new FileStream(outPutFilePath, FileMode.Create));
document.Open();
foreach (PdfReader reader in readerList)
{
for (int i = 1; i <= reader.NumberOfPages; i++)
{
PdfImportedPage page = writer.GetImportedPage(reader, i);
document.Add(iTextSharp.text.Image.GetInstance(page));
}
}
document.Close();
}
因此,如果有人知道如何合并“受修改保护”的 PDF 表单,我已准备好对其进行测试!
编辑: 在对非受保护的 PDF 表单进行一些其他测试后,它似乎不是一个保护问题。我的 MergePDFs 没有使用表单内容。
所以任务仍然是“在 C# 上合并多个 PDF 表单”
EDIT2:这是我要合并的 2 个文件。一种受 modif 保护,一种不受保护。两个都满了。 https://drop.infini.fr/r/XFt_Sd8gFc#7thQxyjeGdo8uIkXN6oys82KLB8VE0AHmflb0uYRkVM= https://drop.infini.fr/r/NUa2n2No0R#FaOAGyzk0SrTDtB6CiXUhF7WEKw0EHGHHM7gaKz20o4=
感谢@mkl 的评论,我找到了解决方案。
private void Merge2PDFs(string outPutFilePath, params string[] filesPath)
{
byte[] mergedPdf = null;
using (FileStream fs = new FileStream(outPutFilePath, FileMode.OpenOrCreate))
{
using (MemoryStream ms = new MemoryStream())
{
using (Document PDFdocument = new Document())
{
using (PdfCopy copy = new PdfCopy(PDFdocument, ms))
{
PDFdocument.Open();
foreach (string filePath in filesPath)
{
PdfReader reader = new PdfReader(filePath);
PdfReader.unethicalreading = true;
// loop over the pages in that document
int n = reader.NumberOfPages;
for (int page = 0; page < n;)
{
copy.AddPage(copy.GetImportedPage(reader, ++page));
}
}
}
}
mergedPdf = ms.ToArray();
fs.Write(mergedPdf, 0, mergedPdf.Length);
fs.Close();
}
}
}
实际上,我的第一个方法只复制基本文档而不是表单内容。
this post for more information