2012-10-02 20 views
15

मैं एक एचटीएमएल 5/CSS3 दस्तावेज़, सर्वरसाइड से पीडीएफ उत्पन्न करने के लिए एक समाधान की तलाश में हूं।एचटीएमएल 5 पीडीएफ सर्वरसाइड

मुझे पता है कि पीडीएफ (जैसे एफओपी, आईटेक्स्ट ...) बनाने के लिए बहुत सारे समाधान हैं, लेकिन मुझे यह सुनिश्चित करना होगा कि यह HTML पृष्ठ की तुलना में 100% समान दिखाई देगा। इसलिए, मैं एफओपी या आईटेक्स्ट जैसे तत्व द्वारा पीडीएफ तत्व बनाना नहीं चाहता हूं।

वास्तव में, कुछ मौजूद होना चाहिए क्योंकि जब आप अपने ब्राउज़र से पीडीएफ के रूप में प्रिंट करते हैं तो आप यही करते हैं। आदर्श रूप से, समाधान को एक वेब ब्राउज़र इंजन (वेबकिट या गीको) एम्बेड करना चाहिए। मैंने wkHtmlToPdf की कोशिश की ... लेकिन नतीजा बिल्कुल अच्छा नहीं है (एचटीएमएल 5 कैनवास भी मुद्रित नहीं है ...)

अगर किसी को किसी भी समाधान, मुफ्त या नहीं, किसी भी भाषा का कोई विचार है ... मैं करूँगा बहुत सराहना कीजिए! धन्यवाद !!

+0

यह अभी भी बंद क्यों है ?? प्रत्येक प्रश्न इस से अधिक "बहस बहस, तर्क, मतदान, या विस्तारित चर्चा" का कारण बनता है। –

+1

wkhtml2pdf अब * करता है * कैनवास प्रस्तुत करता है ... wkhtmltopdf.org देखें। Wkhtml2pdf के लिए अंगूठे ... fop –

उत्तर

0

आप सर्वर की ओर से कौन सी भाषा का उपयोग कर रहे हैं?

पृष्ठ का एक स्क्रीनशॉट बनाना और फिर छवि को पीडीएफ में परिवर्तित करना शायद आपको सर्वोत्तम परिणाम देगा। यह पृष्ठ को वही दिखाएगा जैसा कि इसे ब्राउज़र द्वारा प्रदान किया जाएगा।

वहां कुछ स्क्रीनशॉट-ए-ए-सर्विस टूल्स हैं, जैसे browshot.comAPI और supported languages पर एक नज़र डालें।

या आप अपने उपकरण का उपयोग कर सकते हैं। node.js के लिए github पर एक अच्छी परियोजना मौजूद है।

+0

के 7000+ जावा वर्गों से निपटने के बजाय केवल एक निष्पादन योग्य है, यह आपके उत्तर के लिए धन्यवाद। मैं जावा पक्ष का उपयोग कर रहा हूं, लेकिन मैं कुछ और उपयोग करने के लिए खुला हूं यह पीडीएफ पीढ़ी। दुर्भाग्यवश, स्क्रीनशॉट एक विकल्प नहीं है, क्योंकि उत्पन्न पीडीएफ पेशेवर प्रिंटर के लिए वास्तविक पीडीएफ होना चाहिए (उदाहरण के लिए, टेक्स्ट टेक्स्ट होना चाहिए, कुछ पिक्सल नहीं)। – Olivier

+0

किसी छवि को पीडीएफ में कनवर्ट करना वास्तव में एक बुरा विचार है - आप सभी टेक्स्ट खो देंगे, इसलिए यह अच्छी तरह से ज़ूम नहीं करेगा, और प्रतिलिपि/पेस्ट करने योग्य या खोजने योग्य नहीं होगा। यह पीडीएफ फाइल को इसके मुकाबले ज्यादा बड़ा कर देगा। यदि आप wkHtmlToPdf या phantomJs या सामान्य ब्राउज़र के प्रिंट विकल्प का उपयोग करते हैं, तो पाठ पीडीएफ में टेक्स्ट के रूप में जाएगा, और कोई भी वेक्टर ग्राफिक्स इन समस्याओं से परहेज करते हुए वैक्टर के रूप में भी जाएगा। – rjmunro

1

अपने एचटीएमएल की जटिलता के आधार पर आप XmlWorker का उपयोग कर सकते हैं, जो iText डेवलपर्स द्वारा एक प्रोजेक्ट है और iText का उपयोग करता है।

23

मैंने वेब पृष्ठों से पीएनजी छवियां उत्पन्न करने के लिए फ़ैंटॉमजेएस का उपयोग किया है और यह पीडीएफ भी उत्पन्न कर सकता है और गुणवत्ता आमतौर पर अच्छी होती है। संपत्ति को स्क्रीन कैप्चर कहा जाता है और here वर्णित किया जाता है। समर्थित प्रारूप पीएनजी, जेपीईजी, जीआईएफ और पीडीएफ हैं।

पीडीएफ में परिवर्तित होने पर, पृष्ठों के ग्रंथ ग्रंथों के रूप में बनाए जाते हैं।

कुछ अन्य पुस्तकालयों या कार्यक्रमों के परीक्षण के बाद, फैंटॉमजेएस सबसे सही समाधान मिला। फैंटॉमजेएस वेबकिट, एक वास्तविक लेआउट और प्रतिपादन इंजन का उपयोग करता है।

कुछ उदाहरण https://github.com/ariya/phantomjs/wiki/Examples में हैं।

rasterize.js rasterizes a web page to image or PDF 

PhantomJS QuicStart Guide का कहना है::

उत्पादन पीडीएफ उत्पादन संभव है, उदाहरण के लिए खंड प्रतिपादन/रैस्टराइज़ेशन में वहाँ निम्न स्क्रिप्ट है कि आप इस प्रक्रिया में मदद करता है उल्लेख किया गया है एक विकिपीडिया लेख से:

phantomjs rasterize.js 'http://en.wikipedia.org/w/index.php?title=Jakarta&printable=yes' jakarta.pdf 

या प्रिंटर के लिए तैयार की नकल पुस्तिकाओं बनाते समय:

phantomjs rasterize.js http://www.nihilogic.dk/labs/webgl_cheat_sheet/WebGL_Cheat_Sheet.htm webgl.pdf 

मैं कुछ पन्नों की पीडीएफ पीढ़ी का परीक्षण किया और अगर पेज मानकों का पालन, यह अच्छे परिणाम पैदा करता है। टेक्स्ट उच्च गुणवत्ता वाले चयन योग्य और प्रिंट करने योग्य है, लेकिन कुछ पृष्ठों पर पीडीएफ में लेआउट पीएनजी जैसा ही नहीं है।

$ phantomjs rasterize.js 'http://windows.microsoft.com/en-US/windows/home' microsoft.png 

$ phantomjs rasterize.js 'http://windows.microsoft.com/en-US/windows/home' microsoft.pdf 

Example of png and pdf generation using Phantomjs

मैं भी http://lab.simurai.com/buttons/ परीक्षण किया: नीचे दो स्क्रीनशॉट जो आदेशों का उपयोग करते उत्पन्न कर रहे हैं है। पीडीएफ और पीएनजी बहुत समान थे और नीचे पीडीएफ का एक नमूना है जिसे मैंने 5641 पीएक्स चौड़ा कर दिया और इसके एक क्षेत्र को फसल लगाया। पिछले पीडीएफ उदाहरण के रूप में, पाठ पीडीएफ में चयन योग्य है और जैसा कि आप देखते हैं, पाठ तेज है (कोई एंटीअलाइज़ नहीं है!)।

CSS3Buttons

मैं CentOS5 स्रोत से संकलन पर क्यूटी पुस्तकालय और PhantomJS स्थापित करने के लिए पहले की कोशिश की, लेकिन कोई किस्मत की स्थापना करना। तब उबंटू 11.10 पर और इस प्रक्रिया दर्दरहित था:

मैं http://phantomjs.googlecode.com/files/phantomjs-1.7.0-linux-x86_64.tar.bz2 डाउनलोड किया है और

tar -xjvf phantomjs-1.7.0-linux-x86_64.tar.bz2 

का उपयोग कर इसे निकाला और फिर प्रणाली के बिन निर्देशिका के लिए निष्पादन योग्य प्रतिलिपि बनाई phantomjs:

$ cp phantomjs-1.7.0-linux-x86_64/bin/phantomjs /usr/local/bin/phantomjs 

और phantomjs तैयार था चलाने के लिए।

यदि जेनरेट किया गया पीडीएफ अच्छा नहीं है, तो आप वेबकिट अपडेट करने का प्रयास कर सकते हैं, लेकिन मुझे लगता है कि परिणाम पर्याप्त होना चाहिए। फैंटॉमजेएस में उत्कृष्ट अद्यतन चक्र है, इसलिए उचित समय में बग को ठीक किया जाना चाहिए।

PhantomJS FAQ में संभावनाओं की अच्छी जानकारी भी है।