我在MVC ASP.NET C#中生成了一个HTML页面。 (使用html助手)
我想将此页面自动保存为特定文件夹中的pdf
目前,当某人提交表单时会将其发送给数据库,但我也希望[HttpPost]将提交的表单转换为pdf
示例:http://example1234.com/Persons/details/15
如何将其另存为pdf?
private string datadir = null;
private string wkhtmltopdf = null;
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(Person person)
{
datadir = ConfigurationManager.AppSettings["datadir"];
wkhtmltopdf = ConfigurationManager.AppSettings["wkhtmltopdf"];
if (ModelState.IsValid)
{
db.People.Add(person);
db.SaveChanges();
//here the PDF should be created
System.IO.File.WriteAllText("details/" + person.ID +".html"));
var pdf1 = new ProcessStartInfo(wkhtmltopdf);
pdf1.CreateNoWindow = true;
pdf1.UseShellExecute = false;
pdf1.WorkingDirectory = datadir + "tmp\\";
pdf1.Arguments = "-q -n --disable-smart-shrinking Pdf." + person.ID + ".html Pdf." + person.ID + ".pdf";
using (var process = Process.Start(pdf1))
{
process.WaitForExit(99999);
Debug.WriteLine(process.ExitCode);
}
return View(person);
}
答案 0 :(得分:1)
将其作为我其他任务之一的答案发布,但它也适用于此处,所以在这里你会感兴趣的人。
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(Person person)
datadir = ConfigurationManager.AppSettings["datadir"];
//datadirectory defined in Web.config
//also possible to hardcode it here, example: "c:/windows/PDFfolder"
wkhtmltopdf = ConfigurationManager.AppSettings["wkhtmltopdf"];
//directory to the file "wkhtmltopdf", downloaded it somewhere
//just like above, defined at web.config possible to hardcode it in
ViewData["IsModelValid"] = ModelState.IsValid ? "true" : "false";
//valid checker
if (ModelState.IsValid) //check if valid
{
db.People.Add(person); //add to db
db.SaveChanges();
var fileContents1 = System.IO.File.ReadAllText(datadir + "Template.html");
//get template from datadirectory
fileContents1 = fileContents1.Replace("#NAME#", person.Name);
//replace '#NAME#' by the name from the database table person.Name
System.IO.File.WriteAllText(datadir + "tmp\\Template." + person.ID + ".html", fileContents1);
//create a new html page with the replaced text
//name of the file equals the ID of the person
var pdf1 = new ProcessStartInfo(wkhtmltopdf); //start process wkhtmltopdf
pdf1.CreateNoWindow = true; //don't create a window
pdf1.UseShellExecute = false; //don't use a shell
pdf1.WorkingDirectory = datadir + "tmp\\"; //where to create the pdf
pdf1.Arguments = "-q -n --disable-smart-shrinking Overeenkomst." + person.ID + ".html Overeenkomst." + person.ID + ".pdf";
//get the html to convert and make a pdf with the same name in the same directory
}
return View(person);
}