我正在使用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中是我不确定的。
最后,这就是我做的。
我首先在我的软件包控制器的配置方法中创建新的缩略图类型,如下:
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'));
}
毕竟这在C5内似乎是可能的,使用文件检查器:
任何时候将文件导入Concrete5(通过文件进口商类的实例发生)时,它都可以通过可选的文件检查器运行,该检查器是PHP类,可以在某个类型的文件上执行其他操作他们已上传或扫描
可以在C5文档中找到更多信息和实施示例。
。在这个混凝土论坛讨论中,有人似乎使用了此功能来构建您想要构建的内容,即使用ImageMagick的PDF的缩略图。
该用户的示例代码可以做两件事。首先,它使用运行的C5实例注册一个新的自定义文件检查器。然后,将您的自定义检查员库添加到项目中。