2013-12-08 29 views
31

jsPDF'yi kullanmakta yeniyim ama hayatım boyunca bu şeye uygulamak için css alamıyorum! Satır içi, dahili ve harici hiç boşuna denedim! Başka bir SO postunda okuduğumda, teknik olarak bir şeyleri bir dosyaya yazdırdığımdan, bir baskı stili sayfasına ihtiyacım var ve bu da işe yaramadı. JS:jsPDF işe yarayacak herhangi bir stil alamıyor

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

Ve nihayet stil dış olduğunu

ben sadece çalışmak için herhangi bir CSS almaya çalışıyorum çok temel bir sayfam var :

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

Eminim her şey doğru şekilde dahil ediliyor ve o hataları, tüm bunları zaten kontrol etti. CSS'nin işe yaraması için aramam gereken bazı ekstra işlevler var mı? Bilmeme izin ver lütfen! Çok teşekkürler! Sahip olabileceğiniz diğer ipuçları da takdir edilmektedir!

DÜZENLEME:

<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

Konsolunuzda herhangi bir hata var mı? Yani. - Tüm kaynaklarınız doğru yükleniyor mu? . Sormamın nedeni, geliştirici ortamımda: "//ajax.googleapis.com", "h t t p: //ajax.googleapis.com" un bulunmadığı yerde sorun yaratıyor. Bu noktaya gelince: bana gelişim yığınınla ilgili daha fazlasını söyleyebilir misin? sayfalar WAMP, MAMP, RoRails, Node nasıl işleniyor? Bunlardan herhangi birinin çok önemli olduğundan emin değil, ama kim bilir - Bu sorunun yanıtlanmasını görmek isterim. – sdailey

+0

Her şey yükleniyor, Sadece basit bir .html dosyası, – samuraiseoul

+0

Sanırım tüm kodunuza ihtiyacımız var, ya da belki bir yere yükleyebilirsiniz? Çünkü sağladığınız kodu kullandığımdan, stil iyi çalışıyor. – Jarno

cevap

16

Sorunun yerine media="screen" ait media="print" kullanmak olduğunu düşünüyorum: Bu gerçek web sayfasıdır. Bir tarayıcı görüldüğü gibi sayfanın stil içerecektir

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

ekran olmak üzere iki ayrı dosyalar, baskı için bir ve ekran için bir yapım deneyin . Yazdırılan, sayfanızı yazdırdığınızda veya bu durumda PDF olarak kaydederken kullanılacak stili içerir.

DÜZENLEME Ben jsPDF website kontrol ama onlar CSS desteklemeyen düşünüyorum. Yine de farklı metin renklerle bir belge oluşturmak için böyle bir şey yapabileceğini:

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.'); 

Betiğinizde sağ var doc = new jsPDF('landscape'); altında bu kod yerleştirin.

+0

Bunu denedim ve sayfayı normal olarak biçimlendirirken, pdf olarak kaydettiğimde pdf'yi stil edemiyorum. :( – samuraiseoul

+0

CSS'yi desteklemediklerini düşünüyorum, güncellenmiş cevabımı kontrol edin. – Jarno

+8

CSS'yi uygulayamazsam JSPDF benim için işe yaramıyor, bir alt kümesinin resmini çekmeme izin veren herhangi bir kütüphaneyi biliyor musunuz? DOM? Image veya PDF? Id ile bir alt öğe yakalayabilirseniz format çok önemli değil! – samuraiseoul

0

jsPDF ile bir ekran görüntüsü yakalayabilirsiniz, ancak html2canvas'a da ihtiyacınız vardır. Html'yi tuvale dönüştürmek ve resim içeriğini almak için html2canvas kullanın.

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') 
    } 
}) 

Bu, tüm CSS koruyacaktır ancak kalitesi biraz (bulanık) yaşayacaktır: jsPDF boş bir pdf oluşturma ve pdf içine html görüntü içerik eklemek ve kaydedin.

bu dosyaları içerir:

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

ve ardından çalıştırarak pdf oluşturasbilirsiniz this seçeneği deneyebilirsiniz

0

, o jsPDF, html2canvas ve Html2pdf kütüphaneleri onun README den

kullanır :

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