سؤال

هل يعرف أحد طريقة جيدة لتحرير ملفات PDF في PHP؟ويفضل أن تكون الأساليب مفتوحة المصدر/بدون ترخيص.:)

أفكر على غرار فتح ملف PDF واستبدال النص في ملف PDF ثم كتابة النسخة المعدلة من ملف PDF؟

لقد قمت بإنشاء ملفات PDF برمجيًا في الماضي باستخدام FPDF، ولكن وجدت أنها غير عملية بعض الشيء في بعض الأحيان.

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

المحلول

إذا كنت تتبع أسلوب "ملء الفراغات"، فيمكنك وضع النص بدقة في أي مكان تريده على الصفحة.لذلك، من السهل نسبيًا (إن لم يكن مملاً بعض الشيء) إضافة النص المفقود إلى المستند.على سبيل المثال مع Zend Framework:

<?php
require_once 'Zend/Pdf.php';

$pdf = Zend_Pdf::load('blank.pdf');
$page = $pdf->pages[0];
$font = Zend_Pdf_Font::fontWithName(Zend_Pdf_Font::FONT_HELVETICA);
$page->setFont($font, 12);
$page->drawText('Hello world!', 72, 720);
$pdf->save('zend.pdf');

إذا كنت تحاول استبدال المحتوى المضمّن، مثل "[سلسلة العنصر النائب]"، يصبح الأمر أكثر تعقيدًا.على الرغم من أنه من الممكن تقنيًا القيام بذلك، إلا أنه من المحتمل أن تفسد تخطيط الصفحة.

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

نصائح أخرى

هناك فئة PDF مجانية وسهلة الاستخدام لإنشاء مستندات PDF.تسمى FPDF.بالاشتراك مع FPDI (http://www.setasign.de/products/pdf-php-solutions/fpdi) حتى أنه من الممكن تحرير مستندات PDF.يوضح الكود التالي كيفية استخدام FPDF وFPDI لملء قسيمة هدية موجودة ببيانات المستخدم.

require_once('fpdf.php'); 
require_once('fpdi.php'); 
$pdf = new FPDI();

$pdf->AddPage(); 

$pdf->setSourceFile('gift_coupon.pdf'); 
// import page 1 
$tplIdx = $this->pdf->importPage(1); 
//use the imported page and place it at point 0,0; calculate width and height
//automaticallay and ajust the page size to the size of the imported page 
$this->pdf->useTemplate($tplIdx, 0, 0, 0, 0, true); 

// now write some text above the imported page 
$this->pdf->SetFont('Arial', '', '13'); 
$this->pdf->SetTextColor(0,0,0);
//set position in pdf document
$this->pdf->SetXY(20, 20);
//first parameter defines the line height
$this->pdf->Write(0, 'gift code');
//force the browser to download the output
$this->pdf->Output('gift_coupon_generated.pdf', 'D');

إذا كنت بحاجة إلى ملفات PDF بسيطة حقًا، فيمكنك استخدام Zend أو FPDF على ما يرام.ومع ذلك أجدهم صعبين ومحبطين للعمل معهم.وأيضًا، نظرًا للطريقة التي تعمل بها واجهة برمجة التطبيقات (API)، لا توجد طريقة جيدة لفصل المحتوى عن العرض التقديمي عن منطق الأعمال.

ولهذا السبب أستخدم com.dompdf, ، الذي يقوم تلقائيًا بتحويل مستندات HTML وCSS إلى PDF.يمكنك تصميم قالب تمامًا كما تفعل مع صفحة HTML واستخدام بناء جملة HTML القياسي.يمكنك أيضًا تضمين ملف CSS خارجي.المكتبة ليست مثالية، وفي بعض الأحيان تتشوه علامات الترميز أو CSS المعقدة جدًا، لكنني لم أجد أي شيء آخر يعمل أيضًا.

يمكن لـ Zend Framework تحميل وتحرير ملفات PDF الموجودة.أعتقد أنه يدعم المراجعات أيضًا.

أستخدمه لإنشاء مستندات في المشروع، وهو يعمل بشكل رائع.لم يتم تحرير واحدة بالرغم من ذلك.

تحقق من الوثيقة هنا

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

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

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

ولكن مرة أخرى، يستخدم هذا FPDF، لذا إذا كنت لا تريد استخدامه، فلن يعمل.

وثائق ملحق PDF/pdflib في PHP قليلة (وهو أمر تمت ملاحظته في bugs.php.net) - أوصي باستخدام مكتبة Zend.

يعد Tcpdf أيضًا مكتبة جيدة لإنشاء ملفات pdf في php http://www.tcpdf.org/

لقد كانت لدي بالفعل آمال كبيرة في dompdf (إنها فكرة رائعة) ولكن مشكلة تحديد المواقع هي عامل رئيسي في استخدامي لـ fpdf.على الرغم من أنها مملة حيث يجب ضبط كل عنصر؛إنها قوية حيث يخرج الجميع.

أضع صورة أسفل مساحة العمل الخاصة بي في المستند لوضع تخطيطي في الأعلى ليناسب.لقد كان دائمًا كافيًا حتى بالنسبة للأعمدة (يتطلب قدرًا صغيرًا من حساب سلسلة php، ولكن لا شيء معقد جدًا).

حظ سعيد.

نحن نستخدم pdflib لإنشاء ملفات PDF من تطبيقات Rails الخاصة بنا.يحتوي على روابط لـ PHP، والعديد من اللغات الأخرى.

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

لسوء الحظ، هذا يسمح فقط بإنشاء ملفات PDF.

إذا كنت تريد فتح الملفات الموجودة و"تحريرها"، فإن pdflib يوفر لك ذلك المنتج الذي يفعل هذا, ، ولكن يكلف أ كثير

<?php

//getting new instance
$pdfFile = new_pdf();

PDF_open_file($pdfFile, " ");

//document info
pdf_set_info($pdfFile, "Auther", "Ahmed Elbshry");
pdf_set_info($pdfFile, "Creator", "Ahmed Elbshry");
pdf_set_info($pdfFile, "Title", "PDFlib");
pdf_set_info($pdfFile, "Subject", "Using PDFlib");

//starting our page and define the width and highet of the document
pdf_begin_page($pdfFile, 595, 842);

//check if Arial font is found, or exit
if($font = PDF_findfont($pdfFile, "Arial", "winansi", 1)) {
    PDF_setfont($pdfFile, $font, 12);
} else {
    echo ("Font Not Found!");
    PDF_end_page($pdfFile);
    PDF_close($pdfFile);
    PDF_delete($pdfFile);
    exit();
}

//start writing from the point 50,780
PDF_show_xy($pdfFile, "This Text In Arial Font", 50, 780);
PDF_end_page($pdfFile);
PDF_close($pdfFile);

//store the pdf document in $pdf
$pdf = PDF_get_buffer($pdfFile);
//get  the len to tell the browser about it
$pdflen = strlen($pdfFile);

//telling the browser about the pdf document
header("Content-type: application/pdf");
header("Content-length: $pdflen");
header("Content-Disposition: inline; filename=phpMade.pdf");
//output the document
print($pdf);
//delete the object
PDF_delete($pdfFile);
?>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top