2013-12-08 10 views
31

Sono nuovo nell'usare jsPDF ma e per la vita di me non riesco a ottenere alcun css da applicare a questa cosa! Ho provato in linea, interno ed esterno tutto inutilmente! Ho letto in un altro post SO che, dal momento che tecnicamente sta stampando materiale su un file, ho bisogno di un foglio di stile di stampa, e anche questo non ha funzionato.jsPDF non riesce a far funzionare nessuno stile

Ho una pagina molto semplice che sto solo cercando di ottenere qualsiasi CSS per lavorare con: JS:

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script> 
<script type="text/javascript" src="jspdf.js"></script> 
<script type="text/javascript" src="./libs/FileSaver.js/FileSaver.js"></script> 
<script type="text/javascript" src="./libs/Blob.js/BlobBuilder.js"></script> 
<script type="text/javascript" src="jspdf.plugin.standard_fonts_metrics.js"></script> 
<script type="text/javascript" src="jspdf.plugin.split_text_to_size.js"></script>    
<script type="text/javascript" src="jspdf.plugin.from_html.js"></script> 
<script> 
    $(document).ready(function(){ 
     $('#dl').click(function(){ 
     var specialElementHandlers = { 
      '#editor': function(element, renderer){ 
       return true; 
      } 
     }; 
     var doc = new jsPDF('landscape'); 
     doc.fromHTML($('body').get(0), 15, 15, {'width': 170, 'elementHandlers': specialElementHandlers}); 
     doc.output('save'); 
     }); 
    }); 
</script> 

HTML:

<body> 
    <div id="dl">Download Maybe?</div> 
    <div id="testcase"> 
     <h1> 
      We support special element handlers. Register them with jQuery-style 
     </h1> 
    </div> 
</body> 

E infine il foglio di stile che è esterno :

h1{ 
    color: red; 
} 
div{ 
    color: red; 
} 

Sono sicuro che tutto viene incluso correttamente e che ci sono n o errori, già controllato tutto ciò. C'è qualche funzione in più che devo chiamare per far funzionare anche il css? Fammi sapere per favore! Molte grazie! Anche altri suggerimenti che potresti avere sono apprezzati!

EDIT: Questa è la pagina web esatto:

<html> 
    <head> 
     <link rel="stylesheet" href="print.css" type="text/css" media="print"/> 
     <script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script> 
     <script type="text/javascript" src="jspdf.js"></script> 
     <script type="text/javascript" src="./libs/FileSaver.js/FileSaver.js"></script> 
     <script type="text/javascript" src="./libs/Blob.js/BlobBuilder.js"></script> 
     <script type="text/javascript" src="jspdf.plugin.standard_fonts_metrics.js"></script> 
     <script type="text/javascript" src="jspdf.plugin.split_text_to_size.js"></script>    
     <script type="text/javascript" src="jspdf.plugin.from_html.js"></script> 
     <script> 
      $(document).ready(function(){ 
       $('#dl').click(function(){ 
       var specialElementHandlers = { 
        '#editor': function(element, renderer){ 
         return true; 
        } 
       }; 
       var doc = new jsPDF('landscape'); 
       doc.fromHTML($('body').get(0), 15, 15, {'width': 170, 'elementHandlers': specialElementHandlers}); 
       doc.output('save'); 
       }); 
      }); 
     </script> 
    </head> 
    <body> 
     <div id="dl">Download Maybe?</div> 
     <div id="testcase"> 
      <h1> 
       We support special element handlers. Register them with jQuery-style 
      </h1> 
     </div> 
    </body> 
</html> 
+0

Si verificano errori nella console? Vale a dire. - tutte le risorse vengono caricate correttamente? . Il motivo per cui lo chiedo è perché, nel mio ambiente di sviluppo: "//ajax.googleapis.com" mi dà problemi in cui "h t t p: //ajax.googleapis.com" non lo fa. A quel punto: potresti dirmi di più sul tuo stack di sviluppo, ad es. come vengono visualizzate le pagine WAMP, MAMP, RoRails, Node? Non sono sicuro se tutto ciò sia troppo importante, ma chissà ... mi piacerebbe vedere la risposta a questa domanda. – sdailey

+0

Tutto viene caricato, è solo un semplice file .html, – samuraiseoul

+0

Penso che abbiamo bisogno di tutto il tuo codice, o forse puoi caricarlo da qualche parte? Perché quando uso il codice che hai fornito lo stile funziona bene. – Jarno

risposta

16

Credo che il problema è che si utilizza media="print" invece di media="screen". Prova a fare due file separati, uno per la stampa e uno per lo schermo:

<link rel="stylesheet" href="print.css" type="text/css" media="print"/> 
<link rel="stylesheet" href="screen.css" type="text/css" media="screen"/> 

Lo schermo uno conterrà lo stile della pagina come si è visto in un browser. Quello di stampa conterrà lo stile per quando si stampa la pagina, o in questo caso salvandolo come PDF.

EDIT

ho controllato il jsPDF website ma penso che non supportano CSS. Si potrebbe fare qualcosa di simile per creare un documento con diversi colori di testo però:

doc.setFontSize(22); 
doc.setTextColor(255, 0, 0); 
doc.text(20, 20, 'This is a title'); 

doc.setFontSize(16); 
doc.setTextColor(0, 255, 0); 
doc.text(20, 30, 'This is some normal sized text underneath.'); 

inserire questo codice proprio sotto var doc = new jsPDF('landscape'); nello script.

+0

Ho appena provato questo e mentre si disegna la pagina normalmente, non riesco ancora a ottenere lo stile del pdf quando lo salvo come pdf. :( – samuraiseoul

+0

Penso che non supportino i CSS, controlla la mia risposta aggiornata – Jarno

+8

Beh, JSPDF è inutile per me se non posso applicare CSS, conosci qualche libreria che mi permetta di fare una foto di un sottoinsieme del DOM? Immagine o PDF? Il formato non è molto importante se riesco a catturare un elemento secondario del dom da ID! – samuraiseoul

0

È possibile acquisire uno screenshot con jsPDF, ma è necessario anche html2canvas. Usa html2canvas per convertire l'html in tela e catturare il contenuto dell'immagine. Creare un PDF vuoto con jsPDF e aggiungere il contenuto dell'immagine HTML in PDF e salvare:

html2canvas(*html*, { 
    onrendered: function(canvas) { 
    const contentDataURL = canvas.toDataURL('image/png') 
    let pdf = new jsPDF() 
    pdf.addImage(contentDataURL, 'JPEG', 20, 20) 
    pdf.save('form.pdf') 
    } 
}) 

Questo detengono i CSS ma la qualità subiranno un po '(sfocata).

0

si può provare this opzione, che utilizza jsPDF, html2canvas e librerie html2pdf

dalla sua README:

includere questo file:

<script src="jspdf.min.js"></script> 
<script src="html2canvas.min.js"></script> 
<script src="html2pdf.js"></script> 

e quindi è possibile generare il pdf eseguendo :

html2pdf($('body').get(0), { 
    margin:  1, 
    filename:  'myfile.pdf', 
    image:  { type: 'jpeg', quality: 0.98 }, 
    html2canvas: { dpi: 192, letterRendering: true }, 
    jsPDF:  { unit: 'in', format: 'letter', orientation: 'portrait' } 
});