描述:我有一个通过 iFrame 动态加载 PDF 的网站。PDF保存在服务器上,网站用户可以在网站上查看pdf。
问题:在网站上引入一个打印按钮,该按钮打印动态创建并保存在服务器上的 PDF。
解决方案:我找不到这个问题的确切解决方案,但这是我解决问题的方法 -
- 根据要求创建“打印”并将其重定向到仅包含 PDF 的另一个页面。
- 复制以前的 PDF 并使用 JS 创建新的 PDF - this.print() 这样当它打开时,打印对话框会直接弹出给用户。
在新页面中 -
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 的情况下找到另一种解决方案,但现在必须这样做。