2012-05-04 12 views
7

Tôi đang sử dụng imagick 3.0.1 và cũng phmagick (http://www.francodacosta.com/phMagick/download). Không có vấn đề gì, cả hai đều cho tôi cùng một loại lỗi khi tôi cố chuyển đổi PDF thành JPEG.Vấn đề với Imagick và cũng với phmagick: Đại biểu Postscript không thành công/Không có tệp hoặc thư mục như vậy

Ví dụ: Postscript đại biểu thất bại `/ tmp/phép thuật-bfxIrUJ5' : Không có tập tin hoặc thư mục @ như lỗi/pdf.c/ReadPDFImage/669

Tôi đang sử dụng Ghostscript-9.05 (chạy trên/usr/local/bin/gs). Ngoài ra ImageMagick-6.7.6-8 (chạy trên/usr/local/bin/convert).

Tôi đã kiểm tra quyền của thư mục (755). ImageMagick hoạt động tuyệt vời từ Terminal.

Ví dụ, PHP của tôi sử dụng Imagick:

//use imagick 
$im = new imagick('/pdf/553571072.pdf'); 

// convert to jpg 
$im->setImageColorspace(255); 
$im->setCompression(Imagick::COMPRESSION_JPEG); 
$im->setImageFormat('jpeg'); 

//write image on server 
$im->writeImage('/jpg/553571072.jpg'); 

Bằng cách Imagick nó hiển thị trong phpinfo của tôi(). Tôi đang làm việc trên linux/apache/amd64.

Mọi lời khuyên sẽ được đánh giá cao!

+0

chạy tốt từ thiết bị đầu cuối không liên quan. Bạn không chạy dưới UID của Apache sau đó, vì vậy nó không phải là một thử nghiệm hợp lệ. –

+0

Mẫu mã của bạn từ một ứng dụng web hay từ dòng lệnh? Và bạn có thực sự đọc từ thư mục '/ pdf' và ghi vào thư mục '/ jpg' tức là cả hai đều nằm trong thư mục gốc của hệ thống nộp đơn không? – halfer

+0

Halfer, Mã này là từ một ứng dụng web, tôi đã thử cũng sử dụng đường dẫn đầy đủ '/var/vhost/...../pdf/', tương tự cho jpg. Các thư mục nằm trong cơ sở, giống như/css và/js. Đánh dấu, tôi không hiểu điểm của bạn, tôi đang chạy một ứng dụng web trên một VPS. Cảm ơn các bạn. – 82din

Trả lời

16

OK, điều này cuối cùng cũng hiệu quả, nhờ sự trợ giúp của Nuno Franco da Costa (http://www.francodacosta.com/).

Vấn đề là đường dẫn GhostScript của tôi là OK cho Shell, nhưng nó đã sai đối với Hệ thống và PHP. Để sửa chữa, bạn nên liên kết tệp /usr/local/bin/gs của mình với /usr/bin/gs.

Làm như sau từ Shell:

[[email protected] ~]# convert -list configure | grep -i delegates 
DELEGATES  bzlib fontconfig freetype jpeg jng png tiff x11 xml zlib 

Kiểm tra để xem nếu một tập tin gs đã tồn tại trong /usr/bin. Nếu có, chúng tôi sẽ tạo bản sao lưu của nó.
Nếu không có /usr/bin/gs bạn có thể bỏ qua bước này

[[email protected] ~]# ls -l /usr/bin/gs 
-rwxr-xr-x 1 root root 6024 Sep 30 2010 /usr/bin/gs 
[[email protected] ~]# mv /usr/bin/gs /usr/bin/gs.orig 

Bây giờ tạo ra các liên kết từ /usr/local/bin/gs để /usr/bin/gs

[[email protected] ~]# sudo ln -s /usr/local/bin/gs /usr/bin 

Điều đó sẽ giải quyết vấn đề. Cám ơn mấy đứa nhiều.

+0

Điều đó giải quyết vấn đề cho tôi cũng ... nhưng không thể chỉ định cho php-imagick nơi gs thực thi được? –

+3

Tôi vừa thông qua câu trả lời này. Có một giải pháp đơn giản. Chỉ cần thêm đường dẫn thực tế của 'gs' vào php PATH: putenv (getenv ('PATH'). ':/Usr/local/bin') – HelloWorld

4

Đóng góp của tôi cho "giải pháp PHP thuần túy" được đề xuất bởi @HelloWorld (cảm ơn bạn!) trong các ý kiến ​​của câu trả lời được chấp nhận, một sự điều chỉnh nhỏ: người ta phải thêm tên biến trước khi mở rộng đường dẫn mặc định, vì vậy
putenv( getenv('PATH') . ':/usr/local/bin'); sẽ không làm việc, nhưng
putenv('PATH=' . getenv('PATH') . ':/usr/local/bin'); sẽ

* Tôi còn lại ít hơn 50 điểm uy tín, không thể thêm nhận xét của tôi ở đúng nơi, vì vậy tôi đã phải tạo ra một câu trả lời mới :-)

1

tôi đã nhận được những vấn đề này bằng ImageMagickImageMagick 6.7.7-10 wi th GhostScript9.10.

Hóa ra tệp PDF đã bị hỏng và mặc dù một số phiên bản GS mới hơn có thể đọc chúng, phiên bản cũ hơn này không thể, do lỗi sau.

**** Warning: An error occurred while reading an XREF table. 
    **** The file has been damaged. This may have been caused 
    **** by a problem while converting or transfering the file. 
    **** Ghostscript will attempt to recover the data. 

Dưới Linux, bạn có thể vượt qua của PDF thông qua pdftk đầu tiên:

pdftk 'bad.pdf' output 'fixed.pdf' 

Sau đó, tất cả mọi thứ làm việc cho tôi trên Ubuntu.

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