编辑:问题解决了。感谢大家的建议。
使用商业产品将指定页面打印为PDF。
系统的工作方式是加载PrintToPDF.aspx页面,并通过post参数提交要转换的页面的详细信息。
Page_Loaded函数使用wkHtmlToPdf创建PDF文件,然后使用Response.Write编写新页面以加载该PDF文件,如下所示:
Response.Clear();
Response.Write("<html><body onload=\"parent.OpenPDF('tmp/" + Path.GetFileName(sPdfFile) + "');\"></body></html>");
默认情况下,.aspx页面包含以下代码:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="PrintToPdf.aspx.cs" Inherits="DataServer.PrintToPdf" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>X-Info Maps Print to PDF</title>
</head>
<body onload="alert('An error occurred generating the pdf');">
</body>
</html>
所以,应该发生什么是生成PDF(这是正常的),然后重写页面的HTML响应以通过附加到onload事件的Javascript调用来加载PDF。
INSTEAD,无论如何,默认页面的警报触发。我已经遍历了程序,它肯定会调用Response.Clear()和.Write()函数。
有趣的是,在第一次失败后,如果我第二次按下printToPdf按钮,它会正确加载PDF页面。
关于出了什么问题的任何暗示?
答案 0 :(得分:3)
最后你需要一个Response.End()
编辑 - 所以你的代码应该是这样的:
Response.Clear();
Response.Write("<html><body onload=\"parent.OpenPDF('tmp/" + Path.GetFileName(sPdfFile) + "');\"></body></html>");
Response.End();
答案 1 :(得分:0)
因此,事实证明存在一个单独的问题导致代码分支无法运行。 (我忘记在运行wkHtml2PDF = S的过程中包含WaitForExit)
答案 2 :(得分:0)
将该response.write代码从page_load移至page_prerender事件。它应该工作。