Używanie Ghostscript do konwersji JPEG do PDF

Jakie są parametry, które powinienem przekazać? Wersja Ghostscript, której używam to 8.71.

Author: Chry Cheng, 2010-11-26

6 answers

gs \
 -sDEVICE=pdfwrite \
 -o foo.pdf \
  /usr/local/share/ghostscript/8.71/lib/viewjpeg.ps \
 -c \(my.jpg\) viewJPEG

Czyta Mój.jpg i produkuje foo.pdf . Będziesz musiał znaleźć, gdzie twoja instalacja zainstalowała program PostScript viewjpeg.ps.

 13
Author: Henry,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-06-24 17:55:32

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

Jak wspomniał PleaseStand, GhostScript zdekoduje dane JPEG, powodując utratę generacji , a także wydajność "dziesięć do stu" razy gorszą niż img2pdf.

ImageMagick (tj. convert) również dekoduje i ponownie koduje obrazy.

 21
Author: Robert Fleming,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-25 22:19:10

Używam tej samej podstawowej linii poleceń, którą Henry dał w swojej odpowiedzi od dłuższego czasu w prostym skrypcie Bash, z kilkoma poprawkami.

Mój pełny skrypt konwertuje wiele obrazów JPEG do wielostronicowego pliku PDF, używając zmodyfikowanego polecenia:

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"

Nazywa się tak:

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

Problem polega na tym, że to polecenie użyje tego samego (domyślnego) rozmiaru strony Ghostscript (Zwykle Letter lub A4 w trybie portretowym), a każdy obraz JPEG zostanie przeskalowany tak, aby pasował do tej strony i / lub pageheight, umieszczone w lewym dolnym rogu.

Mój skrypt sprawia, że każda strona PDF używa tych samych wymiarów, co oryginalny JPEG dla strony. Do automatycznego wykrywania wymiarów JPEG używam polecenia ImageMagick identify:

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

Oto kod całego skryptu:

#!/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 "$@" ; 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}"
 12
Author: Kurt Pfeifle,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-29 10:33:00

Alternatywnie na niektórych dystrybucjach Linuksa convert pic1.jpg pic2.jpg out.pdf wykonuje zadanie z mieszanymi wynikami

 4
Author: vecvan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-09-23 16:45:53

Mam wersję Ghostscript 9.10, więc polecenie z poniższej linii nie zadziałało dla mnie

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

Więc zmodyfikowałem polecenie i edytowałem linię I wstawiłem to, zadziałało dla mnie

viewjpeg.ps

Więc nowe zmodyfikowane POLECENIE jest poniżej:

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"
 2
Author: Rahul Gupta,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-07 07:52:15

GhostScript jest interpreterem PostScriptu, więc nie obsługuje bezpośrednio wejścia JPEG, tylko wyjście JPEG. To powiedziawszy, obsługuje dekompresję JPEG (z wyjątkiem progresywnego JPEG).

Istnieje program PostScript i towarzyszący mu skrypt powłoki, którego możesz użyć do skorzystania z tego o nazwie jpeg2eps. Aby uzyskać plik PDF, większość systemów posiada skrypt pstopdf dostępny do użycia, który uruchamia każdy z plików wejściowych (można użyć wyjścia skryptu jpeg2eps) przez GhostScript.

 1
Author: PleaseStand,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-11-26 08:15:12