Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ItextSharp在尝试打印时需要Dict对象_C#_Asp.net Mvc_Itextsharp - Fatal编程技术网

C# ItextSharp在尝试打印时需要Dict对象

C# ItextSharp在尝试打印时需要Dict对象,c#,asp.net-mvc,itextsharp,C#,Asp.net Mvc,Itextsharp,我有一个网页,允许用户查看pdf和打印pdf。打印pdf是显示pdf的副本,我正在使用ItextSharp注入javascript以允许自动打印。我有一个方法,允许用户上传pdf,它调用下面的方法将显示副本复制到pdf中。然后,两个pdf都保存在数据库中。但是,当用户点击“我的网页”上的“打印”按钮时,他们会收到以下错误“预期为dict对象”。下面是我在自动打印中添加的代码,它对我来说很好,但在我的客户网站上不起作用 我做错了任何可能会破坏文件的事情。原始pdf内容作为二进制对象传入 在这方面的

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

我做错了任何可能会破坏文件的事情。原始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()的行为和我想象的一样,所以我又开始感到惊讶了。

干杯马克谢谢你指出这一点,看起来它已经成功了。谢谢,谢谢!这解决了我在不同文档中遇到的几个问题。