2015-05-13 13 views
5

Tôi đang sử dụng Concrete5 và tôi đang cố gắng hiển thị hình thu nhỏ cho các tệp tải lên khác nhau. Mặc dù một số trong số đó có thể là hình ảnh, phần lớn là các tệp PDF.Concrete5: đặt Hình thu nhỏ tệp thành hình ảnh được tạo (ví dụ: đối với tệp PDF)

Tôi hiện đang sử dụng:

<?php 
$file = File::getByID($fID); 
$imageHelper = Core::make('helper/image'); 
try { 
    $imageHelper->outputThumbnail($file, 200, 200); 
} catch(InvalidArgumentException $e) { ?> 
    <img src='https://placehold.it/200x200'> 
<?php } ?> 

Tôi muốn nhiều thích bằng cách nào đó tạo một thumbnail nhỏ các tập tin PDF, ví dụ bằng cách sử dụng GhostScript ở chế độ nền. Trong trình quản lý tệp tích hợp, ít nhất một biểu tượng PDF được hiển thị. Đó sẽ là một tùy chọn không tối ưu, nhưng vẫn tốt hơn là không hiển thị bất cứ điều gì để biểu thị rằng chúng tôi đang xử lý tệp PDF ..

Làm cách nào để truy cập hình thu nhỏ được tích hợp? Và, quan trọng hơn, làm thế nào tôi có thể ghi đè chúng đúng cách cho một số loại tệp nhất định khi chúng được tải lên?

EDIT:

Tôi đã xem qua $file->getThumbnailURL('type'); và tạo một loại cho mục đích của riêng tôi. Bạn sẽ tự động tạo hình thu nhỏ như thế nào khi tệp được tải lên? Tôi có thể có khả năng tìm ra cách để tạo ra các tập tin với PHP đơn giản, nhưng lưu trữ nó trong Concrete5 là một cái gì đó tôi không chắc chắn về.

+0

Tôi không biết liệu C5 có hỗ trợ câu hỏi thú vị này hay không. Nếu nó không hoạt động, bạn có thể xem xét việc tự tạo hình thu nhỏ, tạo và lưu trữ chúng trong một thư mục riêng biệt. –

+0

@Pekka Tôi đã xem xét rằng một chút .. Tôi nhận thấy rằng có một sự kiện 'on_file_add' để nối vào. Bạn khuyên bạn nên liên kết hình thu nhỏ với các tệp như thế nào? Tạo cấu trúc thư mục dựa trên ID tệp? Hoặc bằng cách nào đó tôi có thể đặt vị trí cho các loại hình thu nhỏ tùy chỉnh?Cảm ơn đã đưa ra vấn đề này! – Joost

Trả lời

2

Cuối cùng, dưới đây là cách tôi đã thực hiện.

Tôi bắt đầu bằng cách tạo ra một loại thumbnail mới trong phương pháp cấu hình của bộ điều khiển gói tôi, như sau:

use Concrete\Core\File\Image\Thumbnail\Type\Type; 

... 

public function configure($pkg) { 
    ... 

    $thumbnailType = new Type(); 
    $thumbnailType->setName(tc('ThumbnailTypeName', 'PDF Thumbnails')); 
    $thumbnailType->setHandle('pdfthumbnails'); 
    $thumbnailType->setWidth(200); 
    $thumbnailType->setHeight(200); 
    $thumbnailType->save(); 
} 

Sau đó, tôi tạo ra một lớp mypackage/src/document_processing/pdfthumbnails.php với các nội dung sau:

namespace Concrete\Package\Mypackage\Src\DocumentProcessing; 

use Core; 
use File; 
use Concrete\Core\File\Image\Thumbnail\Type\Type; 

class Pdfthumbnails { 

    public function processPDFThumbnails($fv) { 
     $fi = Core::make('helper/file'); 
     $fvObj = $fv->getFileVersionObject(); 
     $ext = $fi->getExtension($fvObj->getFilename()); 
     $file = $fvObj->getFile(); 
     if ($ext == 'pdf') { 
      $type = Type::getByHandle('pdfthumbnails'); 
      $basetype = $type->getBaseVersion(); 
      $thumbpath = $basetype->getFilePath($fvObj); 

      $fsl = $file->getFileStorageLocationObject()->getFileSystemObject(); 
      $fre = $fvObj->getFileResource(); 
      // this requires sufficient permissions.. 
      // depending on your setup, reconsider 0777 
      mkdir('application/files'.dirname($thumbpath), 0777, true); 
      exec('gs -o application/files'.escapeshellarg($thumbpath).' -dPDFFitPage -sDEVICE=png16m -g200x200 -dLastPage=1 -f application/files/'.escapeshellarg($fre->getPath())); 
     } 
    } 
} 

Và sau đó tôi nối vào sự kiện on_file_version_add trong bộ điều khiển của gói của tôi:

use Concrete\Package\Mypackage\Src\DocumentProcessing\Pdfthumbnails; 

... 

    public function on_start() { 
     Events::addListener('on_file_version_add', array(new Pdfthumbnails(), 'processPDFThumbnails')); 
    } 
1

này dường như có thể bên C5 sau khi tất cả, sử dụng file inspectors:

Bất cứ lúc nào một tập tin được nhập khẩu vào Concrete5 (mà xảy ra thông qua một thể hiện của lớp File nhập khẩu) nó có thể được chạy thông qua một tùy chọn nộp Inspector, mà là một lớp PHP có thể thực hiện các hoạt động bổ sung vào tập tin của một loại nhất định khi họ đang tải lên hoặc quét lại

biết thêm thông tin và thực hiện ví dụ về thanh tra tập tin có thể được tìm thấy in the C5 documentation.

Trong this Concrete5 forum discussion, ai đó dường như đã sử dụng tính năng này để xây dựng chính xác những gì bạn muốn xây dựng, trình tạo hình thu nhỏ cho các tệp PDF bằng ImageMagick.

Mã mẫu của người dùng đó thực hiện hai việc. Đầu tiên, nó đăng ký một thanh tra tập tin tùy chỉnh mới với cá thể C5 đang chạy. Sau đó, thư viện thanh tra tùy chỉnh của bạn được thêm vào dự án.

+1

Đẹp, trông khá gọn gàng! Cảm ơn. Tôi sẽ thử nó và sẽ báo cáo lại :) – Joost

+0

Tôi đã kết thúc bằng cách sử dụng điều này để móc vào sự kiện file_add_version, và hoạt động tốt. Tuy nhiên, vấn đề vẫn là với _storing_ hình thu nhỏ được tạo ra. Điều này dường như không được giải quyết ở đó. – Joost

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