2012-04-04 33 views
7

Tôi đang sử dụng GS để làm chuyển đổi từ PDF sang JPEG và sau đây là các lệnh mà tôi sử dụng:Thiết auto-chiều cao/chiều rộng cho chuyển đổi Jpeg từ PDF sử dụng GhostScript

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

Trong lệnh này như u có thể nhìn thấy -g500x300 là đặt kích thước hình ảnh được chuyển đổi (Chiều rộng x Chiều cao).

Có cách nào để chỉ đặt Chiều rộng mà không phải nhập Chiều cao để nó sẽ dựa trên chiều rộng để chia tỷ lệ chiều cao bằng tỷ lệ khung hình gốc của nó không? Tôi biết nó có thể đạt được bằng cách sử dụng chuyển đổi ImageMagick, nơi bạn chỉ cần đặt 0 vào thông số chiều cao tức là -resize 500x0. Tôi đã thử với GhostScript nhưng tôi không nghĩ đó là cách chính xác để làm điều đó.

Tôi quyết định không sử dụng lý do chuyển đổi ImageMagick vì tại sao rất chậm khi chuyển đổi PDF nhiều trang có kích thước lớn.

Cảm ơn sự giúp đỡ!

Trả lời

5

Bài đăng này giải thích tại sao ghostscript nhanh hơn - https://serverfault.com/questions/167573/fast-pdf-to-jpg-conversion-on-linux-wanted và cách khắc phục duy nhất để khắc phục sự cố sẽ liên quan đến việc sửa đổi mã imagemagick.

Thật không may, kích thước đầu ra được xác định tự động không được ghostscript hỗ trợ. Điều này chủ yếu là do tùy chọn -g được sử dụng thực sự xác định kích thước thiết bị sẽ giữ đầu ra được hiển thị chứ không phải kết quả đầu ra được hiển thị. Kích thước đầu ra đó thay đổi vì công tắc -dPDFFitPage sau đó cố gắng khớp kích thước thiết bị. Và mặc dù bạn chỉ có thể xác định chiều cao của thiết bị jpeg bằng cách sử dụng -dDEVICEHEIGHT=n, điều này sẽ khiến chiều rộng của thiết bị không thay đổi.

Mặc dù một cách giải quyết hơi tẻ nhạt, bạn có thể sử dụng ghostscript hoặc imagemagick để có chiều rộng và chiều cao của (các) trang pdf. Để làm điều này bằng cách sử dụng ghostscript, xem câu trả lời cho Using GhostScript to get page size. Sau đó, bạn có thể tính toán chiều rộng thích hợp để đặt cờ -g để giữ tỷ lệ cỡ ảnh. Điểm thưởng nếu bạn có thể tìm ra một tập lệnh để làm tất cả điều này :)

4

Bạn có thể viết chương trình PostScript để thực hiện việc này đủ dễ dàng. Đây là một sự khởi đầu:

 
%! 
% 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 and pdfshowpage là phần mở rộng GhostScript cho ngôn ngữ PostScript để xử lý tệp PDF.

+0

Bạn có thể giải thích chi tiết một chút về cách sử dụng chương trình này không? Giống như tôi cần tạo một kịch bản lệnh shell và chạy nó? –

+0

PostScript của nó, vì vậy bạn hãy đưa nó vào trình thông dịch PostScript. Để được chính xác, bạn vượt qua nó như là tham số dòng lệnh tập tin đầu vào để Ghostscript. Nhận xét là dòng đầu tiên của chương trình thậm chí còn cung cấp cho bạn cách sử dụng. Lưu ý rằng đây không phải là một thực hiện làm việc hoàn chỉnh. – KenS

Các vấn đề liên quan