2012-04-04 4 views
7

I GS bin mit tun Konvertierung von PDF zu JPEG und finden Sie den Befehl, die ich benutze:Einstellung Auto-Höhe/Breite für konvertierte Jpeg von PDF Ghostscript mit

gs -sDEVICE=jpeg -dNOPAUSE -dBATCH -g500x300 -dPDFFitPage -sOutputFile=image.jpg image.pdf 

In diesem Befehl wie u sehen -g500x300 ist die konvertierte Bildgröße (Breite x Höhe) einzustellen.

Gibt es eine Möglichkeit, die Breite einfach einzustellen, ohne die Höhe eingeben zu müssen, so dass sie auf der Breite basiert, um die Höhe mit ihrem ursprünglichen Seitenverhältnis zu skalieren? Ich weiß, dass es erreicht werden kann, indem Sie ImageMagick konvertieren, wo Sie einfach 0 auf den Höhenparameter setzen, d. H. -resize 500x0. Ich habe es mit GhostScript versucht, aber ich denke nicht, dass dies der richtige Weg ist.

Ich habe mich entschieden, ImageMagick nicht zu konvertieren, weil es sehr langsam ist, wenn es darum geht, ein großes mehrseitiges PDF zu konvertieren.

Danke für die Hilfe!

Antwort

5

In diesem Post wird erklärt, warum Ghostscript schneller ist - https://serverfault.com/questions/167573/fast-pdf-to-jpg-conversion-on-linux-wanted, und die einzige Problemumgehung, um es zu beheben, würde die Änderung des ImageMagick-Codes beinhalten.

Leider wird die automatische Ausgabegröße von Ghostscript nicht unterstützt. Dies liegt hauptsächlich daran, dass die verwendete -g-Option tatsächlich die Einheit Größe bestimmt, die die gerenderte Ausgabe und nicht die gerenderte Ausgabe selbst enthält. Diese Ausgabegröße ändert sich aufgrund des Schalters -dPDFFitPage, der dann versucht, die Gerätegröße zu erreichen. Und obwohl Sie mit -dDEVICEHEIGHT=n nur die Höhe des JPEG-Geräts definieren können, bleibt die Gerätebreite unverändert.

Obwohl eine etwas mühsame Lösung, können Sie Ghostscript oder Imagemagick verwenden, um die Breite und Höhe der PDF-Seite (n) zu erhalten. Um dies mit ghostscript zu tun, siehe die Antwort auf Using GhostScript to get page size. Sie können dann die richtige Breite berechnen, um das Flag -g so einzustellen, dass das Seitenverhältnis beibehalten wird. Bonuspunkte, wenn Sie einen einzigen Befehlssatz herausfinden können, um all dies zu tun :)

4

Sie könnten ein PostScript-Programm schreiben, um dies bereitwillig zu tun. Hier ist ein Anfang:

 
%! 
% usage: gs -sFile=____.pdf scale.ps 

/File where not { 
    (\n *** Missing source file. \(use -sFile=____.pdf\)\n) = 
    Usage 
} { 
    pop 
}ifelse 

% Get the width and height of a PDF page 
% 
/GetSize { 
    pdfgetpage currentpagedevice 
    1 index get_any_box 
    exch pop dup 2 get exch 3 get 
    /PDFHeight exch def 
    /PDFWidth exch def 
} def 


% 
% The main loop 
% For every page in the original PDF file 
% 
1 1 PDFPageCount 
{ 
    /PDFPage exch def 
    PDFPage GetSize 

% In here, knowing the desired destination size 
% calculate a scale factor for the PDF to fit 
% either the width or height, or whatever 
% The width and height are stored in PDFWidht and PDFHeight 
    PDFPage pdfgetpage 
    pdfshowpage 
} for 

pdfgetpage und pdfshowpage sind interne Ghost Erweiterungen der Postscript-Sprache für PDF-Dateien verarbeitet werden.

+0

Können Sie ausführlich erklären, wie Sie dieses Programm verwenden? Wie muss ich ein Shell-Skript erstellen und das ausführen? –

+0

Sein PostScript, also füttern Sie es zum PostScript-Interpreter. Um genau zu sein, übergeben Sie es als Eingabedatei-Befehlszeilenargument an Ghostscript. Der Kommentar als erste Zeile des Programms gibt Ihnen sogar die Verwendung. Beachten Sie, dass dies keine vollständige Arbeitsimplementierung ist. – KenS