2015-04-28 17 views
9

Tôi có một tệp html sử dụng một tệp css. Bên trong tập tin này ở dưới cùng rất tôi sử dụng này cho phong cách mà cần phải được áp dụng chỉ đối với bản in đơn giản của trangwkhtmltopdf print-media-type sử dụng @media print ONLY và bỏ qua phần còn lại

@media print{ 
    ....print styles here... 
} 

Khi tôi gọi wkhtmltopdf --print phương tiện truyền thông kiểu input.html output.pdf, nó hiển thị pdf với các kiểu chỉ nằm trong vùng bao in @media và bỏ qua phần còn lại của kiểu - KHÔNG có kiểu @media nào được chỉ định

Đây có phải là điều bình thường hay không? Tôi có cần phải chỉ định tất cả các kiểu để in bên trong @media print?

Trả lời

12

wkhtmltopdf có đối số --print-media-type bạn có thể vượt qua. Dưới đây là một mã C# ví dụ sử dụng NReco (cho mục đích minh họa chỉ), nhưng các thông số nên làm việc trong chính xác cùng một cách:

 var converter = new NReco.PdfGenerator.HtmlToPdfConverter(); 
     converter.CustomWkHtmlArgs = "--print-media-type"; 
     var pdfBytes = converter.GeneratePdf(html); 
     return pdfBytes; 

này hoạt động tốt đối với tôi trong C# sử dụng NReco sử dụng phương tiện in css, và nó cũng tính đến bất kỳ CSS nào không nằm trong khối @media, chẳng hạn như font-size của một h3. Hãy thử thay đổi kích thước của văn bản hoặc điều gì đó tương tự và xem liệu thay đổi có được phản ánh hay không.

+0

Bạn đang sử dụng 'NReco.PdfGenerator'; anh ấy đang sử dụng ['wkhtmltopdf'] (http://wkhtmltopdf.org/) (và có lẽ không phải C#), vì vậy, bạn không trả lời câu hỏi của mình theo bất kỳ cách nào có ý nghĩa: ( – Doc

+4

Trình biến đổi.CustomWkHtmlArgs giống nhau. chỉ đơn giản là nói cho anh ta các đối số để sử dụng cho WkHtml, tôi sẽ làm rõ điều này trong câu trả lời –

+0

Đối với Rotativa (sử dụng wkhtmltopdf), đây là cách thực hiện: 'return new ViewAsPdf (" Receipt ", receiptModel) \t \t \t \t { \t \t \t \t \t FileName = "Receipt.pdf", \t \t \t \t \t CustomSwitches = "--print-m edia-type " \t \t \t \t};' –

8

Theo mặc định, bất kỳ quy tắc CSS nào bạn xác định mà không sử dụng truy vấn phương tiện đều áp dụng cho tất cả các loại phương tiện.

Do đó, wkhtmltopdf --print-media-type sẽ sử dụng rõ ràng @media print bất kỳ quy tắc chung nào khác.

Nếu bạn muốn cai trị rằng wkhtmltopdf --print-media-type sẽ không sử dụng, bạn đặc biệt phải xác định các truy vấn phương tiện truyền thông như bất cứ điều gì khác hơn là print, ví dụ:

@media screen { 
    /* will not be used */ 
    ... 
} 

@media print { 
    /* will be used */ 
    ... 
} 

/* any rules outside specific media queries will also be used */ 
div.foo { 
    ... 
} 

Ngoài ra, bao gồm cả các tập tin CSS trong HTML của bạn với media="screen" thuộc tính sẽ không được sử dụng với wkhtmltopdf --print-media-type:

<!-- will not be used --> 
<link rel='stylesheet' href='foo.css' type='text/css' media='screen'> 
+0

Điều này đã giúp tôi. Cảm ơn –

Các vấn đề liên quan