Подтвердить что ты не робот

Использование Ghostscript для преобразования JPEG в PDF

Какими параметрами я должен пройти? Версия Ghostscript, которую я использую, - 8.71.

4b9b3361

Ответ 1

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.

Ответ 2

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

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

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

Ответ 3

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

Мой полный script преобразует несколько изображений 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 будет масштабироваться, чтобы соответствовать этой ширине страницы и/или странице, нижний левый угол.

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

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

Вот код полного script:

#!/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, <[email protected]>
#                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 "[email protected]" ; 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

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

Ответ 5

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

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

Ответ 6

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

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

поэтому я модифицировал команду и отредактировал строку, и insted использовал это, IT WORKED FOR ME

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"