كيف أثبّت pdfx؟
ثبّت الحزمة على مستوى النظام للحصول على الأمر pdfx. أو شغّله مرة واحدة دون تثبيت.
npm install -g @pdf123/cli
pdfx --versionnpx @pdf123/cli merge a.pdf b.pdf -o merged.pdf
bunx @pdf123/cli merge a.pdf b.pdf -o merged.pdfيعمل أيضًا bun add -g @pdf123/cli وpnpm add -g @pdf123/cli. ولا يلزم تثبيت أي شيء آخر.
كيف أبدأ؟
تعرض هذه الأوامر الستة الأنماط الشائعة.
pdfx list # every tool; --category security for one category
pdfx describe watermark # a tool's fields and defaults
pdfx merge a.pdf b.pdf -o merged.pdf
pdfx compress *.pdf -o compressed/ # several files: one result per file
pdfx watermark in.pdf --watermarkText DRAFT
pdfx pipeline a.pdf b.pdf --step merge --step compress -o out.pdfكيف أشغّل أي أداة؟
الوسيط الأول هو معرّف الأداة، ثم ملفات الإدخال ثم خيارات الأداة. كل خيار في الأداة هو راية (flag)، تُكتب باسم حقل API (--pageNumbers) أو بنمط kebab (--page-numbers). ويمكن أن يأتي الرقم السالب بعد رايته بمسافة، كما في --rotation -90، أو بعد علامة يساوي.
pdfx <tool> [files...] [--<field> <value>]...استخدم pdfx list لعرض الأدوات. وهو يقبل --category أو --group، و--query مع كلمات للبحث. واستخدم pdfx describe <tool> لترى نقطة النهاية والمدخلات المقبولة وهل تعمل الأداة كدفعة، وكل حقل مع قيمته الافتراضية وقيمه المسموح بها. إذا كان معرّف الأداة مجهولًا ظهرت اقتراحات، وإذا كُتب خطأً أنهى الأمر عمله بالرمز 2.
أي الأوامر يقابل أي صفحة أداة؟
| الأمر | صفحة الأداة | وظيفته |
|---|---|---|
pdfx merge a.pdf b.pdf -o merged.pdf | دمج | دمج عدة ملفات PDF في ملف واحد |
pdfx split report.pdf --pageNumbers 3,7 -o parts.zip | تقسيم | تقسيم ملف PDF إلى ملفات منفصلة |
pdfx compress in.pdf -o out/ | ضغط | إعادة ضغط تدفقات PDF لتقليل الحجم |
pdfx watermark in.pdf --watermarkText DRAFT | علامة مائية | إضافة علامة مائية نصية أو صورة |
pdfx protect in.pdf --password secret -o locked.pdf | حماية | تشفير ملف PDF بكلمة مرور |
pdfx unlock locked.pdf --password secret | فتح القفل | إزالة الحماية بكلمة المرور |
pdfx get-info in.pdf | معلومات المستند | طباعة البيانات الوصفية والأذونات والبنية بصيغة JSON |
pdfx ocr scan.pdf -o out/ | OCR | قراءة ملف PDF ممسوح ضوئيًا وحفظ Markdown |
pdfx pdf-to-markdown in.pdf -o out/ | PDF إلى Markdown | تحويل ملف PDF إلى Markdown |
pdfx rotate in.pdf --angle 90 | تدوير | تغيير اتجاه الصفحات بمقدار 90 أو 180 أو 270 درجة |
pdfx repair broken.pdf | إصلاح | إعادة بناء بنية ملف PDF تالف |
كيف أعالج ملفات كثيرة دفعة واحدة؟
أعطِ عدة ملفات لأداة ذات ملف واحد فيشغّل pdfx دفعة. استخدم -o مع مجلد ينتهي بشرطة مائلة. تعمل الأداة مرة لكل ملف، وملفان في وقت واحد افتراضيًا. غيّر ذلك بالخيار --concurrency.
pdfx compress *.pdf -o compressed/
pdfx protect *.pdf --password secret --concurrency 4 -o locked/يطبع pdfx سطرًا واحدًا، input -> saved، عند انتهاء كل ملف. ويُبلَّغ عن الملف الفاشل في مجرى الأخطاء القياسي وتنتهي بقية الملفات. اضغط Ctrl-C مرة واحدة لإيقاف الطلب الجاري؛ وتبقى الملفات المحفوظة سلفًا. ويؤدي Ctrl-C الثاني إلى الخروج فورًا بالرمز 130. ومع --idempotency-key k يرسل كل ملف k:<index>، ويعيد تكرار الطلب نفسه النتيجة الأولى خلال 24 ساعة.
والدفعة التي تستخدم أداة تُرجع تقريرًا، مثل get-info، لا تكتب أي ملفات من دون -o. بل تطبع التقارير مفهرسة بملف الإدخال.
كيف أسلسل الأدوات في طلب واحد؟
يشغّل pdfx pipeline عدة أدوات في طلب واحد. كرّر --step لكل أداة. ولضبط الخيارات مرّر مصفوفة JSON عبر --steps.
pdfx pipeline a.pdf b.pdf --step merge --step compress -o out.pdf
pdfx pipeline in.pdf --steps '[{"tool":"watermark","params":{"watermarkText":"DRAFT"}},{"tool":"compress"}]' -o out.pdfلا يمكن للخطوات استخدام أدوات تحتاج إلى ملف ثانٍ.
كيف أفتح ملفات PDF المحمية بكلمة مرور؟
يفتح --input-password كل مدخل مشفّر أولًا. ويحدّد --password-for <file>=<password> كلمة مرور ملف واحد. ويمكن تكراره، ويشمل * كاسم ملف بقية الملفات. وهذا يناسب دفعة تخلط ملفات مقفلة وأخرى مفتوحة. في merge وimages-to-pdf يُفتح قفل كل ملف مسمّى على حدة قبل تشغيل الأداة.
pdfx compress locked.pdf --input-password secret -o out.pdf
pdfx compress report.pdf --password-for report.pdf=secret -o out.pdf
pdfx merge a.pdf b.pdf --password-for a.pdf=secret -o merged.pdfتعمل الخيارات نفسها في التسلسل. ولإزالة الحماية بصورة دائمة استخدم أداة فتح القفل مع خيارها --password.
كيف يعمل الإدخال والإخراج؟
- المدخل
-يقرأ من الإدخال القياسي، مرة واحدة في كل تشغيل. و-o -يكتب النتيجة في الإخراج القياسي. -o file.pdfيكتب ذلك الملف. و-o dir/يكتب داخل مجلد. المجلد غير الموجود بعد يحتاج إلى الشرطة المائلة الأخيرة، لأن الاسم بدونها يُكتب ملفًا.- من دون
-oتُحفظ النتائج في المجلد الحالي باسم الملف الذي يحدّده الخادم. - داخل المجلد لا يستبدل
pdfxملفًا موجودًا أبدًا؛ بل يختار اسمًا جديدًا. أما-o file.pdfالصريح فيستبدل ذلك الملف. - اسم ملف
-oيتعارض امتداده مع النتيجة، مثل ملف ZIP ناتج منsplitيُحفظ بامتداد.pdf، يُرفض بالرمز 2 معcode: output_mismatch، ولا يُكتب شيء. - المخرَج الذي يتعذّر كتابته خطأ استخدام يُكتشف قبل رفع أي شيء.
cat in.pdf | pdfx compress - -o - > out.pdfماذا يطبع الخيار --json؟
عند حفظ نتيجة، يطبع --json المسار ونوع المحتوى والحجم. وتطبع الأداة التي تُرجع تقريرًا التقرير نفسه. وتطبع الدفعة تقريرًا واحدًا بحالة لكل ملف.
{ "path": "one.pdf", "contentType": "application/pdf", "bytes": 1040 }{
"processed": 2,
"unmatched": 0,
"failed": 0,
"files": [
{ "input": "/abs/a.pdf", "ok": true, "path": "comp/a.pdf", "contentType": "application/pdf", "bytes": 1040 }
]
}الملف الفاشل فيه error وreason بدلًا من path وbytes. وأداة المرشِّح التي لا تجد تطابقًا تطبع { "matched": false }. ويطبع pdfx list --json صفوفًا فيها id وcategory وgroup وname وdescription وreturns وfiles وfilter.
ما الخيارات التي تنطبق على كل أداة؟
| الخيار | الأثر |
|---|---|
-o, --output <path> | الملف المراد كتابته، أو المجلد المراد الكتابة داخله. الافتراضي هو المجلد الحالي. و- يعني الإخراج القياسي |
--api-base <url> | أصل API. متغيّر البيئة PDFX_API_BASE، والقيمة الافتراضية https://pdf123.xyz |
--api-key <key> | يُرسل في X-API-KEY. متغيّر البيئة PDFX_API_KEY. اختياري |
--input-password <pw> | يفتح أولًا كل مدخل محمي بكلمة مرور |
--password-for <file>=<pw> | كلمة مرور ملف واحد. قابل للتكرار |
--concurrency <n> | عدد ملفات الدفعة المعالَجة في وقت واحد. الافتراضي 2 |
--timeout <ms> | مهلة كل طلب. الافتراضي 300000 |
--idempotency-key <k> | يعيد النتيجة الأولى خلال 24 ساعة |
--json | مخرجات مقروءة آليًا |
ما رموز الخروج؟
| الرمز | المعنى |
|---|---|
0 | نجاح. وأداة المرشِّح التي لا تجد تطابقًا تنتهي أيضًا بالرمز 0 وتطبع no match |
1 | فشل طلب. وفي الدفعة فشل ملف واحد على الأقل؛ وتنتهي بقية الملفات |
2 | خطأ في الاستخدام. لم يُرفع شيء |
130 | أُوقف بـ Ctrl-C. يُلغى الطلب الجاري |
تطبع حالات الفشل أسطر reason: وcode: وhint: حين يوفّرها الخادم، ليتمكن النص البرمجي من التفرّع دون مطابقة النصوص. والأداة التي لا تجد ما تُرجعه، مثل pdf-to-csv على ملف PDF بلا جداول، تنتهي بالرمز 1 مع code: no_content بدلًا من كتابة ملف فارغ. الرموز مسرودة في رموز الأخطاء.
كيف أوجّه pdfx إلى خادمي الخاص؟
عيّن PDFX_API_BASE، أو مرّر --api-base، على عنوان pdfx-server المستضاف ذاتيًا. وأضف PDFX_API_KEY إذا كان خادمك يتطلب مفتاحًا. راجع الاستضافة الذاتية.
export PDFX_API_BASE=http://localhost:8080
export PDFX_API_KEY=<your-key>
pdfx compress in.pdfكيف أشغّل نقطة نهاية لا يعرفها CLI؟
يرسل pdfx call طلبًا خامًا إلى معرّف عملية أو مسار /api/.... استخدم --field name=value لحقول النموذج و--file field=path للملفات الإضافية. وهو يرسل طلبًا واحدًا بالضبط ولا يتحقق من شيء محليًا، لذلك تُرفض كلمات المرور والدفعات.
pdfx call general/merge-pdfs a.pdf b.pdf -o merged.pdf
pdfx call /api/v1/misc/flatten in.pdf --field flattenOnlyForms=true -o flat.pdfصفحات ذات صلة
- نظرة عامة للمطوّرين مع REST API والمصادقة
- TypeScript SDK، المكتبة التي بُني عليها سطر الأوامر
- خوادم MCP لوكلاء الذكاء الاصطناعي
- مقال "pdfx CLI: One Catalog, Called From Your Terminal" في مدونة PDF123
الأسئلة الشائعة
هل يعمل pdfx دون اتصال بالإنترنت؟
لا. يرفع pdfx كل ملف إلى PDF123 API أو إلى خادمك الخاص ويحفظ النتيجة محليًا، لذا يجب أن يكون عنوان API الأساسي قابلًا للوصول.
هل يحتاج pdfx إلى مفتاح API؟
لا. يعمل الاستخدام المجهول. عيّن PDFX_API_KEY أو مرّر --api-key إذا كان خادمك يتطلب مفتاحًا. يُرسل المفتاح في الترويسة X-API-KEY.
أي إصدار من Node يحتاج إليه pdfx؟
Node 20.3 أو أحدث، أو Bun.
هل سيستبدل pdfx ملفاتي؟
ليس حين يكتب داخل مجلد: فلا يُستبدل ملف موجود أبدًا. أما إذا سمّيت ملف الإخراج بنفسك بـ -o file.pdf فسيُستبدل ذلك الملف، لذا اختر اسمًا جديدًا إن أردت الاحتفاظ بالأصل.
ماذا يحدث حين لا تجد أداة المرشِّح تطابقًا؟
أدوات المرشِّح، التي تبدأ معرّفاتها بـ filter-، تمرّر الملف كما هو حين يتحقق شرطها. وحين لا يتحقق، يطبع pdfx الرسالة no match وينتهي بالرمز 0. وفي الدفعة يُحتسب مثل هذا الملف غير مطابق، لا فاشلًا.