it-swarm.asia

تحويل HTML + CSS إلى PDF مع PHP؟

لدي مستند HTML (وليس XHTML) يتم عرضه بشكل جيد في Firefox 3 و IE 7. ويستخدم CSS الأساسي إلى حد ما لتصميمه ويجعله جيدًا في HTML.

أنا الآن بعد وسيلة لتحويله إلى PDF. لقد حاولت:

  • DOMPDF : كان لديه مشاكل كبيرة مع الجداول. لقد استوعبت طاولاتي المتداخلة الكبيرة وساعدت (قبل أن تستهلك ما يصل إلى 128M من الذاكرة ثم تموت - وهذا هو الحد الأقصى على الذاكرة في php.ini) ولكنه يسبب فوضى كاملة من الجداول ولا يبدو أنه يحصل الصور. كانت الجداول مجرد عناصر أساسية مع بعض أنماط الحدود لإضافة بعض الخطوط في نقاط مختلفة ؛
  • HTML2PDF و HTML2PS : كنت في الواقع حظًا أفضل مع هذا. عرض بعض الصور (جميع الصور عبارة عن عناوين URL لمخطط Google) وكان تنسيق الجدول أفضل بكثير ، لكن يبدو أنه واجه بعض المشكلات المعقدة التي لم أحصل عليها بعد وأظل أتحمل أخطاء node_type () غير معروفة. لست متأكدا من أين نذهب من هنا؛ و
  • Htmldoc : يبدو أن هذا يعمل بشكل جيد على HTML الأساسي ولكن لا يوجد لديه أي دعم تقريبًا لـ CSS على الإطلاق لذا عليك القيام بكل شيء في HTML (لم أكن أدرك أنه لا يزال 2001 في Htmldoc-land ...) لذلك عديمة الفائدة بالنسبة لي.

جربت تطبيق Windows يدعى Html2Pdf Pilot قام بعمل جيد حقًا ولكنني أحتاج إلى شيء يعمل على أقل تقدير على Linux ويعمل بشكل مثالي عند الطلب عبر PHP على خادم الويب.

ما الذي أفتقده ، أو كيف يمكنني حل هذه المشكلة؟

1520
cletus

مهم: يرجى ملاحظة أن هذه الإجابة كتبت في عام 2009 وقد لا تكون الحل الأكثر فعالية من حيث التكلفة اليوم في عام 2019. البدائل عبر الإنترنت أفضل اليوم في هذا مما كانت عليه في ذلك الوقت.

فيما يلي بعض الخدمات عبر الإنترنت التي يمكنك استخدامها:


إلقاء نظرة على PrinceXML .

إنه بالتأكيد أفضل HTML/CSS إلى PDF محول هناك ، على الرغم من أنه ليس مجانيًا (ولكن مهلا ، قد لا تكون البرمجة الخاصة بك مجانية أيضًا ، لذلك إذا وفر عليك 10 ساعات من العمل ، فأنت في المنزل مجانًا (نظرًا لأنك تحتاج أيضًا إلى مراعاة أن الحلول البديلة ستتطلب منك إعداد خادم مخصص بالبرنامج المناسب)

أوه نعم ، هل ذكرت أن هذا هو الحل الأول (وربما فقط) HTML2PDF الذي يعمل بالكامل ACID2 ؟

عينات PrinceXML

512
SchizoDuckie

ألقِ نظرة على wkhtmltopdf . إنه مفتوح المصدر ، يعتمد على webkit ومجاني.

كتبنا تعليمي صغير هنا .

EDIT (2017):

إذا كان لبناء شيء ما اليوم ، فلن أذهب إلى هذا الطريق بعد الآن.
لكن سيستخدم http://pdfkit.org/ بدلاً من ذلك.
ربما تجريده من جميع التبعيات nodejs الخاص به ، لتشغيل في المستعرض.

653
Mic

بعد إجراء بعض التحقيقات وتصفيف الشعر بشكل عام ، يبدو أن الحل HTML2PDF . DOMPDF قام بعمل فظيع مع الجداول والحدود وحتى التصميم المعقد بشكل معتدل و htmldoc يبدو قويًا إلى حد ما ولكن جاهل تمامًا في CSS ولا أريد العودة إلى عمل تنسيق HTML دون CSS فقط لهذا البرنامج.

بدا HTML2PDF الأكثر وعدًا لكني ظللت أواجه هذا الخطأ الغريب في الوسائط المرجعية الخالية إلى node_type. وأخيرا وجدت الحل لهذا. بشكل أساسي ، عملت PHP 5.1.x بشكل جيد مع استبدال regex (preg_replace_ *) على سلاسل من أي حجم. PHP 5.2.1 قدم توجيه تكوين php.ini يسمى pcre.backtrack_limit. ما تقوم به معلمة التكوين هذه هو تحديد طول السلسلة التي تتم المطابقة من خلالها. لماذا قدم هذا أنا لا أعرف. تم اختيار القيمة الافتراضية على أنها 100،000. لماذا هذه القيمة المنخفضة؟ مرة أخرى ، لا فكرة.

A تم رفع الخطأ ضد PHP 5.2.1 لهذا ، والذي لا يزال مفتوحًا بعد عامين تقريبًا}.

الأمر المرعب في ذلك هو أنه عند تجاوز الحد ، يستبدل فقط فشل بصمت. على الأقل في حالة ظهور خطأ وتسجيله ، سيكون لديك بعض الدلائل على ما حدث ولماذا وما الذي يجب تغييره لإصلاحه. لكن لا.

لذلك لدي ملف HTML 70k لتحويله إلى PDF. يتطلب إعدادات php.ini التالية:

  • pcre.backtrack_limit = 2000000 ؛ # ربما أكثر مما أحتاج لكن هذا جيد
  • memory_limit = 1024M ؛ # نعم ، غيغا بايت واحد ؛ و
  • max_execution_time = 600 ؛ # نعم ، 10 دقائق.

ربما لاحظ القارئ الذكي أن ملف HTML الخاص بي أصغر من 100 كيلو بايت. السبب الوحيد الذي يجعلني أخمن سبب حدوث هذه المشكلة هو أن html2pdf يقوم بتحويل إلى xhtml كجزء من العملية. ربما أخذني ذلك (على الرغم من أن ما يقرب من 50 ٪ سخام يبدو غريبا). مهما كان الأمر ، عملت أعلاه.

الآن ، html2pdf هو خنزير مورد. يستغرق ملفي الذي يبلغ طوله 70 كيلو بايت حوالي 5 دقائق و 500 إلى 600 متر على الأقل من RAM لإنشاء 35 صفحة PDF. ليس بالسرعة الكافية (إلى حد بعيد) للتنزيل في الوقت الحقيقي لسوء الحظ ، واستخدام الذاكرة يضع نسبة استخدام الذاكرة في حدود 1000 إلى 1 (600M من RAM لملف 70 كيلو بايت) ، وهو سخيفة تماما.

لسوء الحظ ، هذا هو أفضل ما توصلت إليه.

146
cletus

لماذا لا تجرب mPDF الإصدار 2.0 ؟ لقد استخدمتها لإنشاء PDF مستند. أنه يعمل بشكل جيد.

في نفس الوقت ، يوجد mPDF في الإصدار 5.7 ويتم صيانته بنشاط ، على عكس HTML2PS/HTML2PDF

لكن ضع في اعتبارك أن الوثائق قد يكون من الصعب حقًا التعامل معها. على سبيل المثال ، ألقِ نظرة على هذه الصفحة: https://mpdf.github.io/ .

يمكن إجراء المهام الأساسية جدًا حول HTML إلى pdf ، مع هذه المكتبة ، لكن المهام الأكثر تعقيدًا ستستغرق بعض الوقت في قراءة الوثائق و "فهمها".

120
Karthick

1) استخدام MPDF !

أ) استخراج في yourfolder

ب) إنشاء file.php في yourfolder وإدراج مثل هذا الرمز:

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

ج) افتح file.php من متصفحك




2) استخدام pdfToHtml !

1) استخراج pdftohtml.exe إلى المجلد الجذر الخاص بك:

2) داخل هذا المجلد ، في anyfile.php ملف ، ضع هذا الكود (على افتراض ، هناك مثال مصدر. 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) أدخل FinalFolder ، وسيكون هناك الملفات المحولة (مثل العديد من الصفحات ، مثل المصدر PDF كان ..)

65
T.Todua

Checkout TCPDF . يحتوي على بعض وظائف HTML إلى PDF التي قد تكون كافية لما تحتاج إليه. إنه مجاني أيضًا!

54
Darryl Hein

أقترحDocRaptor(والذي يستخدم PrinceXML كـ "المحرك")

29
Oren

لقد تم ذكره بالفعل ، لكن أود التأكيد على أن ملف PDF هو محول HTML الأسهل والأقوى والأكثر حرية لتحويل PDF إلى هناك. السماء حقا الحد. يمكنك حتى إنشاء pdf للبيانات الديناميكية التي ينشئها المستخدم.

على سبيل المثال ، أراد العميل نظام CMS حتى يتمكن من تحديث قائمة الأغاني للموسيقى التي لعبها في ناديه. لم تكن هذه مشكلة ، لكنه أراد أيضًا أن يتمكن المستخدمون من تنزيل ملف بتنسيق .pdf لقائمة التشغيل ، ولذا يجب تحديث ملف pdf القابل للتنزيل بواسطة cms أيضًا. بفضل mpdf ، مع بعض الحلقات البسيطة والمتغيرات المتداخلة ، يمكنني القيام بذلك. شيء اعتقدت ان الامر سيستغرق لي اسابيع حرفيا استغرق مني دقائق.

عظيم المادة التي ساعدتني على البدء.

27
Starkers

فقط ليرتّب الخيط ، جربت DOMPDF وقد نجحت تمامًا. لقد استعملت DIV وعناصر مستوى البلوك الأخرى لوضع كل شيء ، احتفظت به بدقة CSS 2.1 ولعب بشكل جيد جدًا.

27
Filip Dupanović

خبر جيد! Snappy !!

Snappy هو من السهل جدًا مفتوحة المصدر مكتبة PHP5 ، مما يسمح بإنشاء صورة مصغرة أو لقطة أو PDF من عنوان url أو صفحة html. و ... يستخدم ممتاز webkit-basedwkhtmltopdf

استمتع! ^ _ ^

27
Paulo Coghi

HTML2PDF و HTML2PS الذي ذكر أصلاً في المشاركة الافتتاحية كان يتحدث عن حزمة 2009 مع هذا link

ولكن هناك أفضل HTML2PDF

يعتمد على TCPDF على الرغم من أنه جزئيًا بالفرنسية.

يمكنك الحصول على رؤوس الجداول أو تذييلاتها التي تتكرر على الصفحات وتحتوي على أرقام الصفحات وإجمالي الصفحات. انظر أمثلة لها . لقد تم استخدامه لأكثر من ثلاث سنوات وأوصي به.

23
Luke Wenke

حسنًا ، إذا كنت ترغب في العثور على مكتبة تحويل XHTML + CSS مثالية لـ PDF ، فنسيتها. إنه أبعد ما يكون عن ممكن. لأنه يشبه البحث عن متصفح مثالي (محرك عرض XHTML + CSS). هل لدينا واحدة؟ IE أو FF؟

لقد حققت بعض النجاح مع DOMPDF. الشيء هو أنه يجب عليك تعديل كود HTML + CSS لتتوافق مع الطريقة التي تعمل بها المكتبة. بخلاف ذلك ، لدي نتائج جيدة.

انظر أدناه:

HTML الأصلي

تحويل HTML إلى PDF

23
datasn.io

هناك برنامج تعليمي حول devzone لـ Zend حول إنشاء pdf من php ( جزء 1 ، جزء 2 ) دون أي مكتبات خارجية. لم أقم مطلقًا بتطبيق هذا النوع من الحلول ، ولكن نظرًا لأن الأمر كله php ، فقد تجد أنه أكثر مرونة في التنفيذ والتصحيح.

19
yoavf

جرّب الاستيلاء على أحدث إصدار ليلي dompdf build - كنت أستخدم إصدارًا أقدم كان خنزير موارد فظيعًا واستغرق الأمر إلى الأبد لتقديم ملف pdf الخاص بي. بعد الاستيلاء على ليلا من هنا .

استغرق الأمر بضع ثوانٍ فقط لإنشاء PDF - وكان الأمر جيدًا تمامًا كما هو الحال مع PrinceXML / Docraptor . يبدو أنهم قاموا بجدية بتحسين dompdf code منذ آخر مرة استخدمتها!

14
Arni J

ذكر داريل هاين أعلاه TCPDF من المحتمل أن يكون فكرة رائعة. رمز نيكولا أسوني مفيد وقوي للغاية. القاتل الوحيد هو إذا كنت تخطط لدمج PDF ملفات _ مع ملفاتك التي تم إنشاؤها PDF فهي لا تملك هذه الميزات. سيكون عليك إنشاء PDF ثم دمجها باستخدام شيء مثل PDFTK by Sid Steward (www.pdflabs.com/tools/pdftk-the-pdf-toolkit/).

14
Arachnid

من حيث التكلفة ، قد يكون استخدام خدمة الويب (API) في كثير من الحالات هو النهج الأكثر منطقية. بالإضافة إلى ذلك ، من خلال الاستعانة بمصادر خارجية لهذه العملية ، فإنك تقوم بإكمال البنية الأساسية/الخلفية الخاصة بك - شريطة أن تستخدم خدمة حسنة السمعة - تضمن التوافق مع ضبط معايير الويب ووقت التشغيل وأوقات المعالجة القصيرة وتسليم المحتوى السريع.

لقد أجريت بعض الأبحاث حول معظم خدمات الويب المتوفرة حاليًا في السوق ، يرجى العثور أدناه على واجهات برمجة التطبيقات التي أشعر أنها جديرة بالذكر في هذا الموضوع ، في ترتيب بناءً على نسبة السعر/القيمة. كلهم يقدمون فصولًا وحزمًا سابقة التجهيز PHP.

  1. pdflayer.com - التكلفة: $ - الجودة: ☆☆☆☆
  2. docraptor.com - التكلفة: $$$ - الجودة: ☆☆☆☆☆
  3. pdfcrowd.com - التكلفة: $$ - الجودة: ☆☆☆

الجودة:

وجود محرك عالي الجودة PrinceXML بمثابة العمود الفقري ، DocRaptor يوفر بوضوح أفضل PDF جودة ، ويعود مصقول للغاية وتحويله جيدًا PDF _ المستندات. ومع ذلك ، فإن pdflayer API الخدمة قريبة جدا هنا. Pdfcrowd لا يسجل بالضرورة مع الجودة ، ولكن مع سرعة المعالجة.

التكلفة:

pdflayer.com - كما هو موضح أعلاه ، فإن الخيار الأكثر فعالية من حيث التكلفة هنا هو pdflayer.com ، حيث يقدم خطة اشتراك مجانية تمامًا لـ 100 ملف PDF شهري والاشتراكات الممتازة تتراوح بين 9.99 - 119.99 دولارًا. (ثمن 10 آلاف شهريًا PDF المستندات 39.99 دولارًا.

docraptor.com - تقديم فترة تجريبية مجانية لمدة 7 أيام. تتراوح خطط الاشتراك المتميزة من 15 إلى 2250 دولارًا. (ثمن 10 آلاف شهريًا PDF المستندات = 300.00 دولارًا تقريبًا.} _

pdfcrowd.com - تقديم 100 ملف PDF مرة واحدة مجانًا. تتراوح خطط الاشتراك المتميزة بين 9 دولارات و 89 دولارًا. (سعر 10 آلاف شهريًا PDF المستندات = 49.00 دولارًا تقريبًا.} _

لقد استخدمت الثلاثة ، ومن المفترض أن يساعد هذا النص أي شخص على اتخاذ قرار دون الاضطرار إلى دفع ثمنها جميعًا. لم تتم كتابة هذا النص لتأييد أي منتج واحد وليس لدي أي ارتباط بأي من المنتجات.

13
Frank

إذا كان لديك حق الوصول إلى سطر الأوامر ، فمن الممكن استخدام PhantomJS لإنشاء PDF من URL (عن بعد أو محلي).

إنه يعمل بشكل جيد حقًا ، وهو حل مجاني.

ألقِ نظرة على هذا المثال النصي الذي تم إنشاؤه لهذه المشكلة بالضبط.

12
chjortlund

هذا السؤال قديم جدًا بالفعل ، ولكن لم أر أي شخص يذكر CutyCapt لذلك سأفعل :)

CutyCapt

CutyCapt عبارة عن أداة مساعدة لسطر الأوامر صغيرة عبر الأنظمة لالتقاط عرض WebKit لصفحة الويب في مجموعة متنوعة من تنسيقات المتجهات والصور النقطية ، بما في ذلك تنسيقات SVG و PDF و PS و PNG و JPEG و TIFF و GIF و BMP

11
Koen.

لا أعتقد أن فئة php ستكون الأفضل لتقديم صفحة xHtml مع css.

ماذا يحدث عندما يخرج قانون المغلق الجديد؟ (قريبا المغلق 3.0 ...)

إن أفضل طريقة لعرض صفحة html هي المتصفح بشكل خفي. يمكن لـ Firefox 3.0 أن "يطبع" في نسق pdf ، طور torisugary امتدادًا (طباعة سطر الأوامر) لاستخدامه. هنا ستجد ذلك.

على أي حال ، لا يزال هناك العديد من problmes runninr firefox فقط كمحول pdf ...

في الوقت الحالي ، أعتقد أن wkhtmltopdf هو الأفضل (هذا هو الذي يستخدمه متصفح سفاري) ، سريع ، سريع ، رائع. نعم ، مفتوحة المصدر كذلك ... إعطائها نظرة

9
Strae

ربما يمكنك محاولة استخدام Tidy قبل تسليم الملف إلى المحول. إذا اختنق أحد العارضين بعض مشكلات HTML (مثل العلامة غير المغلقة) ، فقد يساعد ذلك.

9
PhiLho

قمت بتطوير واجهة برمجة تطبيقات عامة لإنشاء PDF ملفات من صفحات الويب. يحتوي على فئة عميل لطيفة PHP تجعله سهل الاستخدام للغاية. يستخدم wkhtmltopdf لتقديم PDF في السحابة.

لا حاجة لأي شيء خاص في HTML. لا حاجة لعناوين URL المطلقة في روابط الصور/css/js. يعمل على المضيف المحلي (آلة ديف) أيضا.

تحتوي الخدمة حاليًا على نقاط نهاية في 4 مناطق من Azure: شرق الولايات المتحدة ، غرب الولايات المتحدة ، شمال الاتحاد الأوروبي ، جنوب شرق آسيا.

إنه سريع لأنه يستخدم بروتوكول الملكية لإرسال محتويات صفحة الويب إلى واجهة برمجة التطبيقات للتحويل إلى PDF.

انها موثوقة لأن جميع نقاط النهاية متوازنة مع الحمل.

حساب مجاني متاح للاختبار أو الاستخدام المنخفض. التفاصيل على موقع الويب:

https://rotativahq.com

9
Giorgio Bozio

أوصي TCPDF أو DOMPDF ، بهذا الترتيب.

8
criss_ae

على الرغم من توفر العديد من الحلول بالفعل ، إلا أنني أوصي بالحلقتين التاليتين:

  1. HTM2PDF - يقدم API لتحويل HTML إلى PDF ولديه أيضًا PHP SDK ، مما يجعل من السهل جدًا تطبيقه في PHP ؛ إنه يوفر مجموعة من مواقع الخوادم في أوروبا وآسيا والولايات المتحدة الأمريكية
  2. يوفر PDFmyURL - واجهة برمجة تطبيقات تعمل على تشغيل URL و HTML لـ PDF أيضًا ، مع نفس الوظائف مثل HTM2PDF تقريبًا ، ولكنها تعمل على وضع تحميل متوازن وتحميلها لفترة أطول قليلاً

الشيء المختلف في واجهات برمجة التطبيقات هذه عن كل الحلول المذكورة سابقًا ، هو أنه - إلى جانب تحويل HTML إلى PDF باستخدام CSS و JavaScript - فإنه يوفر أيضًا PDF إدارة الحقوق والعلامات المائية والتشفير . لذلك فهو حل الكل في واحد لأولئك الذين يرغبون في المضي قدما.

إخلاء المسئولية: أعمل لدى Kaiomi ، وهي شركة تدير كلا الموقعين.

7
user1914292

التقديم الدقيق لا يعني شيئًا. هل التحقق من صحة؟

تبذل جميع المتصفحات أقصى ما في وسعها لإظهار شيء ما على الشاشة ، بغض النظر عن مدى سوء الإدخال. وبالطبع لا يفعلون نفس الشيء. إذا كنت تريد نفس العرض مثل FireFox ، فيمكنك استخدام محرك العرض الخاص به. هناك مولدات قوات الدفاع الشعبي لذلك. إنه عمل فظيع ، رغم ذلك.

7
Stephan Eggermont

TCPDF يعمل بشكل جيد ، لا توجد تبعيات ، مجاني ويتم إصلاحه باستمرار. لها سرعة معقولة إذا كانت محتويات HTML/CSS المرفقة مصاغة جيدًا. أقوم عادةً بتوليد من 50 إلى 300 كيلو بايت من مدخلات HTML (بما في ذلك CSS) وأحصل على PDF إخراج خلال 1-3 ثوانٍ مع 10 - 15 PDF صفحات.

أوصي بشدة باستخدام مرتبة مكتبة بتنسيق HTML جميلة قبل إرسال أي شيء إلى TCPDF.

5
lubosdz

هل HTML إلى PDF التحويل حقًا need لكي يحدث جانب الخادم باستخدام PHP؟

جئت للتو عبر jsPDF ، حل من جانب العميل باستخدام HTML5/JavaScript. رمز MIT المرخص موجود على GitHub ، أيضًا.

5
Oliver Schafeld

لقد جربت الكثير من المكتبات المختلفة لـ PHP. جميع المدرجة لقد حاولت. في رأيي TCPDF المكتبة هي أفضل أداء/قابلية للتسوية. إنه ببساطة التثبيت والاستخدام ، وأيضًا الأداء الجيد في التطبيقات الصغيرة والمتوسطة. إذا كنت بحاجة إلى أداء عالٍ ومستند كبير جدًاPDF ، فاستخدم Zend_PDF module ، لكن كن مستعدًا للترميز الصعب!

4
trullallero

واجهة برمجة تطبيقات الويب

إذا كان هناك أشخاص يبحثون دائمًا عن هذا النوع من الأشياء ، فهناك موقع free موقع ويب يسمح لك بتحويل كود HTML وصفحات الصفحات إلى pdf. يوجد أيضًا api (صغير جدًا) يتيح لك الحصول على ملف pdf من url.

التحقق من ذلك هنا

3
Superdrac

لاPHP، لكن جافا مكتبة ، والتي تفعل الشيء:

يأخذ Flying Saucer XML أو XHTML ويطبق أوراق أنماط متوافقة مع CSS 2.1 عليه ، ليتم تقديمه إلى PDF

يمكن استخدامه منPHPعبر system() أو مكالمة مماثلة. على الرغم من أنه يتطلبXMLجيد التكوين من input.

2
Ivan Kurmanov