wkhtmltopdf 生成pdf

 1    public class PdfHelper
 2     {
 3 
 4         static string RootPath
 5         {
 6             get
 7             {
 8                 string AppPath = "";
 9                 HttpContext HttpCurrent = HttpContext.Current;
10                 if (HttpCurrent != null)
11                 {
12                     AppPath = HttpCurrent.Server.MapPath("~");
13                 }
14 
15                 return AppPath.Trim(new char[]{'\'});
16             }
17         }
18 
19        
20         public static void GetPdf(HttpResponseBase response,string pdfUrl)
21         {
22             string fileName = Guid.NewGuid().ToString("N") + ".pdf";
23             string filePath = RootPath + "\pdfs\" + fileName;
24             string exePath=RootPath + "\wkhtmltopdf\wkhtmltopdf.exe";
25             string args=pdfUrl + " --zoom 1.25 "" + filePath+""";
26           
27           
28             Process p =new Process();
29             p.StartInfo.FileName = exePath;
30             p.StartInfo.Arguments = args;
31             p.StartInfo.UseShellExecute = false;
32             p.StartInfo.RedirectStandardInput = true;
33             p.StartInfo.RedirectStandardOutput = true;
34             p.StartInfo.RedirectStandardError = true;
35             p.StartInfo.CreateNoWindow = false;
36 
37             try
38             {
39                 p.Start();
40                 p.WaitForExit();               
41                 p.StandardOutput.ReadToEnd();
42                 p.Close();
43 
44                 FileStream fs = new FileStream(filePath, FileMode.Open);
45                 byte[] file = new byte[fs.Length];
46                 fs.Read(file, 0, file.Length);
47                 fs.Close();
48 
49 
50                 response.Clear();
51                 response.AddHeader("content-disposition", "attachment; filename=" + fileName);
52                 response.ContentType = "application/octet-stream";
53                 response.BinaryWrite(file);
54                 response.Flush();
55                 
56             }
57             catch
58             {
59 
60             }
61         
62         }
63     }

 对于要打印成pdf的html要求:

    1. dom元素的 height/width/margin/padding以及定位,尽量使用百分比的形式。

    2. 图片的像素质量尽量高一些,因为生成pdf的过程会有缩放。另外加入html的时候设置显示的高度跟宽度。

    3. 对于pdf的分页,可以直接使用一些属性来实现:

          <header page-break-before="always"></header>

         {page-break-before:always;}//添加到header的dom元素实现换页 

          <footer page-break-after="always"></footer>                                  
         {page-break-after:always;}  //添加到footer的dom元素实现换页

                                                    
         {page-break-inside:avoid;}