我有一个网页,允许用户查看pdf并打印pdf。 print pdf是display 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();
答案 0 :(得分:1)
不要将原始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()表现得像我想象的那样,所以我又感到惊讶。