如何使用asp.net c#和iTextSharp直接打印动态创建的PDF文件?
如何使用asp.net c#和iTextSharp直接打印动态创建的PDF文件?
我已经找了很多方法,但似乎找不到适合我的方式。我正在创建一个网站,有两个按钮,一个是下载按钮(运作良好),另一个是打印按钮,应该打印PDF文件(甚至只是在Adobe中打开PDF文件并显示打印对话框)。\n我问题与其他很多问题最大的不同之处在于,我不想创建一个新文档。我的PDF是使用我已经创建好的模板PDF生成的。\n我只需要一种打印文档的方法。我不能将其保存在服务器上,因为我希望客户能够打印它。我尝试过MemoryStream,但它不起作用(尽管我可能没有正确编写代码,以下是代码)。标题是从另一个页面获取的。\n
using (var ms = new MemoryStream()) { Response.ContentType = "application/octet-stream"; Response.AppendHeader("Content-Disposition", header); Response.Buffer = true; Response.Clear(); var bytes = ms.ToArray(); PdfReader r = new PdfReader(template); using (PdfStamper ps = new PdfStamper(r, Response.OutputStream)) { AcroFields af = ps.AcroFields; ... ps.FormFlattening = true; } Response.OutputStream.Write(bytes, 0, bytes.Length); Response.OutputStream.Flush();
\n再次强调,我希望客户在点击打印按钮后能够打印生成的PDF文件。
问题的原因是,服务器无法直接发送打印指令给客户端,也无法控制客户端的打印功能。解决方法是通过在客户端使用JavaScript来实现打印功能。
解决方法一是将PDF文件嵌入到一个iframe中,并在iframe加载完成后调用JavaScript的window.print()方法来触发打印操作。
解决方法二是使用PDFObject来嵌入PDF文件,并同样使用JavaScript来实现打印操作。
解决方法三是在生成PDF文件时,添加JavaScript代码到PDF中,使其在加载时尝试自动打印。这种方法需要注意的是,并非所有的PDF渲染器都支持JavaScript,因此需要测试各种客户端设备来确保其有效性。同时,由于JavaScript代码是嵌入到PDF文件中的,因此如果用户将其保存到磁盘上,每次打开都会触发自动打印,这可能会非常烦人。
总结起来,通过在客户端使用JavaScript来实现打印功能是解决这个问题的常见方法。