wkhtmltopdf生成pdf

9294 ワード

 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のページングでは、いくつかのプロパティを直接使用して実現できます.
         

         {page-break-before:always;}//ヘッダーに追加されたdom要素のページ変更
         
                                            {page-break-after:always;}//footerに追加されたdom要素のページング
                                                              {page-break-inside:avoid;}