如何使用 C# 合并包含所有者密码的 PDF 文档

Posted

技术标签:

【中文标题】如何使用 C# 合并包含所有者密码的 PDF 文档【英文标题】:How to merge PDF documents that contains owner passwords with C# 【发布时间】:2020-01-29 19:58:09 【问题描述】:

我正在使用 EVOPDF 库将多个 PDF 文档合并为一个 PDF 文档。

当输入的 PDF 文档有所有者密码时,输出的文档只包含空白页。

我看到 itext7 具有删除所有者密码的功能,其中包含以下行: reader.SetUnethicalReading(true);

如何在 EVOPDF 中或使用免费或开源库来完成此操作? 因为使用 itext7 您需要为商业用途付费,而我已经为 EVOPDF 许可证付费。

当 PDF 文档不包含所有者密码或我手动删除它们时,合并工作正常

List<Byte[]> totalBytes = new List<byte[]>();
byte[] pdfBytes = null;

//Populate the totalBytes List with the PDF byte arrays

MemoryStream ms1 = new MemoryStream(totalBytes[0])
MemoryStream ms2 = new MemoryStream(totalBytes[1])

pdfMerge.AppendPDFStream(ms1);
pdfMerge.AppendPDFStream(ms2);

pdfBytes = pdfMerge.RenderMergedPDFDocument();

Response.Clear();
Response.ContentType = "application/pdf";

Response.AddHeader("content-disposition", "filename=" + savedFilename);
Response.AddHeader("Content-Length", pdfBytes.Length.ToString());

Response.BinaryWrite(pdfBytes.ToArray());
pdfBytes = null;
Response.Flush();
Response.Close();
Response.End();

【问题讨论】:

【参考方案1】:

EvoPdf 合并工具有一个附加密码保护流的接口:http://www.evopdf.com/help/pdf_merge/html/M_EvoPdf_PdfMerge_PDFMerge_AppendPDFStream_3.htm

函数原型为:

public void AppendPDFStream(
   Stream pdfStream,
   string password,
   int startIndex,
   int length
)

【讨论】:

以上是关于如何使用 C# 合并包含所有者密码的 PDF 文档的主要内容,如果未能解决你的问题,请参考以下文章

加密的 PDF 文档如何同时使用用户和所有者密码进行加密?

c# Word-AddIn 将 activeDocument 转换为虚拟 PDF 并将它们合并为一个 PDF 文档

C# 将Word转为PDF时,设置PDF文档保护

C#/VB.NET 合并PDF页面

合并PDF c#

分享一个PDF增加密码的工具