在网站上打印PDF

在网站上打印PDF,pdf,iframe,printing,dynamically-generated,Pdf,Iframe,Printing,Dynamically Generated,我几天来一直在寻找解决这个问题的办法 描述:我有一个网站,通过iFrame动态加载PDF。PDF保存在服务器上,网站用户可以在网站上查看PDF 问题:在网站上引入一个打印按钮,用于打印动态创建并保存在服务器上的PDF 这可能吗?我正在考虑一个跨浏览器的实现,以使事情变得更糟。我在网上尝试了n个JS选项,但没有一个是有效的。我似乎无法以与外观相同的方式打印PDF。简而言之,我试图模拟PDF加载时出现的打印按钮。是否有将pdf文档从服务器传递到“打印”对话框的选项?我不确定这是否可行,但您可以尝试启

我几天来一直在寻找解决这个问题的办法


描述:我有一个网站,通过iFrame动态加载PDF。PDF保存在服务器上,网站用户可以在网站上查看PDF

问题:在网站上引入一个打印按钮,用于打印动态创建并保存在服务器上的PDF


这可能吗?我正在考虑一个跨浏览器的实现,以使事情变得更糟。我在网上尝试了n个JS选项,但没有一个是有效的。我似乎无法以与外观相同的方式打印PDF。简而言之,我试图模拟PDF加载时出现的打印按钮。是否有将pdf文档从服务器传递到“打印”对话框的选项?

我不确定这是否可行,但您可以尝试启动一个带有对话框的弹出窗口。然后关闭弹出窗口。最后一部分可能很棘手,因为我认为没有明确的方法可以知道打印对话框是否已关闭。

说明:我有一个网站,可以通过iFrame动态加载PDF。PDF保存在服务器上,网站用户可以在网站上查看PDF

问题:在网站上引入一个打印按钮,用于打印动态创建并保存在服务器上的PDF

解决方案:我无法找到这个问题的确切解决方案,但以下是我解决问题的方法-

  • 根据req创建“打印”,并将其重定向到另一个只有PDF的页面
  • 复制以前的PDF&使用JS-this.print()创建新的PDF,这样当它打开时,打印对话框会直接弹出给用户
  • 在新页面中-

        if ("Location of PDF " != null)
            {
                sPdf = "Location of PDF ";
                PdfReader pReader = new PdfReader(sPdf);
                Document document = new Document
                    (pReader.GetPageSizeWithRotation(ApplicationConstants.INDEX_ONE));
                int n = pReader.NumberOfPages;
                FileStream fs = new FileStream
                    ("New PDF location",
                    FileMode.Create, FileAccess.Write);
                PdfCopy copy = new PdfCopy(document, fs);
                // Write to pdf 
                document.Open();
                for (int i = ApplicationConstants.INDEX_ONE; i <= n; i++)
                {
                    PdfImportedPage page = copy.GetImportedPage(pReader, i);
                    copy.AddPage(page);
                }
                copy.AddJavaScript("this.print(true);", true);
                document.Close();
                pReader.Close();
    
                inStr = File.OpenRead("New PDF location");
                while ((bytecnt = inStr.Read
                    (buffer, ApplicationConstants.INDEX_ZERO, buffer.Length))
                    > ApplicationConstants.INDEX_ZERO)
                {
                    if (Context.Response.IsClientConnected)
                    {
                        Context.Response.ContentType = "application/PDF";
                        Context.Response.OutputStream.Write(buffer, 
                            ApplicationConstants.INDEX_ZERO, buffer.Length);
                        Context.Response.Flush();
                    }
                } 
            }
    
    if(“PDF位置”!=null)
    {
    sPdf=“PDF的位置”;
    PdfReader pReader=新PdfReader(sPdf);
    文档=新文档
    (pReader.GetPageSizeWithRotation(ApplicationConstants.INDEX_ONE));
    int n=预订单的页数;
    FileStream fs=newfilestream
    (“新PDF位置”,
    FileMode.Create、FileAccess.Write);
    PdfCopy副本=新的PdfCopy(文件,fs);
    //写入pdf
    document.Open();
    对于(int i=ApplicationConstants.INDEX_ONE;i ApplicationConstants.INDEX_ZERO)
    {
    if(Context.Response.IsClientConnected)
    {
    Context.Response.ContentType=“应用程序/PDF”;
    Context.Response.OutputStream.Write(缓冲区,
    ApplicationConstants.INDEX_零,buffer.Length);
    Context.Response.Flush();
    }
    } 
    }
    

    请注意,我正在使用itextsharp将JS脚本注入到新的PDF中。希望这对其他人有帮助。我正在尝试寻找另一个不使用itextsharp或任何其他dll的解决方案,但现在必须这样做。

    如果您已经将pdf保存在服务器上,并且看起来像是您想要的,则可以提供指向它的常规链接,将用户带到pdf。从那里很容易打印出来。然而,如果你希望“一键打印”的解决方案,坏消息是没有。相关:我假设您已经确定此()不适用于您?>是否有将pdf文档从服务器传递到“打印”对话框的选项。。。当然不是,就像你希望其他任何人能够盲目地向你的机器发送一些东西并做一些事情一样。@lost Phil哲人-window.print将整个网页连同一个空白的iframe一起打印。谢谢yms。我最后也做了类似的事情。注意:我发现几乎不可能在网页的iFrame中显示嵌入PDF的打印对话框。我的解决方案是,当用户单击“打印”按钮时,打开另一个只包含PDF的窗口。下面的链接有助于-@steve mais,也许你应该为你自己的问题写一个新的答案,并说明你所做的一切细节。它可以帮助其他面临同样问题的人。