加入收藏 | 设为首页 | 会员中心 | 我要投稿 安卓应用网 (https://www.0791zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > PHP > 正文

php – Concrete5:将文件缩略图设置为生成的图像(例如,用于PDF)

发布时间:2020-05-31 00:49:44 所属栏目:PHP 来源:互联网
导读:我正在使用Concrete5,我正在尝试显示各种上传文件的缩略图.虽然其中一些可能是图像,但大多数是PDF. 我目前正在使用: ?php$file = File::getByID($fID);$imageHelper = Core::make(helper/image);try { $imageHelper-outputThumbnail($file, 200, 200);

我正在使用Concrete5,我正在尝试显示各种上传文件的缩略图.虽然其中一些可能是图像,但大多数是PDF.

我目前正在使用:

<?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 } ?>

我更喜欢以某种方式创建一个较小的PDF文件缩略图,例如在后台使用ghostscript.在内置文件管理器中,至少显示一个PDF图标.这将是一个非最佳选择,但仍然比不显示任何东西表示我们正在处理PDF更好.

如何访问内置缩略图?而且,更重要的是,如何在上传某些文件类型时正确覆盖它们?

编辑:

我遇到了$file-> getThumbnailURL(‘type’);并为我自己的目的创建了一个类型.如何在上传文件时自动生成这样的缩略图?我可能会弄清楚如何使用普通的PHP生成文件,但将其存储在Concrete5中是我不确定的.

最后,我是这样做的.

我开始在我的包的控制器的configure方法中创建一个新的缩略图类型,如下所示:

use ConcreteCoreFileImageThumbnailTypeType;

...

public function configure($pkg) {
    ...

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

然后我创建了一个类mypackage / src / document_processing / pdfthumbnails.php,其中包含以下内容:

namespace ConcretePackageMypackageSrcDocumentProcessing;

use Core;
use File;
use ConcreteCoreFileImageThumbnailTypeType;

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()));
        }
    }
}

然后我迷上了我的包的控制器中的on_file_version_add事件:

use ConcretePackageMypackageSrcDocumentProcessingPdfthumbnails;

...

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

(编辑:安卓应用网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读