استخراج ملفات من نوع PDF في موقعك

هذا المقال هو بعنوان 

استخرج ملفات PDF بكل سهولة من خلال هذا ال API الخاص بي

واللي من خلاله هنعرف ازاي ممكن نستخرج ملف pdf من تقرير او صفحة معينة بكل تنسيقاتها ومحتوياتها

................................

من خلال web service بسيطة هتقدر تعمل ده 

طيب لو انت عاوز تعملها بنفسك, هتعملها ازاي؟

انا عملتها من خلال الباكيج دي Spatie/Browsershot

ودي للأسف مش هتشتغل كده زي اي package عادية لانها بتعمل ربط مع الـ Node.js

يعني في موقعك لازم يكون عندك node علي الاستضافة وعشان تقدر تعمل ده لازم يكون عندك Terminal علي الاستضافة

وده سهل لو عندك VPS او تقدر تدخل SSH علي اكونت الاستضافة بتاعتك

------------

ازاي بقي انا سطبتها 

اولا سطبت الباكيج والموقع الرسمي بتاعها فيه كل حاجة

https://spatie.be/docs/browsershot/v2/introduction 

composer require spatie/browsershot 

ثانيا بقي وده مهم اوي , لو بصيت علي الـRequirements هتلاقي انك لازم تسطب برضه حزمة puppeteer

ودي باكيج تبع كروم عشان تقدر تاخد المحتوي بتاعك وتحوله 

اشبه بالطريقة اللي بتعملها لما بتعمل طباعة === حفظ كـ pdf دي بقي بتعملها لوحدها

npm install puppeteer

وبكده يبقي فاضل عندك نقطة اخيرة عشان يبقي كل المطلوب معانا

وهي اننا نعرف المسار الخاص بـ Node.js والخاص بـ NPM

بس كده؟ ... هو المفروض بس مش ده اللي حصل معايا لان لقيت فيه حجات محتاج اسطبها كمان 

ودي list بالاوامر اللي عملتها من البداية للنهاية

الاستضافة بتاعتي centos7

--------------------------------------------------------------------

# 1. Install a package with repository for your system:
# On CentOS, install package centos-release-scl available in CentOS repository:

$ sudo yum --disablerepo=imunify360-ea-php-hardened install centos-release-scl-rh

# On RHEL, enable RHSCL repository for you system:

$ sudo yum-config-manager --enable rhel-server-rhscl-7-rpms

# 2. Install the collection:

$ sudo yum --disablerepo=imunify360-ea-php-hardened install rh-nodejs12

# 3. Start using software collections: 
nodeاو npm قبل ما اعمل امر $ scl enable rh-nodejs12 bash
# in cpanel - centos بس تقريبا ده مظبطش وعملت اللي بعده ده والدنيا ظبطت $ sudo yum --disablerepo=imunify360-ea-php-hardened install atk.x86_64
# required libraries for poputeer
$ sudo yum --disablerepo=imunify360-ea-php-hardened install atk java-atk-wrapper at-spi2-atk gtk3 libXt

-------------------------------------------------------------------

كده خلاص - خلصنا كل حاجة وجاهزين نشتغل

Browsershot::url("https://your_website.com/file_url")->save("your_file.pdf"); 

-------------------------------
لو مفيش عندك vps او مفيش ssh عندك متقلقش

استخدم الـ web service واشتغل 

ده  الرابط  https://mahmoud-arafat.com/includes/generate-pdf

ده الـ header

{ "user-token" : "your_acess_token_here" }

وده الـ Body

-------------------------------------------------------------------

{
    "required_url" : "https://mahmoud-arafat.com/snippts/snippt/1",  // required
    "result_type" : "pdf-base64", // required [ "pdf-base64" || "pdf-file"  ]
    "doc_dimensions" : {   //  set custom width and height for the page [ applied if doc_format not found ]
        "width":120,
        "height": 200
        },
    "doc_format" : "A4", // or set standard format [ applied if found in body ]
    "doc_margins" : { // set custom margins in the page
        "top" : 10,
        "right" : 10,
        "bottom" : 10,
        "left" : 10
        },
    "doc_header" : "", // add your header html
    "doc_footer" : "", // add your footer html
    "show_background" : true, // apply bg css or not
    "landscape": false, // use landscape or portrait
    "scale" : 1, // custom scale size
    "custom_pages" : [] // custom layout pages only
}
 
-----------------------------------------------------------------
أمورك كلها تمام؟ هتلاقي ال Response ده بقي قدامك
 
{
  "status": true,
  "remaining_tries": 4,   //  the remamining tries in your package  
  "pdf_url":"some string here" // pdf file code or url  
}
 
 
------------------------------------------------------------------
 
الـ pdf_url ممكن يكون بصورتين 
الاولي هي ملف pdf هتاخد الرابط بتاعه وتعمل له view او download عادي 
والصورة التانية هي كود متشفر خاص بالملف ده بكل الـ options اللي انت اختارتها
وتقدر بقي تحفظ الكود عندك وتعرضه علي طول من خلال الكود البرمجي ده وتشوف الملف 
 
public function getPDF(){
    $id = request('id');
    $pdfBody = PDFFileModal::find($id)->base64_pdf;
    $decoded = base64_decode($pdfBody);
    return response($decoded)
        ->header('Content-Type', 'application/pdf');
}


-------------------------------------------------