我一直在寻找解决这个问题的日子。
描述:我有一个网站通过iFrame动态加载PDF。 PDF保存在服务器上,网站用户可以在网站上查看pdf。
问题:在网站上引入一个打印按钮,打印动态创建并保存在服务器上的PDF。
这甚至可能吗?我正在考虑跨浏览器实现以使事情变得更糟。我已经从网上尝试了n个JS选项,但它们似乎都没有用。我似乎无法以与它看起来相同的方式打印PDF。简而言之,我试图模拟加载时出现在PDF上的打印按钮。是否可以选择将pdf文档从服务器传递到打印对话框?
答案 0 :(得分:2)
描述:我有一个网站通过iFrame动态加载PDF。 PDF保存在服务器上,网站用户可以在网站上查看pdf。
问题:在网站上引入一个打印按钮,打印动态创建并保存在服务器上的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();
}
}
}
请注意,我使用itextsharp将JS脚本注入新PDF。希望这有助于其他人。我试图在不使用itextsharp或任何其他dll的情况下找到另一种解决方案,但现在必须这样做。
答案 1 :(得分:1)
我不确定这是否有效,但您可以尝试使用special version of your PDF file that opens the print dialog when opened启动弹出窗口。然后关闭弹出窗口。最后一部分可能很棘手,因为我认为没有干净的方法可以知道打印对话框是否已经关闭。