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

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

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

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

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


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

Поместите файлы PDF, которые необходимо объединить, в каталог вместе с pdftk (или убедитесь, что pdftk находится в вашей переменной PATH), затем запустите следующий скрипт:

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`'

Отличное предложение, Джейсон, отличное решение, спасибо. Дайте ему право голоса людям .

Ответы [ 7 ]

14 голосов
/ 17 сентября 2008
В публикации

A Ruby-Talk предлагается использовать набор инструментов pdftk для объединения PDF-файлов.

Было бы относительно просто назвать pdftk как внешний процесс и заставить его обрабатывать слияние. PDF :: Writer может быть излишним, потому что все, что вы хотите сделать, это простое приложение.

2 голосов
/ 17 сентября 2009

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

Впоследствии нашел другую опцию: - joinPDF. Была абсолютно безболезненная и быстрая установка и работает отлично.

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

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

2 голосов
/ 14 марта 2009

Если на вашей платформе есть ghostscript, выполните оболочку и выполните эту команду:

gs -dBATCH -dNOPAUSE -q -sDEVICE = pdfwrite -sOutputFile = законченный.pdf <исходные pdf-файлы>

2 голосов
/ 17 сентября 2008

Вы можете сделать это путем преобразования в 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() (просто предположение)), которая будет вызывать данную командную строку.

0 голосов
/ 18 сентября 2008

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

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

0 голосов
/ 17 сентября 2008

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

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

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

0 голосов
/ 17 сентября 2008

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...