如何使用asp.net c#和iTextSharp直接打印动态创建的PDF文件?

12 浏览
0 Comments

如何使用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文件。

0
0 Comments

问题的原因是,服务器无法直接发送打印指令给客户端,也无法控制客户端的打印功能。解决方法是通过在客户端使用JavaScript来实现打印功能。

解决方法一是将PDF文件嵌入到一个iframe中,并在iframe加载完成后调用JavaScript的window.print()方法来触发打印操作。

解决方法二是使用PDFObject来嵌入PDF文件,并同样使用JavaScript来实现打印操作。

解决方法三是在生成PDF文件时,添加JavaScript代码到PDF中,使其在加载时尝试自动打印。这种方法需要注意的是,并非所有的PDF渲染器都支持JavaScript,因此需要测试各种客户端设备来确保其有效性。同时,由于JavaScript代码是嵌入到PDF文件中的,因此如果用户将其保存到磁盘上,每次打开都会触发自动打印,这可能会非常烦人。

总结起来,通过在客户端使用JavaScript来实现打印功能是解决这个问题的常见方法。

0