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;}