C# ItextSharp在尝试打印时需要Dict对象
我有一个网页,允许用户查看pdf和打印pdf。打印pdf是显示pdf的副本,我正在使用ItextSharp注入javascript以允许自动打印。我有一个方法,允许用户上传pdf,它调用下面的方法将显示副本复制到pdf中。然后,两个pdf都保存在数据库中。但是,当用户点击“我的网页”上的“打印”按钮时,他们会收到以下错误“预期为dict对象”。下面是我在自动打印中添加的代码,它对我来说很好,但在我的客户网站上不起作用 我做错了任何可能会破坏文件的事情。原始pdf内容作为二进制对象传入 在这方面的任何帮助都是非常感谢的,因为我对这一点非常困惑。我也在使用ASP.NET MVC2C# ItextSharp在尝试打印时需要Dict对象,c#,asp.net-mvc,itextsharp,C#,Asp.net Mvc,Itextsharp,我有一个网页,允许用户查看pdf和打印pdf。打印pdf是显示pdf的副本,我正在使用ItextSharp注入javascript以允许自动打印。我有一个方法,允许用户上传pdf,它调用下面的方法将显示副本复制到pdf中。然后,两个pdf都保存在数据库中。但是,当用户点击“我的网页”上的“打印”按钮时,他们会收到以下错误“预期为dict对象”。下面是我在自动打印中添加的代码,它对我来说很好,但在我的客户网站上不起作用 我做错了任何可能会破坏文件的事情。原始pdf内容作为二进制对象传入 在这方面的
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()的行为和我想象的一样,所以我又开始感到惊讶了。干杯马克谢谢你指出这一点,看起来它已经成功了。谢谢,谢谢!这解决了我在不同文档中遇到的几个问题。