JavaScript ile PDF dosyaları oluşturma


268

XML verilerini bir web sayfasından PDF dosyalarına dönüştürmeye çalışıyorum ve bunu tamamen JavaScript içinde yapabileceğimi umuyordum. Metin, resim ve basit şekiller çizebilmem gerekiyor. Bunu tamamen tarayıcıda yapabilmek isterim.

Yanıtlar:


446

Az önce jsPDF adlı bir kütüphane yazdım Javascript kullanarak PDF üreten . Hala çok genç ve yakında özellikler ve hata düzeltmeleri ekleyeceğim. Ayrıca, Veri URI'lerini desteklemeyen tarayıcılardaki geçici çözümler için de birkaç fikir edinebilirsiniz. Liberal bir MIT lisansı ile lisanslanmıştır.

Yazmaya başlamadan önce bu soruya rastladım ve geri dönüp size haber vereceğim :)

Javascript ile PDF oluşturma

Örnek "Merhaba Dünya" PDF dosyası oluşturmak.

// Default export is a4 paper, portrait, using milimeters for units
var doc = new jsPDF()

doc.text('Hello world!', 10, 10)
doc.save('a4.pdf')
<script src="https://cdnjs.cloudflare.com/ajax/libs/jspdf/1.3.5/jspdf.debug.js"></script>


10
Kısmen jsPDF'e ilham verdim mi? Duyurduğunuz gün jsPDF'yi öğrendim. Şimdiye kadar harika görünüyor. İhtiyaçlarım için kolayca en iyi PDF oluşturma kütüphanesi olduğu için Prawn ile devam ettim. Tüm işlerimi tarayıcıda yapmak isterdim çünkü pozitif olmadığım için Ruby'yi konuşlandırdığım sisteme getireceğim. JsPDF'yi çok yakından izliyorum. Yardım etmek isterdim ama zamanım çok sınırlı. Bu gelecekte değişebilir.
amip

7
Biraz ilham verdiniz :), zaten var olup olmadığını görmek için internette dolaşıyordum ve bazı insanların bunu yararlı bulacağını gördüm. Yardım etmek isteyip istemediğinizi bize bildirin. Ben Twitter'da @ MrRio.
James Hall

23
Hala çok canlı. 0.9.0rc2 Bugün piyasaya çıktı.
James Hall

87
@JamesHall, bunu yazmak için yapması gereken tüm çalışmalar ve MIT'in dünyayı daha iyi bir yer haline getirmesi için kendi kazancınız için ticarileştirebildiğiniz için teşekkür etmek istiyorum.
Charles Burns

16
Downvoters bize "daha iyi" fikirlerini veya çözümlerini sunabilir mi? Bu mükemmel bir çaba.
Onur Yıldırım

138

Bahsetmeye değer başka bir javascript kütüphanesi pdfmake'dir .

Tarayıcı desteği jsPDF kadar güçlü görünmüyor ya da şekiller için bir seçenek yok gibi görünüyor, ancak metin biçimlendirme seçenekleri şu anda jsPDF'de bulunan seçeneklerden daha gelişmiş.


7
Bu cevap çok daha fazla yükseltilmelidir, pdfmake jspdf'den çok daha sağlamdır. Ancak sadece bir yan not, PDFKit kütüphanesinin etrafına sarılır.
vittore

2
başka bir yan not, jspdf utf-8 desteğine sahip değildir ve pdfmake sadece varsayılan yazı tipleri için utf-8 desteğine sahiptir.
Leo

"pdfmake.min.js - 0.1.22 - 9 saat önce" Ölmedi, bugün güncellendi.
zenbeni

İki oyun alanını karşılaştırdığımda, bana göre jsPDF "grafik" PDF oluşturmayı daha çok hedeflerken, pdfmake daha iyi biçimlendirilmiş "düz" belgeler oluşturmayı hedeflerken, genel metin biçimlendirmesi için çok daha fazla seçeneğe sahip gibi görünüyor.
cslotty

Bu IE dostu mu?
Wildhammer

59

Ben korumak PDFKit da güçler (zaten burada bahsedilen) pdfmake. Hem Düğümde hem de tarayıcıda çalışır ve diğer kütüphanelerin desteklemediği bir sürü şeyi destekler:

  • Alt küme yazı tiplerini gömme, unicode desteği ile.
  • Çok sayıda gelişmiş metin mizanpajı (sütunlar, sayfa kırma, tam unicode satır kırma, temel zengin metin vb.).
  • Gelişmiş tipografi için daha da fazla yazı tipi üzerinde çalışmak (OpenType / AAT bitişik harfleri, bağlamsal ikame, vb.). Yakında: ilgileniyorsanız fontkit şubesine bakın.
  • Daha fazla grafik öğesi: degradeler vb.
  • Browserfy ve akışlar gibi modern araçlarla oluşturulmuştur. Hem tarayıcıda hem de düğümde kullanılabilir.

Check out http://pdfkit.org/ PDFKit neler yapabileceğini kendiniz görün tam öğretici için. Ve ne tür belgelerin üretilebileceğine ilişkin bir örnek için, PDFKit'in kendisini kullanarak bazı Markdown dosyalarından oluşturulan PDF olarak belgelere bakın: http://pdfkit.org/docs/guide.pdf .

Tarayıcıda etkileşimli olarak da deneyebilirsiniz: http://pdfkit.org/demo/browser.html .


Bu bir sunucu tarafı kitaplığı değil mi? Tartışma istemci tarafı js kütüphanesinde olduğunu düşünüyorum.
Ash Catchem

10
PDFKit yanıtta belirtildiği gibi hem Düğümde hem de tarayıcıda çalışır. Bir tarayıcı demosu bağlantısına bakın.
devongovett

Bu görüntüleri sıkıştırıyor mu? Camscanner işlevine benzer bir web uygulaması üzerinde çalışıyorum ve sıkıştırma ve çok sayfalı biçimden yararlanmak için javascript aracılığıyla PDF oluşturma arıyorum.
Trevor

@devongovett sen benim bakabilirsiniz soruya kütüphanenizle ilgili?
ninbit

8

Bir başka ilginç proje texlive.js .

Tarayıcıda (La) TeX'i PDF'ye derlemenizi sağlar.


Merhaba dünya örneği güzel bir sonuç veriyor ancak tamamlanması yaklaşık 30 saniye sürüyor.
Sam Sippe

2

Bu ücretsiz hizmeti, herhangi bir url'den pdf oluşturan bir bağlantı ekleyerek kullanabilirsiniz (örneğin, http://www.phys.org ):

http://freehtmltopdf.com/?convert=http%3A%2F%2Fwww.phys.org&size=US_Letter&orientation=portrait&framesize=800&language=en


1
Güncelleme: Bu freehtmltopdf.com hizmetini kontrol etmeye gittiğimde artık mevcut olmadığını söyledi. Kulağa şaşırtıcı olsa da geliyor!
Mark Duiker

şimdi kontrol edildi - çalışıyor. ve şaşırtıcı, ben her pdf için ödeme bir hizmet kullanın ve kod gerekir, bu böyle bir sorun çözücü.
Sergey Sob

-29

PDF bellekte JavaScript oluşturabilseniz bile, bu verileri kullanıcıya nasıl aktaracağınız konusunda sorun yaşarsınız. JavaScript'in kullanıcıya sadece bir dosya aktarması zordur.

Dosyayı kullanıcıya almak için, tarayıcının kaydetme iletişim kutusunu açmasını sağlamak için bir sunucu gönderimi yapmak istersiniz.

Bununla birlikte, PDF oluşturmak gerçekten zor değil. Sadece özellikleri okuyun.


1
Bu örneğin bu Veri URI'ları ile çalışmak gibi görünüyor, hiç zor değil en.wikipedia.org/wiki/Data_URI_scheme (Ben daha önce de yaptık ama Veriler-URI'ları kullanılırsa hatırlamıyorum).
Björn

58
Bu günlerde JavaScript'te kolayca dosya oluşturabilirsiniz. (Ben gelecekten geliyorum)
Derek 朕 會 功夫

5
Bugünlerde gerçekten basit mi .. Bunu kontrol edin örneğin: github.com/ChenWenBrian/FileSaver.js
roy riojas

9
@FrankKrueger Cevabınızı silerseniz 6 puan kazanacaksınız: P
Kamil Kiełczewski

8
@FrankKreuger, "Git teknik özellikleri okuyun" neredeyse hiçbir zaman SO doğru cevap değildir.
Krishnan Venkiteswaran
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.