2015-04-28 7 views
9

Ho un file html che utilizza un file css. All'interno di questo file in fondo molto io uso questo per gli stili che devono essere applicate solo alla versione stampa della paginawkhtmltopdf print-media-type utilizza SOLO la stampa immediata e ignora il resto

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

Quando chiamo wkhtmltopdf --print-media-tipo input.html output.pdf, rende il pdf con gli stili che sono solo nel recinto di stampa @media e ignora il resto degli stili - che NON hanno il tipo @media specificato

È normale, o cosa sto facendo di sbagliato qui? Devo specificare tutti gli stili per la stampa all'interno di @media print?

risposta

12

wkhtmltopdf ha un argomento --print-media-type è possibile passare. Ecco un esempio di codice C# utilizzando NReco (solo a scopo illustrativo), ma il parametro dovrebbe funzionare esattamente nello stesso modo:

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

Questo funziona bene per me in C# utilizzando NReco di utilizzare supporti di stampa CSS, ed è tiene conto anche di qualsiasi CSS che non si trova all'interno di un blocco @media, come lo font-size di uno h3. Prova a cambiare la dimensione del testo o qualcosa di simile e vedi se la modifica è riflessa.

+0

Si sta utilizzando 'NReco.PdfGenerator'; sta usando ['wkhtmltopdf'] (http://wkhtmltopdf.org/) (e probabilmente non C#), quindi, non stai rispondendo alla sua domanda in alcun modo significativo :( – Doc

+4

Il convertitore.CustomWkHtmlArgs sono uguali. gli sto semplicemente dicendo gli argomenti da usare per WkHtml, lo renderò più chiaro nella risposta: –

+0

Per Rotativa (che utilizza wkhtmltopdf), questo è il modo per farlo: 'restituisci nuovo 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

Per impostazione predefinita, le regole CSS definite dall'utente senza l'uso di query multimediali si applicano a tutti i tipi di supporto.

Pertanto, wkhtmltopdf --print-media-type utilizzerà esplicitamente @media printE qualsiasi altra regola generica.

Se si vuole regole che wkhtmltopdf --print-media-type non userà, è necessario in particolare definire la media query come qualcosa di diverso print, ad esempio:

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

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

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

In alternativa, tra cui il file CSS nel codice HTML con l'attributo media="screen" volontà non essere utilizzato con wkhtmltopdf --print-media-type:

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

Questo mi ha aiutato. Grazie –

Problemi correlati