iTextSharp PdfStamper 始终只写出 15 个字节
iTextSharp PdfStamper consistently only writing out 15 bytes
我正在尝试使用以下代码编写一种加密现有 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();
}
}
}
}
我正在遵循我在网上其他地方看到的相同模式,但我 运行 遇到了一个问题,即写入的 MemoryStream 只写入了 15 个字节,当文件传递给 PdfReader 的大小约为 8Kb。在使用 FileStreams 时,我没有 运行 解决这个问题,但如果可能的话,我更愿意在这里使用 MemoryStreams。任何帮助将不胜感激。
好的,所以我的问题是从 PdfStamper using 块中返回 MemoryStream 字节。一定有一个隐式的 Flush 正在进行,但并没有发生,因为我返回字节的时间太早了。我将我的代码重构为以下代码,该代码有效:
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();
}
}
我正在尝试使用以下代码编写一种加密现有 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();
}
}
}
}
我正在遵循我在网上其他地方看到的相同模式,但我 运行 遇到了一个问题,即写入的 MemoryStream 只写入了 15 个字节,当文件传递给 PdfReader 的大小约为 8Kb。在使用 FileStreams 时,我没有 运行 解决这个问题,但如果可能的话,我更愿意在这里使用 MemoryStreams。任何帮助将不胜感激。
好的,所以我的问题是从 PdfStamper using 块中返回 MemoryStream 字节。一定有一个隐式的 Flush 正在进行,但并没有发生,因为我返回字节的时间太早了。我将我的代码重构为以下代码,该代码有效:
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();
}
}