HTML dosyalarını PDF'ye dönüştürme [kapalı]


128

Mevcut bir (X) HTML belgesinden otomatik olarak bir PDF dosyası oluşturmam gerekiyor. Girdi dosyaları (raporlar) oldukça basit, tablo tabanlı bir düzen kullanır, bu nedenle gerçekten süslü JavaScript / CSS malzemeleri için desteğe muhtemelen gerek yoktur.

Java ile çalışmaya alışkın olduğum için, bir java projesinde kolaylıkla kullanılabilecek bir çözüm tercih edilir. Yine de sadece Windows sistemlerinde çalışması gerekiyor.

Bunu yapmanın bir yolu olabilir, ancak iyi kalitede çıktı üretmez (en azından kutudan çıkar çıkmaz) PDF dosyalarını oluşturmak için CSS2XSLFO ve Apache FOP kullanmaktır. Karşılaştığım sorun, CSS nitelikleri güzel bir şekilde dönüştürülürken, tablo düzeninin oldukça karışık olması ve metinlerin tablo hücresinden dışarı akmasıydı.

Gecko oluşturma motorunu kullanmak için bir Java-API olan Jrex'e de hızlıca göz attım.

Oluşturulan sayfayı internet explorer oluşturma motorundan alıp otomatik olarak bir PDF-Yazıcı aracına göndermenin bir yolu var mı? Pencerelerde OLE programlama konusunda tecrübem yok, bu yüzden neyin mümkün olup neyin mümkün olmadığı konusunda hiçbir fikrim yok.

Bir fikrin var mı


3
Yakın zamanda xhtml'yi pdf belgelerine dönüştürebilen bir Java kitaplığı docbag'ı oluşturdum . Mevcut sürüm gelişmiş bir şey değildir, ancak xhtml şablonlarınız basitse bu kitaplık kullanışlı olabilir.
Jakub Torbicki

Bence, çeviriyi yapmak için tarayıcı yeteneklerini kullanmak gerekir. Bkz stackoverflow.com/q/25574082/39998
David Hofmann

Kiril harfleri içeren bir html'den pdf oluşturmakla kaldım. İhmal edilen Kiril harfleri dışında her şey yolunda. Bu tür bir sorunu olan var mı?
Kristijan Iliev

@krisiliev: Benzer sorunlarım vardı ve hatırlayabildiğim kadarıyla kullanılan yazı tipi çok önemliydi. Yazı tiplerinin çoğu tam UTF8 karakterlerini desteklemez, ancak aşağıdakiler olmalıdır: 'yazı tipi ailesi: Arial Unicode MS;' (CSS). Ayrıca doğru kodlamayı kullandığınızdan emin olun (her zaman UTF-8 kullanmanızı tavsiye ederim)
panschk

2
bu bağlantı bana yardımcı oldu hmkcode.com/itext-html-to-pdf-using-java
Mateen

Yanıtlar:


73

Uçan daire XHTML işleyici proje PDF XHTML çıkışı için desteği vardır. Buradan bir örneğe bakın .


20
Uçan Sauser ile asıl sorun o AGPL v3 lisanslı lib olan PDF, işlemek için iText kullanmasıdır
David Hofmann

11
Flying Saucer tarafından kullanılan itext sürümü, LGPL altında bulunan 2.0.8'dir. Daha kısıtlayıcı lisansta yalnızca 5 veya üzeri sürüm numaraları bulunur. stackoverflow.com/questions/2692000/…
Gary

8
Flying Saucer ile ilgili gerçek sorunun iyi biçimlendirilmiş ve geçerli bir XML belgesi gerektirmesi olduğunu söyleyebilirim. HTML'nize bir ve işareti gibi bir şey ekleyerek veya oluşturulmuş HTML'nizi katı XHTML yapmamasına neden olan bazı javascript kodu ekleyerek PDF oluşturmayı istemeden bozmak kolaydır. Yine de bu, otomatik testlerle veya XML doğrulamasını içeren bazı süreçlerle azaltılabilir.
SteveT

3
@LateralFractal Anladığım kadarıyla Flying Saucer 9.0.8 (sanırım en son sürüm), izin verilen lisansa sahip son iText sürümü olan iText 2.1.7'yi kullanıyor - LGPL. mvnrepository.com/artifact/org.xhtmlrenderer/flying-saucer-pdf/…
Jonathan Crosmer

2
@JonathanCrosmer Evet. PDF için iki FlyingSaucer paketi, biri iText v2 ve biri iText v5 için. Her ikisinin de eşit işlevselliğe sahip olduğunu varsayarsak; AGPL riski yana adım atılabilir.
LateralFractal

49

Denediniz mi WKHTMLTOPDF ?

Bu basit bir kabuk yardımcı programı, WebKit'in açık kaynaklı bir uygulamasıdır. İkisi de ücretsizdir.

Biz küçük bir öğretici kurdum burada

DÜZENLEME (2017):

Bugün bir şey inşa etmek olsaydı, artık o rotaya gitmezdim.
Ancak bunun yerine http://pdfkit.org/ kullanılır.
Muhtemelen tarayıcıda çalıştırmak için tüm nodejs bağımlılıklarından çıkarıyor.


16
Düz bir html sayfasından pdf'ye dönüştürme için, bu gördüğüm her şeyden daha iyi, ücretsiz veya ticari.
MGOwen

Mac OS olmayan bir işletim sisteminde çalışıyor mu?
Eran Medan

1
@Eran, bunu linux üzerinde kullanıyoruz. Sanırım bir Windows sürümü de var
Mic

1
@Mic Evet, bir Windows sürümü de var.
Viccari

Windows XP'de (sürüm 0.9.9) test edildi ve çok iyi çalışıyor. Ayrıca, yüklemek için makinede yönetici hakları gerektirmez.
Christopher Mahan

44

İText'e göz atın ; HTML'den veri okuma desteği olan saf bir Java PDF araç takımıdır. Son zamanlarda bir projede, içeriği CMS'mizden alıp PDF dosyaları olarak dışa aktarmam gerektiğinde kullandım ve hepsi oldukça basitti. CSS ve stil etiketleri desteği oldukça sınırlıdır, ancak tabloları sorunsuz bir şekilde oluşturur (yine de sütun genişliğini ayarlamayı asla başaramadım).

HTML'den bir PDF oluşturmak şuna benzer:

Document doc = new Document(PageSize.A4);
PdfWriter.getInstance(doc, out);
doc.open();
HTMLWorker hw = new HTMLWorker(doc);
hw.parse(new StringReader(html));
doc.close();

9
AGPL, GPL'den bile daha kötü görünüyor, sadece PDF'yi sunsanız ve iText sunucu tarafı olsa bile açık kaynak olmanız gerekir.
Eran Medan

10
@Eran, AGPL olmayan son sürümü kullanın (com.lowagie: itext: Maven'de 2.1.7).
Nowaker

1
HTMLWorker, XMLWorker lehine IText'in yeni sürümlerinde kullanımdan kaldırılmıştır; ancak her iki durumda da CSS desteği zayıftır (bkz. demo.itextsupport.com/xmlworker/itextdoc/… ) ve ihtiyaçlarım için yeterli değildi. Aksine Flying Saucer mükemmeldi.
Pino



3

Oluşturulan sayfayı internet explorer oluşturma motorundan alıp otomatik olarak bir PDF-Yazıcı aracına göndermenin bir yolu var mı?

Bu nasıl ActivePDF sen ne alırsınız biliyorum iyi araçtır ve aslında makul şekillendirme desteğine sahip olan çalışır.

Ayrıca bulduğum birkaç paketten biri (birkaç yıl öncesine baktığımda), aslında çeşitli sayfa sonu CSS komutlarını destekliyor.


Ne yazık ki, ActivePDF yazılımı çok sinir bozucu - dönüşümler için arka planda IE tarayıcısını başlatması gerektiğinden oldukça yavaş olabilir ve özellikle de kararlı değildir.

Şu anda Beta'da çok daha iyi olması beklenen yeni bir sürüm var, ancak aslında deneme şansım olmadı, bu yüzden ne kadar iyileştirme olduğunu bilmiyorum.


Faydalı cevap için teşekkürler. ActivePDF'nin fiyat nedeniyle gerçekten uygun olduğunu düşünmüyorum, ancak böyle bir şeyin var olduğunu bilmek güzel.
panschk

GrabzIt'in HTML'den PDF'ye API'si: grabz.it/html-to-pdf-image-api.aspx HTML'yi bir tarayıcıda oluşturduğu şekilde çalışır ve ardından PDF'yi oluşturur, bu çok daha doğru PDF dönüştürmelerinin olmasını sağlar.
user1474090

2

Uzantısı olan başsız bir firefox kullanabilirsiniz. Koşmak oldukça can sıkıcı ama iyi sonuçlar veriyor.

Daha fazla bilgi için bu yanıta göz atın .


Sayfaları anında pdf'ye paralel olarak dönüştürmek gerekirse, çok ölçeklenebilir bir çözüm gibi görünmüyor. FF kullanılarak bir dönüşümle sonuçlanan birkaç istek gelirse, sunucunuz yalnızca dönüştürülen birkaç sayfaya hizmet etmek için birkaç GIG bellek kaybeder. Bu, sunucunuzu bir DOS'a açacaktır.
mP.

Daha iyi ama benzer: github.com/ariya/phantomjs/wiki/Screen-Capture (göre we-love-php.blogspot.com/2012/12/... pdf gerçek metin, rasterized henüz)
nafg

0

Sorunuzun yan çubuğuna bakarsanız, ilgili birçok soru göreceksiniz ...

Sizin bağlamınızda, daha basit yöntem, PDFCreator gibi bir PDF yazıcı sürücüsü yüklemek ve sadece bu çıktıya sayfayı yazdırmak olabilir.


Bu nasıl bir Java çözümüdür? Bu bir Windows yazıcı sürücüsüdür.
Gray

OP açıkça Windows'tan bahsetti. Sanırım diğer sistemler için de benzer sürücüler var. OP, Java'dan yalnızca olası bir çözüm olarak bahsetti ...
PhiLho

0

Amyuni WebkitPDF , yalnızca Windows'a yönelik bir çözüm için JNI ile birlikte kullanılabilir. Bu, ticari ve ticari olmayan kullanım için ücretsiz bir HTML'den PDF / XAML'ye dönüştürme kitaplığıdır.

Çıktı dosyalarına hemen ihtiyaç duyulmuyorsa, daha iyi ölçeklenebilirlik için bir kuyruğa ve birkaç arka plan işlemine sahip olmak daha iyi olabilir.

olağan sorumluluk reddi geçerlidir

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.