我正在尝试使用以下代码编写一种加密现有pdf并将加密的pdf写入内存流的方法:
public byte[] ProtectPdfStreamWithPassword(
string filePath,
string password)
{
using (var outStream = new MemoryStream())
{
using (var reader = new PdfReader(filePath))
{
using (var stamper = new PdfStamper(reader, outStream))
{
var passwordBytes =
Encoding.ASCII.GetBytes(password);
stamper.SetEncryption(
passwordBytes,
passwordBytes,
PdfWriter.AllowPrinting,
PdfWriter.ENCRYPTION_AES_256);
return outStream.ToArray();
}
}
}
}
我遵循与我在网上其他地方看到的相同的模式,但我遇到了一个问题,即当传递给 PdfReader 的文件大约有 8Kb 时,写入的 MemoryStream 只有 15 个字节写入它。 我在使用 FileStreams 时没有遇到这个问题,但如果可能的话,我更喜欢在这里使用 MemoryStreams。 任何帮助将不胜感激。
好的
,所以我的问题是使用块从PdfStamper中返回MemoryStream字节。 一定有一个隐式的刷新没有发生,因为我太快返回字节了。 我将代码重构为以下内容,该代码有效:
public byte[] ProtectPdfStreamWithPassword(
string filePath,
string password)
{
using (var outStream = new MemoryStream())
{
using (var reader = new PdfReader(filePath))
{
using (var stamper = new PdfStamper(reader, outStream))
{
var passwordBytes =
Encoding.ASCII.GetBytes(password);
stamper.SetEncryption(
passwordBytes,
passwordBytes,
PdfWriter.AllowPrinting,
PdfWriter.ENCRYPTION_AES_256);
}
}
return outStream.ToArray();
}
}