هل من الممكن دمج سلسلة من ملفات PDF في ملف واحد باستخدام روبي؟

StackOverflow https://stackoverflow.com/questions/85459

  •  01-07-2019
  •  | 
  •  

سؤال

لدي سلسلة من ملفات PDF مسماة بالتسلسل كما يلي:

  • 01_foo.pdf
  • 02_bar.pdf
  • 03_باز.pdf
  • إلخ.

باستخدام روبي، هل من الممكن دمجها في ملف PDF واحد كبير مع الاحتفاظ بها بالتسلسل؟لا أمانع في تثبيت أي جواهر ضرورية للقيام بهذه المهمة.

إذا لم يكن هذا ممكنًا في روبي، فماذا عن لغة أخرى؟لا توجد مكونات تجارية، إن أمكن.


تحديث: اقتراح جيسون نافاريتي يؤدي إلى الحل الأمثل:

ضع ملفات PDF التي تريد دمجها في الدليل مع pdftk (أو تأكد من وجود pdftk في المسار الخاص بك)، ثم قم بتشغيل البرنامج النصي التالي:

pdfs = Dir["[0-9][0-9]_*"].sort.join(" ")
`pdftk #{pdfs} output combined.pdf`

أو يمكنني حتى أن أفعل ذلك كخط واحد من سطر الأوامر:

ruby -e '`pdftk #{Dir["[0-9][0-9]_*"].sort.join(" ")} output combined.pdf`'

اقتراح عظيم جيسون، الحل الأمثل، شكرا. أعطه صوتًا مؤيدًا للناس.

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

المحلول

أ روبي توك يقترح المنشور استخدام pdftk مجموعة أدوات لدمج ملفات PDF.

يجب أن يكون الاتصال واضحًا نسبيًا pdftk كعملية خارجية وجعلها تتعامل مع الدمج. pdf::كاتب قد يكون ذلك مبالغة لأن كل ما تريد تحقيقه هو إلحاق بسيط.

نصائح أخرى

يمكنك القيام بذلك عن طريق التحويل إلى PostScript والعودة.يمكن أن تكون ملفات PostScript متسلسلة بشكل تافه.على سبيل المثال، إليك نص Bash النصي الذي يستخدم أدوات Ghostscript ps2pdf وpdf2ps:

#!/bin/bash
for file in 01_foo.pdf 02_bar.pdf 03_baz.pdf; do
    pdf2ps $file - >> temp.ps
done

ps2pdf temp.ps output.pdf
rm temp.ps

لست على دراية بـ Ruby، ولكن من المؤكد أن هناك بعض الوظائف (يمكن تسميتها system() (مجرد تخمين)) من شأنه استدعاء سطر أوامر معين.

إذا كان لديك Ghostscript على النظام الأساسي الخاص بك، فقم بتنفيذ هذا الأمر:

gs -dBATCH -dNOPAUSE -q -sDEVICE=pdfwrite -sOutputFile=finished.pdf <ملفات pdf المصدر>

لقد جربت حل pdftk وواجهت مشكلات في كل من SnowLeopard وTiger.لقد أدى التثبيت على Tiger في الواقع إلى إحداث فوضى في نظامي وتركني غير قادر على تشغيل البرنامج النصي/الخادم، ولحسن الحظ، فقد تقاعد الجهاز من تطوير الويب.

وجدت بعد ذلك خيارًا آخر:- انضم إلى PDF.كان التثبيت غير مؤلم وسريع على الإطلاق ويعمل بشكل مثالي.

جربت أيضًا GhostScript وفشلت فشلًا ذريعًا (لم أتمكن من قراءة الخطوط وانتهى بي الأمر باستخدام ملفات PDF تحتوي على صور فقط).

ولكن إذا كنت تبحث عن حل لهذه المشكلة، فقد ترغب في تجربة joinPDF.

لا أعتقد أن روبي لديه الأدوات اللازمة لذلك.يمكنك التحقق من ImageMagick وCairo.يمكن استخدام ImageMagick لربط عدة صور/مستندات معًا، لكنني لست متأكدًا من حالة PDF.

ثم مرة أخرى، هناك بالتأكيد أدوات Windows (تجارية) للقيام بهذا النوع من الأشياء.

أنا أستخدم القاهرة بنفسي توليد ملفات PDF.إذا كانت ملفات PDF تأتي منك، فربما يكون ذلك حلاً (فهو يدعم صفحات متعددة).حظ سعيد!

أقترح النظر في الكود الخاص بـ PDFCreator (VB، إذا لم أكن مخطئًا، ولكن هذا لا يهم لأنك ستنفذ كودًا مشابهًا بلغة أخرى)، والذي يستخدم GhostScript (ترخيص GNU).أو قم بالبحث مباشرة في GhostScript نفسه؛هناك أيضًا طبقة واجهة متاحة تسمى GhostPDF، والتي قد تفعل ما تريد.

إذا كان بإمكانك التحكم في GhostScript باستخدام VB، فيمكنك القيام بذلك باستخدام لغة C، مما يعني أنه يمكنك القيام بذلك باستخدام Ruby.

لدى روبي أيضًا IO.popen، والذي يسمح لك باستدعاء البرامج الخارجية التي يمكنها القيام بذلك.

من المحتمل أن يكون أي كود روبي للقيام بذلك في تطبيق حقيقي بطيئًا بشكل مؤلم.سأحاول البحث عن أدوات يونكس للقيام بهذه المهمة.يعد هذا أحد مميزات استخدام نظام التشغيل Mac OS X، فهو يحتوي على إمكانات PDF مدمجة سريعة جدًا.ربما يكون أفضل شيء تالي هو أداة يونكس.

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

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