Можно ли объединить серию PDF-файлов в один, используя Ruby?

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

  •  01-07-2019
  •  | 
  •  

Вопрос

У меня есть серия PDF-файлов, названных последовательно следующим образом:

  • 01_foo.pdf
  • 02_bar.pdf
  • 03_baz.pdf
  • и т.д.

Используя Ruby, можно ли объединить их в один большой PDF-файл, сохраняя при этом их последовательность?Я не возражаю против установки любых необходимых драгоценных камней для выполнения этой работы.

Если это невозможно в Ruby, как насчет другого языка?По возможности, никаких коммерческих компонентов.


Обновить: Предложение Джейсона Наваррете привести к идеальному решению:

Поместите 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`'

Отличное предложение, Джейсон, идеальное решение, спасибо. Проголосуйте за него, люди.

Это было полезно?

Решение

A Рубиновый ток post предлагает использовать 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=готово.pdf <your source="" pdf="" files="">

Я попробовал решение pdftk, и у меня возникли проблемы как со SnowLeopard, так и с Tiger.Установка на Tiger фактически привела к хаосу в моей системе и лишила меня возможности запускать скрипт / сервер, к счастью, это машина, снятая с веб-разработки.

Впоследствии был найден другой вариант:- Присоединяйтесь к PDF.Установка была абсолютно безболезненной и быстрой, и она работает безукоризненно.

Также попробовал GhostScript, и он с треском провалился (не удалось прочитать шрифты, и в итоге я получил PDF-файлы, в которых были только изображения).

Но если вы ищете решение этой проблемы, возможно, вам захочется попробовать joinPDF.

Я не думаю, что у Ruby есть инструменты для этого.Вы могли бы проверить ImageMagick и Cairo.ImageMagick можно использовать для связывания нескольких изображений / документов вместе, но я не уверен в случае с PDF.

С другой стороны, наверняка существуют инструменты Windows (коммерческие) для выполнения подобных действий.

Я сам использую Cairo для генерирующий PDF-файлы.Если PDF-файлы исходят от вас, возможно, это было бы решением (он поддерживает несколько страниц).Удачи вам!

Я бы предложил взглянуть на код для PDFCreator (VB, если я не ошибаюсь, но это не должно иметь значения, поскольку вы просто реализуете аналогичный код на другом языке), который использует GhostScript (лицензия GNU).Или просто покопайтесь прямо в самом GhostScript;также доступен фасадный слой под названием GhostPDF, который может делать то, что вы хотите.

Если вы можете управлять GhostScript с помощью VB, вы можете делать это с помощью C, что означает, что вы можете делать это с помощью Ruby.

В Ruby также есть IO.popen, который позволяет вам вызывать внешние программы, которые могут это делать.

Любой Ruby-код, позволяющий сделать это в реальном приложении, вероятно, будет мучительно медленным.Я бы попытался найти инструменты unix для выполнения этой работы.Это одна из прелестей использования Mac OS X, в нее встроены очень быстрые возможности PDF.Следующая лучшая вещь - это, вероятно, инструмент unix.

На самом деле, я добился некоторого успеха с rtex.Если вы посмотрите здесь вы найдете кое-какую информацию об этом.Это намного быстрее, чем любая библиотека Ruby, которую я использовал, и я почти уверен, что в latex есть функция для переноса PDF-данных из других источников.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top