Использование Ghostscript для конвертации JPEG в PDF - PullRequest
19 голосов
/ 26 ноября 2010

Какие параметры я должен передать?Используемая версия Ghostscript - 8.71.

Ответы [ 6 ]

23 голосов
/ 02 мая 2013

https://gitlab.mister -muffin.de / josch / img2pdf

Как уже упоминалось в PleaseStand, GhostScript будет декодировать данные JPEG, что приведет к потере генерации , а также производительности в десять-сто раз хуже, чем img2pdf.

ImageMagick (т.е. convert) также декодирует и перекодирует изображения.

15 голосов
/ 22 июня 2011
gs \
 -sDEVICE=pdfwrite \
 -o foo.pdf \
  /usr/local/share/ghostscript/8.71/lib/viewjpeg.ps \
 -c \(my.jpg\) viewJPEG

читает my.jpg и создает foo.pdf . Вам нужно будет найти, где ваша установка установила программу PostScript viewjpeg.ps.

12 голосов
/ 28 июня 2011

Я уже довольно давно использую ту же самую базовую командную строку, которую Генри дал в своем ответе, в простом скрипте Bash с несколькими изменениями.

Мой полный сценарий преобразует несколько изображений JPEG в многостраничный PDF, используя эту измененную команду:

gs \
 -sDEVICE=pdfwrite \
 -o foo.pdf \
  /usr/local/share/ghostscript/9.02/lib/viewjpeg.ps \
 -c "(1st.jpg)  viewJPEG showpage \
     (2nd.jpg)  viewJPEG showpage \
     (3rd.jpg)  viewJPEG showpage \
     (last.jpg) viewJPEG showpage"

Это называется так:

jpegs2pdf.sh output.pdf file1.jpeg [file2.jpeg [file2.jpeg [...]]]

Проблема заключается в том, что эта команда будет использовать тот же (по умолчанию) размер страницы Ghostscript (обычно Letter или A4 в портретном режиме), и каждое изображение JPEG будет масштабироваться в соответствии с этой шириной страницы и / или высотой страницы, помещаясь на нижний левый угол.

Мой скрипт заставляет каждую страницу PDF использовать те же размеры страницы, что и исходный JPEG для этой страницы. Для автоматического обнаружения размеров JPEG я использую команду ImageMagick identify:

 identify -format "%[fx:(w)] %[fx:(h)]" some.jpeg

Вот код полного скрипта:

#!/bin/bash
#
#############################################################################
#  
#  Shellscript to convert a set of JPEG files to a multipage PDF.
#
#  Requirements: (1) Ghostscript needs to be installed on the local system.
#                (2) ImageMagick needs to be installed on the local system.
#
#  Usage:  jpegs2pdf.sh output.pdf file1.jpeg [file2.jpeg [file2.jpeg [...]]]
#
#  Copyright (c) 2007, <pipitas@gmail.com>
#                Use, distribute and modify without any restrictions.
#
#  Versions:
#          v1.0.0, Jul 12 2007:  initial version
#          v1.0.1, Jan 07 2011:  set viewJPEG.ps path (self-compiled GS 9.02)
#
#############################################################################

outfile=$1
shift

param=""
for i in "$@" ; do
   dimension=$(identify -format "%[fx:(w)] %[fx:(h)]" "${i}")
   param="${param} <</PageSize [${dimension}]>> setpagedevice (${i}) viewJPEG showpage"
done

gs \
  -sDEVICE=pdfwrite \
  -dPDFSETTINGS=/prepress \
  -o "$outfile" \
   /usr/local/share/ghostscript/9.02/lib/viewjpeg.ps \
  -c "${param}"
4 голосов
/ 23 сентября 2011

альтернативно на некоторых дистрибутивах Linux convert pic1.jpg pic2.jpg out.pdf выполняет работу со смешанными результатами

2 голосов
/ 07 марта 2014

У меня есть версия Ghostscript 9.10 , поэтому команда со следующей строкой НЕ РАБОТАЛА ДЛЯ МЕНЯ

/usr/local/share/ghostscript/9.02/lib/viewjpeg.ps

, поэтомуЯ изменил команду, отредактировал строку и использовал ее, ЭТО РАБОТАЛО ДЛЯ МЕНЯ

viewjpeg.ps

Итак, НОВАЯ МОДИФИЦИРОВАННАЯ КОМАНДА ЕСТЬ ниже:

gs \
     -sDEVICE=pdfwrite \
     -o foo.pdf \
      viewjpeg.ps \
     -c "(1st.jpg)  viewJPEG showpage \
         (2nd.jpg)  viewJPEG showpage \
         (3rd.jpg)  viewJPEG showpage \
         (last.jpg) viewJPEG showpage"
1 голос
/ 26 ноября 2010

GhostScript - это интерпретатор PostScript, поэтому он не поддерживает напрямую ввод JPEG, только вывод JPEG.Тем не менее, он поддерживает декомпрессию JPEG (за исключением прогрессивного JPEG).

Существует программа PostScript и прилагаемый скрипт оболочки, который можно использовать, чтобы воспользоваться преимуществами этого, называемого jpeg2eps .Чтобы получить PDF, в большинстве систем имеется сценарий pstopdf, доступный для использования, который пропускает каждый из входных файлов (вы бы использовали вывод сценария jpeg2eps) через GhostScript.

...