سؤال

هل من الممكن دمج بيانات FDF مع ملف PDF باستخدام PHP وحده؟ أم أنه لا يوجد خيار سوى استخدام أداة سطر أوامر الطرف الثالث لتحقيق ذلك؟

إذا كان هذا هو الحال ، فهل يمكن لأي شخص أن يوجهني في اتجاه واحد؟

أقوم حاليًا بإخراج ملف FDF إلى المتصفح على أمل أن يعيد توجيه المستخدم إلى PDF المملوءة ولكن بالنسبة لبعض الأشخاص ليس كذلك. يتم إخراج محتويات FDF إلى الشاشة ، على الرغم من أنني أستخدم Header ('نوع المحتوى: application/vnd.fdf') ؛

هل كانت مفيدة؟

المحلول

للرجوع إليها في المستقبل ، يبدو أنه لا توجد طريقة موثوقة للقيام بذلك بدون تطبيق طرف ثالث. PDFTK (http://www.accesspdf.com/pdftk/) انتهى به الأمر إلى حل.

قمت أولاً بإنشاء ملف FDF كما كان من قبل ، ثم دمجته في ملف PDF الخاص بي باستخدام رمز PHP التالي

header('Content-type: application/pdf');
header('Content-Disposition: attachment; filename="Download.pdf"');
passthru("pdftk file.pdf fill_form data.fdf output - ");
exit;

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

إذا كنت تريد أن يكون ملف إخراج PDF لم يعد قابلًا للتحرير ، فاستخدم

    passthru("pdftk file.pdf fill_form data.fdf output - flatten");

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

NB إذا لم يتم تعيين متغير المسار الخاص بك ، فستحتاج إلى استخدام المسار الكامل إلى PDFTK أي

    passthru("/usr/local/bin/pdftk file.pdf fill_form data.fdf output - flatten");

نصائح أخرى

هناك طريقة أخرى لليوم لعدم استخدام Passthru أو PDFTK ولكن مجرد نص تم في عام 2004 ولكن لا يزال يعمل بشكل جيد: forge_fdf

إنه يساعدك على إنشاء FDF يمكنك التخلص منه في PDF ، فهذا يعني أنك

احفظ هذا في ملف PHP ، دعنا نقول generatepdf.php

require_once('forge_fdf.php');  

// leave this blank if we're associating the FDF w/ the PDF via URL
$pdf_form_url= "";


// default data; these two arrays must ultimately list all of the fields
// you desire to alter, even if you just want to set the 'hidden' flag;
//
//
$fdf_data_names= array(); // none of these in this example
$fdf_data_strings= array(); // none of these in this example

$fdf_data_strings['email']=mb_strtolower($row_delivreur['firstname']).'.'.mb_strtolower($row_delivreur['lastname']).'@gmail.com';

$fields_hidden= array();
$fields_readonly= array();

// set this to retry the previous state
$retry_b= false;

header( 'content-type: application/vnd.fdf' );

echo forge_fdf( $pdf_form_url,
        $fdf_data_strings, 
        $fdf_data_names,
        $fields_hidden,
        $fields_readonly );

إن إنشاء رابط إلى pathtoyourpdf/nameofpdffile.pdf#fdf = generatepdf.php سوف يفتح ملف pdf الخاص بك في المتصفح (بدلاً من ذلك ، هناك طريقة لحفظه على القرص الذي أعتقد أنني أتذكره) وسيتم ملء البريد الإلكتروني الميداني بالبيانات من mysql: mb_strtolower($row_delivreur['firstname']).'.'.mb_strtolower($row_delivreur['lastname']).'@gmail.com'

إنه يعمل مع مربعات الاختيار ، زر الراديو ، ... يفتح بشكل جيد في Firefox ، يجب اختباره مع متصفحات أخرى.

المزيد من Infos على اختراقات PDF

إلى حد بعيد أسهل طريقة وجدت لتثبيت PDFTK على CentOS:

تثبيت RPMforge Repo - http://wiki.centos.org/additionalResources/repositories

من ثم

yum تثبيت pdftk

وهذا كل شيء!

http://www.setasign.de/products/pdf-php-solutions/fpdi/demos/concatenate-fake/

هذا يعمل ، يتم تنزيل الفصول المرتبطة من موقع الويب أيضًا ،

لا يتطلب أي أمر pashthru/exec ولا يوجد امتدادات إضافية.

تم تحريره للقول ، هذا لا يعمل مع إصدارات PDF الأحدث 1.5+ ، عاد إلى PDFTK ، باهظة ولكن يعمل مع جميع PDFs باستخدام أمر "exec".

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top