gpt4 book ai didi

c# - PdfStamper 是否正在处理输出流? (iTextSharp)

转载 作者:行者123 更新时间:2023-11-30 20:44:34 31 4
gpt4 key购买 nike

我正在使用 iTextSharp 通过 C# 将页码添加到 PDF。在运行代码分析时,怀疑输出的 MemoryStream 被处理了不止一次。 See this warning generated by Visual Studio.这是 API 问题吗? PdfStamper 的第二个参数是否应该标记为 out?我有办法修复此警告吗?

MemoryStream mem = null;
PdfReader reader = null;
PdfStamper stamper = null;
try
{
mem = new MemoryStream();
reader = new PdfReader(m_pdf);
stamper = new PdfStamper(reader, mem);

// do stuff
stamper.Close();
var result = mem.ToArray();
}
finally
{
if(stamper != null)
{
stamper.Dispose();
}

if (reader != null)
{
reader.Dispose();
}

if (mem != null)
{
mem.Dispose();
}
}

最佳答案

这不是真正的答案,而是扩展@mkl 所说的内容,切换到using 指令,因为它们会自动为您执行try/finally 操作。

以下是我(可能还有其他使用 iTextSharp 的人)通常推荐的与 iTextSharp 交互的方式。外部 using 是 BCL 内容,在本例中 MemoryStream 和内部 using 语句是 iTextSharp 内容。

//Will hold our raw PDF bytes
Byte[] result;

//BCL stuff first
using (var mem = new MemoryStream()) {

//iText stuff in the middle
using (var reader = new PdfReader(m_pdf)) {
using (var stamper = new PdfStamper(reader, mem)) {
// do stuff

}
}

//iText is completely done and disposed of at this point
//so we can now grab the raw bytes that represent a PDF
result = mem.ToArray();
}

顺便说一句,不一定是为了 OP 但以防万一其他人看到这一点,几乎从来没有(“几乎从不”我的意思是“从不”)一个很好的理由 关闭底层流。您可以通过获取原始字节并再次写入来从流中读取数据,这毫无意义。

关于c# - PdfStamper 是否正在处理输出流? (iTextSharp),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29141804/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com