gpt4 book ai didi

c# - ItextSharp 在尝试打印时需要一个 Dict 对象

转载 作者:太空宇宙 更新时间:2023-11-03 14:22:56 24 4
gpt4 key购买 nike

我有一个网页,允许用户查看 pdf 和打印 pdf。打印 pdf 是显示 pdf 的副本,我正在使用 ItextSharp 注入(inject) javascript 以允许自动打印。我有一个允许用户上传 pdf 的方法,它调用下面的这个方法将显示副本复制到 pdf 中。然后将两个 pdf 保存在数据库中。但是,当用户点击我的网页上的打印按钮时,他们会收到以下错误“需要一个字典对象”。下面是我在自动打印中添加的代码,对我来说效果很好,但在我的客户网站上却不行。

我做错了什么可能会损坏文件。原始 pdf 内容作为二进制对象传入。

非常感谢您对此提供任何帮助,因为我对此非常困惑。我也在使用 ASP.NET MVC2。

MemoryStream originalPdf = new MemoryStream(Content.BinaryData);    
MemoryStream updatedPdf = new MemoryStream();
updatedPdf.Write(Content.BinaryData,0, Content.BinaryData.Length);
PdfReader pdfReader = new PdfReader(originalPdf);
PdfStamper pdfStamper = new PdfStamper(pdfReader, updatedPdf);

if (autoPrinting)
{
pdfStamper.JavaScript = "this.print(true);\r";
}
else
{
pdfStamper.JavaScript = null;
}

pdfStamper.Close();
pdfReader.Close();

Content.BinaryData = updatedPdf.ToArray();

最佳答案

不要将原始 PDF 写入您的输出。 pdfStamper.close() 将为您完成所有的写作,即使是在追加模式下(您没有使用)。

您的代码应为:

MemoryStream originalPdf = new MemoryStream(Content.BinaryData);
MemoryStream updatedPdf = new MemoryStream();

// Don't do that.
//updatedPdf.Write(Content.BinaryData,0, Content.BinaryData.Length);

PdfReader pdfReader = new PdfReader(originalPdf);
PdfStamper pdfStamper = new PdfStamper(pdfReader, updatedPdf);

if (autoPrinting) {
pdfStamper.JavaScript = "this.print(true);\r";
} else {
pdfStamper.JavaScript = null;
}

pdfStamper.Close(); // this does it for you.
pdfReader.Close();

Content.BinaryData = updatedPdf.ToArray();

我很惊讶这“对你有用”。如果不出意外,我预计 JS 会失败,因为字节偏移量都是错误的......事实上,你所有的偏移量都是错误的。我认为我对 C# 的无知正在显现。

但是 Write() 的行为与我想象的一样,所以我又感到惊讶了。

关于c# - ItextSharp 在尝试打印时需要一个 Dict 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4850122/

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