我正在使用wkhtmltopdf
将HTML文件转换为链接按钮上的PDF文档
http://code.google.com/p/wkhtmltopdf/
当用户单击链接按钮时,它会运行以下代码,如下所示,将传递文件路径中的代码作为参数ProcessStartInfo。这些代码仅适用于以下方案
考虑到该网站托管在域http://www.xyz.net/
上http://demo.XYZ.net/
时工作正常http://www.XYZ.net/
它不起作用时http://localhost:51005/XYZ/
或http://web:8080/
为了使这个工作正常,我们需要给予网站完全信任等级&我不知道为什么代码不运行我给它相同的域路径如果我创建put PrintArticle.aspx
如果我创建一个子域然后它将正常工作。我不确定这是安全问题还是什么
以下代码
protected void lnkbtnDownload_Click(object sender, EventArgs e)
{
//ConvertURLToPDF();
try
{
string url = "PrintArticle.aspx?articleID=" + Request["articleID"] + "&download=yes&Language=" + Request["Language"];
//string args = string.Format("\"{0}\" - ", "http://demo.XYZ.net/" + url); //Works
//string args = string.Format("\"{0}\" - ", "http://www.xyz.net/" + url); Doesnt work
//string args = string.Format("\"{0}\" - ", url);
string args = string.Format("\"{0}\" - ", "http://localhost:51005/XYZ/" + url); //Works
var startInfo = new ProcessStartInfo(Server.MapPath("bin\\wkhtmltopdf.exe"), args)
{
UseShellExecute = false,
CreateNoWindow = true,
RedirectStandardOutput = true
};
var proc = new Process { StartInfo = startInfo };
proc.Start();
string output = proc.StandardOutput.ReadToEnd();
byte[] buffer = proc.StandardOutput.CurrentEncoding.GetBytes(output);
proc.WaitForExit();
proc.Close();
Response.ContentType = "application/pdf";
Response.AddHeader("Content-Disposition", "attachment;filename=download.pdf");
Response.BinaryWrite(buffer);
Response.End();
}
catch (Exception ex)
{
throw ex;
}
}
案例文件位于同一域中的错误消息
>'/'应用程序中的服务器错误。无法找到资源。描述:HTTP 404.您正在寻找的资源(或其中一个 依赖项)可能已被删除,其名称已更改,或者是 暂时不可用。请查看以下网址并确认 拼写正确。 请求的网址:/PrintArticle.aspx
版本信息:Microsoft .NET Framework版本:4.0.30319; ASP.NET版本:4.0.30319.272
答案 0 :(得分:0)
我使用以下语句解决了这个问题
var url = Request.Url.GetLeftPart(UriPartial.Authority) + "/PrintArticle.aspx?articleID=" + Request["articleID"] + "&download=yes&Language=" + Request["Language"];
现在它工作正常我不确定当我指定文件路径时它不起作用。
答案 1 :(得分:0)
输出变量包含空字符串 我的代码如下: 尝试 { string url = Request.Url.GetLeftPart(UriPartial.Authority)+“/ PrintQuickPrescription.aspx?DoctorId =”+ DoctorID +“& DispnID =”+ DispnID +“& ApptID =”+ ApptID +“& PatientID =” + PatientID; System.Diagnostics.Process process = new System.Diagnostics.Process();
string args = string.Format("\"{0}\" - ", "http://localhost:50013/DPMNewWeb/"+url);
//string args="http://localhost:50013/DPMNewWeb/PrintQuickPrescription.aspx";
var startInfo = new ProcessStartInfo(Server.MapPath("~\\Bin\\wkhtmltopdf.exe"), args)
{
UseShellExecute = false,
CreateNoWindow = true,
RedirectStandardOutput = true
};
var proc = new Process { StartInfo = startInfo };
proc.Start();
string output = proc.StandardOutput.ReadToEnd();
byte[] buffer = proc.StandardOutput.CurrentEncoding.GetBytes(output);
proc.WaitForExit();
proc.Close();
Response.ContentType = "application/pdf";
Response.BinaryWrite(buffer);
Response.End();
//byte[] fileContent = GeneratePDFFile();
//GeneratePDFFile();
//if (fileContent != null)
//{
// Response.Clear();
// Response.ContentType = "application/pdf";
// Response.AddHeader("content-length", fileContent.Length.ToString());
// Response.BinaryWrite(fileContent);
// Response.End();
//}
}
catch
{
}