كسر الصفحة في HTML2PDF
-
22-09-2019 - |
سؤال
أنا بصدد إنشاء ملف PDF ديناميكي ، والذي يحتوي على بيانات من حوالي 10000 مستخدم ، بشكل عام تم تطوير التطبيق باستخدام MySQL و PHP. المحتوى الديناميكي ثقيل لدرجة أنني وجدت صعوبة في معالجته fpdf()
صف دراسي. لذلك قمت بتحويل صفحة الإخراج PHP الخاص بي كملف HTML باستخدام ob_get_clean()
. الآن يتم إنشاء ملف HTML بنجاح وأيضًا ملف PDF. لكنني أريد أن أترك كسر صفحة بعد بيانات كل مستخدم ، يجب أن تبدأ بيانات كل مستخدم في صفحة جديدة. لم أستطع استخدام أي علامات HTML لأنه في ملف HTML الذي تم إنشاؤه ديناميكيًا ، كل شيء خارج <html>
و </html>
العلامات. الرجاء مساعدتي بحيث أقوم بإنشاء صفحة في ملف PDF بعد بيانات كل مستخدم ... شكرًا مقدمًا :)
المحلول
لقد اكتشفت هذا بعد أن أواجه نفس المشكلة. يدعم المحللون الذي يستخدمونه علامة الصفحة التي تشرد ، لكن HTML2PDF لا يعمل.
أعتقد أنني أعمل عن طريق القيام بالتعديلات التالية على HTML2PDF.Class:
حول الخط 4174 ، أول شيء في الداخل:
protected function _tag_close_P($param){
يجب ان يكون:
if($this->parsingCss->value['page-break-after'] == "always")
$this->_setNewPage();
حول الخط 2961 ، أول شيء في الداخل:
protected function _tag_close_DIV($param, $other='div'){
يجب ان يكون:
if($this->parsingCss->value['page-break-after'] == "always")
$this->_setNewPage();
نصائح أخرى
HTML2PDF يدعم صفحة بطاقة شعار:
protected function _tag_open_PAGE($param) {}
في السطر 2229. يمكنك أن ترى هناك ما هي السمات المدعومة. على سبيل المثال ، يقوم التالية بإنشاء صفحة واحدة في المناظر الطبيعية وواحدة في وضع الصورة:
<page orientation="l">
... some content ...
</page>
<page orientation="p">
... some content ...
</page>
استنادا إلى عمل MacDabby (الذي لا يعمل). ولكن شكرا له ، الفكرة صحيحة.
html2pdf v4.03
على سبيل المثال ، نريد تحليل علامة Div:
html2pdf.class.php خط 2948:
protected function _tag_close_DIV($param, $other='div')
{
if ($this->parsingCss->value['page-break-after'] == "always")
$this->_setNewPage(null, '', null, $this->_defaultTop);
$this->parsingCss->setPosition();
...
}
parsingcss.class.php خط 114:
//add a new style declaration
public function initStyle()
{
...
$this->value['page-break-after'] = null;
}
سطر 1024 أضف معالجًا جديدًا إلى حالة التبديل:
case 'page-break-after':
$this->value[$nom] = $val;
break;
وبعد ذلك ، يجب أن يعمل محتوى HTML الخاص بك
<div style="page-break-after:always; clear:both"></div>
احترس من النمط الحساس للحالة ، لست متأكدًا مما إذا كان المكون الإضافي يتعامل معه
ربما تريد استخدام بعض CSS ، على سبيل المثال:
h1 {page-break-before:always}