html टैग - एचटीएमएल+सीएसएस को PHP के साथ पीडीएफ में कनवर्ट करें?




परिभाषित कोडिंग (25)

ठीक है, अब मैं अपने सिर को ईंट की दीवार के खिलाफ बैंग कर रहा हूं।

मेरे पास एक HTML (एक्सएचटीएमएल नहीं) दस्तावेज़ है जो फ़ायरफ़ॉक्स 3 और आईई 7 में ठीक है। यह शैली के लिए काफी बुनियादी सीएसएस का उपयोग करता है और HTML में ठीक प्रस्तुत करता है।

अब मैं इसे पीडीएफ में बदलने के तरीके के बाद हूं। मैं प्रयास कर चुका हूं:

  • DOMPDF : इसमें टेबल के साथ बड़ी समस्याएं थीं। मैंने अपनी बड़ी घोंसले वाली टेबलों को पहचाना और इससे मदद मिली (इससे पहले कि यह स्मृति के 128 एम तक मर रहा था, फिर मर रहा था - php.ini में स्मृति पर मेरी सीमा है) लेकिन यह टेबल की पूरी गड़बड़ी करता है और ऐसा प्रतीत नहीं होता है इमेजिस। विभिन्न बिंदुओं पर कुछ लाइन जोड़ने के लिए टेबल कुछ सीमा शैलियों के साथ मूलभूत सामग्री थीं;
  • एचटीएमएल 2 पीडीएफ और एचटीएमएल 2 पीएस : मैं वास्तव में इसके साथ बेहतर भाग्य था। इसने कुछ छवियों को प्रस्तुत किया (सभी छवियां Google चार्ट यूआरएल हैं) और तालिका स्वरूपण बहुत बेहतर था, लेकिन ऐसा लगता है कि कुछ जटिलता समस्या है जिसे मैंने अभी तक नहीं समझा है और अज्ञात node_type () त्रुटियों के साथ मर रहा है। कुछ निश्चित नहीं कि यहाँ से कहाँ जाना है; तथा
  • Htmldoc : यह मूल HTML पर ठीक काम करता प्रतीत होता है लेकिन सीएसएस के लिए लगभग कोई समर्थन नहीं है, इसलिए आपको HTML में सब कुछ करना है (मुझे नहीं पता था कि यह अभी भी 2001 में एचटीएमल्डोक-भूमि में था ...) तो यह मेरे लिए बेकार है।

मैंने एचटीएमएल 2 पीडीएफ पायलट नामक एक विंडोज ऐप की कोशिश की जो वास्तव में एक सुंदर सभ्य नौकरी करता था लेकिन मुझे कुछ चाहिए जो कि लिनक्स पर न्यूनतम रन पर और वेबसर्वर पर PHP के माध्यम से आदर्श रूप से ऑन-डिमांड चलाता है।

मैं वास्तव में विश्वास नहीं कर सकता मैं यह अटक गया हूँ। क्या मैं कुछ भूल रहा हूँ?


Answers

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


थ्रेड को टक्कर देने के लिए, मैंने डीओएमपीडीएफ की कोशिश की है और यह पूरी तरह से काम करता है। मैंने सबकुछ रखने के लिए DIV और अन्य ब्लॉक स्तर तत्वों का उपयोग किया है, इसे सख्ती से सीएसएस 2.1 रखा है और यह अच्छी तरह से वर्यू खेला है।


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

एचटीएमएल में विशेष कुछ भी करने की ज़रूरत नहीं है। छवियों / सीएसएस / जेएस लिंक में पूर्ण यूआरएल की आवश्यकता नहीं है। लोकहोस्ट (देव मशीन) पर भी काम करता है।

वर्तमान में सेवा 4 Azure क्षेत्रों में अंतराल है: यूएस ईस्ट, यूएस वेस्ट, ईयू उत्तर, दक्षिणपूर्व एशिया।

यह तेज़ है क्योंकि यह पीडीएफ में रूपांतरण के लिए एपीआई को वेब पेज सामग्री भेजने के लिए एक मालिकाना प्रोटोकॉल का उपयोग करता है।

यह भरोसेमंद है क्योंकि सभी अंतराल संतुलित लोड होते हैं।

परीक्षण या कम उपयोग के लिए मुफ्त खाता उपलब्ध है। वेबसाइट पर विवरण:

https://rotativahq.com


wkhtmltopdf पर एक नज़र डालें। यह वेबकिट और मुफ्त के आधार पर खुला स्रोत है।

हमने here एक छोटा सा ट्यूटोरियल लिखा था।

संपादित करें (2017):

अगर आज कुछ बनाना है, तो मैं अब उस मार्ग पर नहीं जाऊंगा।
लेकिन इसके बजाय http://pdfkit.org/ उपयोग करेंगे।
ब्राउजर में चलाने के लिए शायद इसे अपने सभी नोडजेस निर्भरताओं को अलग करना।


यह पहले ही उल्लेख किया जा चुका है, लेकिन मैं यह पुष्टि करना चाहता हूं कि mpdf पीडीएफ कनवर्टर के लिए सबसे आसान, सबसे शक्तिशाली और सबसे नि: शुल्क HTML है। आकाश वास्तव में सीमा है। आप गतिशील, उपयोगकर्ता जेनरेट किए गए डेटा के पीडीएफ भी उत्पन्न कर सकते हैं।

उदाहरण के लिए, एक ग्राहक एक सीएमएस सिस्टम चाहता था ताकि वह अपने क्लब में खेले गए संगीत की ट्रैक सूची अपडेट कर सके। यह कोई समस्या नहीं थी, लेकिन वह भी चाहता था कि उपयोगकर्ता प्लेलिस्ट के .pdf डाउनलोड कर सकें, और इसलिए यह डाउनलोड करने योग्य पीडीएफ को भी सीएमएस द्वारा अद्यतन किया जाना था। Mpdf के लिए धन्यवाद, कुछ सरल loops और interspersed चर के साथ मैं बस ऐसा कर सकता था। कुछ ऐसा जो मैंने सोचा था वह मुझे हफ्तों ले जाएगा सचमुच मुझे मिनट ले गया।

पेज डाउनलोड करें

महान article जिसने मुझे शुरू करने में मदद की।


यदि आपके पास कमांड लाइन तक पहुंच है तो URL (रिमोट या लोकल) से PDF बनाने के लिए फैंटॉमजेएस का उपयोग करना संभव है।

यह वास्तव में अच्छी तरह से काम करता है, और एक नि: शुल्क समाधान है।

इस सटीक समस्या के लिए बनाई गई इस github.com/ariya/phantomjs/blob/master/examples/rasterize.js स्क्रिप्ट पर एक नज़र डालें।


खुशखबरी! Snappy !!

Snappy एक बहुत ही आसान ओपन सोर्स PHP5 लाइब्रेरी है, जो यूआरएल या एचटीएमएल पेज से थंबनेल, स्नैपशॉट या पीडीएफ पीढ़ी की इजाजत देता है। और ... यह उत्कृष्ट वेबकिट-आधारित wkhtmltopdf का उपयोग करता है

का आनंद लें! ^ _ ^



नवीनतम रात के dompdf निर्माण को पकड़ने का प्रयास करें - मैं एक पुराने संस्करण का उपयोग कर रहा था जो एक भयानक संसाधन हॉग था और मेरे पीडीएफ प्रस्तुत करने के लिए हमेशा के लिए लिया। here से एक रात को पकड़ने के बाद।

पीडीएफ उत्पन्न करने में केवल कुछ सेकंड लग गए - और यह प्रिंसएक्सएमएल / डॉक्रैप्टर के रूप में अच्छी तरह से प्रस्तुत किया गया था। ऐसा लगता है कि मैंने dompdf कोड को गंभीरता से अनुकूलित किया है क्योंकि मैंने इसे अंतिम बार उपयोग किया था!


ललित प्रतिपादन का मतलब कुछ भी नहीं है। क्या यह मान्य है?

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


मुझे नहीं लगता कि एक PHP वर्ग सीएसएस के साथ एक एक्सएचटीएमएल पेज प्रस्तुत करने के लिए सबसे अच्छा होगा।

क्या होता है जब एक नया सीएसएस नियम बाहर आ जाता है? (जल्द ही सीएसएस 3.0 ...)

एक HTML पृष्ठ प्रस्तुत करने का सबसे अच्छा तरीका, obvisiuly, एक ब्राउज़र है। फ़ायरफ़ॉक्स 3.0 पीडीएफ प्रारूप में मूल रूप से 'प्रिंट' कर सकता है, टोरिसुगरी ने इसका उपयोग करने के लिए एक एक्सटेंशन (कमांड लाइन प्रिंट) विकसित किया है। यहां आपको यह मिल जाएगा।

वैसे भी, अभी भी एक पीडीएफ कनवर्टर के रूप में कई problmes runninr फ़ायरफ़ॉक्स हैं ...

फिलहाल, मुझे लगता है कि wkhtmltopdf सबसे अच्छा है (वह सफारी ब्राउज़र द्वारा उपयोग किया जाता है), तेज़, तेज़, कमाल। हां, ओपनसोर्स भी ... wkhtmltopdf


ठीक है अगर आप पीडीएफ कनवर्टर लाइब्रेरी में एकदम सही एक्सएचटीएमएल + सीएसएस खोजना चाहते हैं, तो इसे भूल जाओ। यह संभव से बहुत दूर है। क्योंकि यह एक सही ब्राउज़र (एक्सएचटीएमएल + सीएसएस रेंडरिंग इंजन) ढूंढने जैसा है। क्या हमारे पास एक है? आईई या एफएफ?

मुझे डीओएमपीडीएफ के साथ कुछ सफलता मिली है। बात यह है कि पुस्तकालय का काम करने के तरीके के साथ जाने के लिए आपको अपने एचटीएमएल + सीएसएस कोड को संशोधित करना होगा। इसके अलावा, मेरे पास बहुत अच्छे परिणाम हैं।

निचे देखो:

मूल एचटीएमएल

एचटीएमएल को पीडीएफ में कनवर्ट करना


कुछ जांच और सामान्य बालों को खींचने के बाद समाधान HTML2PDF लगता है। DOMPDF ने टेबल, सीमाओं और यहां तक ​​कि मामूली जटिल लेआउट के साथ एक भयानक काम किया और htmldoc काफी मजबूत लगता है लेकिन लगभग पूरी तरह से सीएसएस-अज्ञानी है और मैं उस कार्यक्रम के लिए सीएसएस के बिना एचटीएमएल लेआउट करने के लिए वापस नहीं जाना चाहता हूं।

HTML2PDF ने सबसे अधिक आशाजनक देखा लेकिन मैंने node_type पर शून्य संदर्भ तर्कों के बारे में यह अजीब त्रुटि रखी। अंततः मुझे इसका समाधान मिला। असल में, PHP 5.1.x किसी भी आकार के तारों पर regex प्रतिस्थापन (preg_replace_ *) के साथ ठीक काम करता है। PHP 5.2.1 ने pcre.backtrack_limit नामक एक php.ini कॉन्फ़िगरेशन निर्देश प्रस्तुत किया । यह कॉन्फ़िगरेशन पैरामीटर क्या करता है स्ट्रिंग लम्बाई को सीमित करता है जिसके लिए मिलान किया जाता है। यह क्यों पेश किया गया था मुझे नहीं पता। डिफ़ॉल्ट मान 100,000 के रूप में चुना गया था। इतना कम मूल्य क्यों? फिर, कोई विचार नहीं।

इसके लिए PHP 5.2.1 के विरुद्ध एक बग उठाया गया था , जो लगभग दो साल बाद भी खुला है।

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

तो मेरे पास पीडीएफ में बदलने के लिए 70k एचटीएमएल फाइल है। इसके लिए निम्न php.ini सेटिंग्स की आवश्यकता है:

  • pcre.backtrack_limit = 2000000; # शायद मुझे जरूरत से ज्यादा लेकिन यह ठीक है
  • memory_limit = 1024M; # हाँ, एक गीगाबाइट ; तथा
  • max_execution_time = 600; # हाँ, 10 मिनट

अब अजीब पाठक ने देखा होगा कि मेरी HTML फ़ाइल 100k से छोटी है। एकमात्र कारण यह है कि मैं इस समस्या को क्यों मार सकता हूं यह है कि html2pdf प्रक्रिया के हिस्से के रूप में xhtml में रूपांतरण करता है। शायद वह मुझे ले गया (हालांकि लगभग 50% ब्लोट अजीब लगता है)। जो भी मामला है, उपरोक्त काम किया।

अब, html2pdf एक संसाधन हॉग है। 35 पेज पीडीएफ फ़ाइल बनाने के लिए मेरी 70k फ़ाइल में लगभग 5 मिनट और कम से कम 500-600 एम रैम लगता है। दुर्भाग्य से वास्तविक समय डाउनलोड के लिए पर्याप्त तेज़ (दूर तक) नहीं है और स्मृति उपयोग 1000-से-1 (70k फ़ाइल के लिए 600 एम रैम) के क्रम में मेमोरी उपयोग अनुपात डालता है, जो पूरी तरह से हास्यास्पद है।

दुर्भाग्यवश, यह सबसे अच्छा है जिसके साथ मैं आया हूं।


क्या HTML से पीडीएफ रूपांतरण वास्तव में PHP का उपयोग कर सर्वर-साइड होने की आवश्यकता है?

मैं बस jsPDF आया, जो क्लाइंट-साइड समाधान एचटीएमएल 5 / जावास्क्रिप्ट का उपयोग कर रहा था। एमआईटी-लाइसेंस प्राप्त कोड भी गिटहब पर है


मैंने PHP के लिए कई अलग-अलग पुस्तकालयों की कोशिश की है। मैंने सूचीबद्ध सभी सूचीबद्ध किए हैं। मेरी राय में TCPDF लाइब्रेरी सबसे अच्छा समझौता प्रदर्शन / प्रयोज्यता है। छोटे मध्यम अनुप्रयोग में भी अच्छा प्रदर्शन स्थापित करने और उपयोग करने के लिए यह बहुत आसान है। यदि आपको उच्च प्रदर्शन और बहुत बड़ा पीडीएफ दस्तावेज चाहिए, तो Zend_PDF मॉड्यूल का उपयोग करें, लेकिन कड़ी मेहनत करने के लिए तैयार हो जाओ!


किसी बाहरी पुस्तकालयों के बिना php ( भाग 1 , भाग 2 ) से पीडीएफ उत्पन्न करने पर ज़ेंड के डेज़ोन पर एक ट्यूटोरियल है। मैंने कभी इस तरह के समाधान को लागू नहीं किया है, लेकिन चूंकि यह सभी PHP है, इसलिए आपको इसे लागू करने और डीबग करने के लिए और अधिक लचीला मिल सकता है।


यह सवाल पहले से ही बहुत पुराना है, लेकिन किसी ने CutyCapt जिक्र नहीं देखा है, इसलिए मैं :)

CutyCapt

CutyCapt एसवीजी, पीडीएफ, पीएस, पीएनजी, जेपीईजी, टीआईएफएफ, जीआईएफ, और बीएमपी सहित विभिन्न प्रकार के वेक्टर और बिटमैप प्रारूपों में वेबकिट के वेब पेज के प्रतिपादन को कैप्चर करने के लिए एक छोटी क्रॉस-प्लेटफार्म कमांड लाइन उपयोगिता है।


मैं टीसीपीडीएफ या डीओएमपीडीएफ की सिफारिश करता हूं, वह आदेश है


1) MPDF उपयोग करें!

ए) अपने yourfolder में yourfolder

बी) yourfolder में file.php बनाएँ और इस तरह के कोड डालें:

<?php
include('../mpdf.php');
$mpdf=new mPDF();
$mpdf->WriteHTML('<p style="color:red;">Hallo World<br/>Fisrt sentencee</p>');
$mpdf->Output();   exit;
 ?>

सी) अपने ब्राउज़र से open.php खोलें




2) pdfToHtml प्रयोग करें!

1) अपने रूट फ़ोल्डर में pdftohtml.exe निकालें:

2) उस फ़ोल्डर के अंदर, anyfile.php फ़ाइल में, इस कोड को रखें (मान लें, एक स्रोत example.pdf भी है):

<?php
$source="example.pdf";
$output_fold="FinalFolder";

    if (!file_exists($output_fold)) { mkdir($output_fold, 0777, true);}
$result= passthru("pdftohtml $source $output_fold/new_filename",$log);
//var_dump($result); var_dump($log);
?>

3) फाइनलफोल्डर दर्ज करें , और कनवर्ट की गई फाइलें होंगी (जैसे कई पेज, स्रोत पीडीएफ के रूप में ..)


लागत के संदर्भ में, वेब-सेवा (एपीआई) का उपयोग करके कई मामलों में अधिक समझदार दृष्टिकोण हो सकता है। इसके अलावा, इस प्रक्रिया को आउटसोर्स करके आप अपने स्वयं के बुनियादी ढांचे / बैकएंड को बाधित करते हैं और बशर्ते आप एक प्रतिष्ठित सेवा का उपयोग कर रहे हों - वेब मानकों, अपटाइम, शॉर्ट प्रोसेसिंग टाइम्स और त्वरित सामग्री वितरण को समायोजित करने के साथ संगतता सुनिश्चित करें।

मैंने वर्तमान में बाजार में अधिकांश वेब सेवाओं पर कुछ शोध किया है, कृपया एपीआई के नीचे खोजें जो मुझे लगता है कि इस धागे पर मूल्य / मूल्य अनुपात के आधार पर एक आदेश में उल्लेखनीय है। वे सभी पूर्व-निर्मित PHP कक्षाएं और संकुल पेश कर रहे हैं।

  1. pdflayer.com - लागत: $ - गुणवत्ता: ☆☆☆☆
  2. docraptor.com - लागत: $$$ - गुणवत्ता: ☆☆☆☆☆
  3. pdfcrowd.com - लागत: $$ - गुणवत्ता: ☆☆☆

गुणवत्ता:

हाई-क्वालिटी इंजन PrinceXML को रीढ़ की हड्डी के रूप में रखने के बाद, डॉक रैप्टर स्पष्ट रूप से सर्वश्रेष्ठ पीडीएफ गुणवत्ता प्रदान करता है, जो अत्यधिक पॉलिश और अच्छी तरह से परिवर्तित पीडीएफ दस्तावेजों को लौटता है। हालांकि, पीडीएफएलएयर एपीआई सेवा यहां बहुत करीब आती है। Pdfcrowd आवश्यक रूप से गुणवत्ता के साथ स्कोर नहीं करता है, लेकिन प्रसंस्करण गति के साथ।

लागत:

pdflayer.com - जैसा ऊपर बताया गया है, यहां सबसे अधिक लागत प्रभावी विकल्प pdflayer.com है, जो 100 मासिक पीडीएफ और $ 9.99- $ 119.99 के बीच प्रीमियम सब्सक्रिप्शन के लिए पूरी तरह से नि: शुल्क सदस्यता योजना प्रदान करता है। 10,000 मासिक पीडीएफ दस्तावेज़ों की कीमत $ 39.99 है।

docraptor.com - एक 7-दिन की नि: शुल्क परीक्षण अवधि प्रदान करना। प्रीमियम सदस्यता योजना $ 15- $ 2250 से है। 10,000 मासिक पीडीएफ दस्तावेजों की कीमत ~ $ 300.00 है।

pdfcrowd.com - एक बार 100 पीडीएफ मुफ्त में पेश करना। प्रीमियम सदस्यता योजना $ 9- $ 89 से है। 10,000 मासिक पीडीएफ दस्तावेज़ों की कीमत ~ $ 49.00 है।

मैंने उन सभी तीनों का उपयोग किया है और यह पाठ किसी को भी उन सभी के लिए भुगतान किए बिना निर्णय लेने में मदद करना है। यह पाठ किसी एक उत्पाद का समर्थन करने के लिए नहीं लिखा गया है और मुझे किसी भी उत्पाद के साथ कोई संबद्धता नहीं है।


टीसीपीडीएफ के ऊपर डेरिल हेन का उल्लेख शायद एक अच्छा विचार है। निकोला असुनी का कोड बहुत आसान और शक्तिशाली है। एकमात्र हत्यारा यह है कि यदि आप कभी भी जेनरेट किए गए पीडीएफ के साथ पीडीएफ फाइलों को विलय करने की योजना बनाते हैं तो इसमें ऐसी विशेषताएं नहीं हैं। आपको पीडीएफ बनाना होगा और फिर सिड स्टीवार्ड (www.pdflabs.com/tools/pdftk-the-pdf-toolkit/) द्वारा पीडीएफटीके जैसे कुछ का उपयोग करके इसे मर्ज करना होगा।


एचटीएमएल 2 पीडीएफ और एचटीएमएल 2पीएस जिन्हें मूल रूप से पोस्ट खोलने में उल्लेख किया गया था, अब इस टूटी हुई लिंक के साथ 200 9 पैकेज के बारे में बात कर रहा था

लेकिन एक बेहतर HTML2PDF

यह टीसीपीडीएफ पर आधारित है हालांकि यह आंशिक रूप से फ्रेंच में है।

आपके पास टेबल हेडर या पाद लेख हो सकते हैं जो पृष्ठों पर दोहराए जाते हैं और पृष्ठ संख्याएं और कुल पृष्ठ होते हैं। इसके उदाहरण देखें। मैं इसे तीन साल से अधिक उपयोग कर रहा हूं और इसकी अनुशंसा करता हूं।


महत्वपूर्ण: कृपया ध्यान दें कि यह उत्तर 200 9 में लिखा गया था और यह 2018 में आज सबसे अधिक लागत प्रभावी समाधान नहीं हो सकता है। ब्राउज़र और अन्य ओपन सोर्स रेंडरर इस समय से बेहतर थे।

प्रिंसएक्सएमएल पर एक नज़र डालें

यह निश्चित रूप से पीडीएफ कनवर्टर के लिए सबसे अच्छा एचटीएमएल / सीएसएस है, हालांकि यह मुफ़्त नहीं है (लेकिन हे, आपका प्रोग्रामिंग या तो मुक्त नहीं हो सकता है, इसलिए यदि यह आपको 10 घंटे का काम बचाता है, तो आप घर मुक्त हैं (क्योंकि आपको भी आवश्यकता है ध्यान दें कि वैकल्पिक समाधानों के लिए आपको सही सॉफ़्टवेयर के साथ एक समर्पित सर्वर स्थापित करने की आवश्यकता होगी)

ओह हाँ, क्या मैंने उल्लेख किया कि यह पहला (और शायद केवल) HTML2PDF समाधान है जो पूर्ण ACID2 करता है?

प्रिंसएक्सएमएल नमूने


चेकआउट TCPDF । इसमें कुछ एचटीएमएल पीडीएफ कार्यक्षमता है जो आपको आवश्यकतानुसार पर्याप्त हो सकती है। यह भी मुफ़्त है!


table th,td {
    padding: 8px 2px;
}
table {
    border-collapse: separate;
    border-spacing: 2px;
}






php html css pdf pdf-generation