jjzjj

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

coder 2024-04-06 原文

我正在使用 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 中。

最佳答案

最后,这是我的做法。

我首先在包 Controller 的配置方法中创建了一个新的缩略图类型,如下所示:

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

然后我创建了一个类mypackage/src/document_processing/pdfthumbnails.php,内容如下:

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

然后我在包的 Controller 中连接到 on_file_version_add 事件:

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

...

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

关于php - Concrete5:将文件缩略图设置为生成的图像(例如 PDF),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30225563/

有关php - Concrete5:将文件缩略图设置为生成的图像(例如 PDF)的更多相关文章

  1. ruby - 解析 RDFa、微数据等的最佳方式是什么,使用统一的模式/词汇(例如 schema.org)存储和显示信息 - 2

    我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i

  2. ruby-on-rails - Prawn PDF : I need to generate nested tables - 2

    我需要一个表,其中行实际上是2行表,一个嵌套表是..我怎样才能在Prawn中做到这一点?也许我需要延期..但哪一个? 最佳答案 现在支持子表:Prawn::Document.generate("subtable.pdf")do|pdf|subtable=pdf.make_table([["sub"],["table"]])pdf.table([[subtable,"original"]])end 关于ruby-on-rails-PrawnPDF:Ineedtogeneratenested

  3. ruby-on-rails - CarrierWave - PDF - 只选择第一页 - 2

    我的Rails应用程序中安装了carrierwave。但是,当用户上传多页pdf时,我只希望应用程序获取文档中的第一页并将其转换为jpeg。这可能吗?用什么命令?这是我的uploader。#encoding:utf-8classImageUploader[200,300]##defscale(width,height)##dosomething#end#Createdifferentversionsofyouruploadedfiles:version:thumbdoprocess:resize_to_fill=>[150,210]process:convert=>:jpgdefful

  4. ruby - 如何从 nokogiri 对象获取标识符(例如 xpath)? - 2

    遍历nokogiri并使用xpath选择元素相当容易。我需要这个反之亦然,意思是:我需要例如在nokogiri节点上调用.to_xpath以获取元素的完整xpath以将其存储在记录中。有人知道这样做的方法吗? 最佳答案 我能想到的最简单的方法是:Nokogiri::CSS.xpath_fornode.css_path编辑:您也可以尝试使用path方法。 关于ruby-如何从nokogiri对象获取标识符(例如xpath)?,我们在StackOverflow上找到一个类似的问题:

  5. ruby-on-rails - 这个 C 和 PHP 程序员如何学习 Ruby 和 Rails? - 2

    按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭9年前。我来自C、php和bash背景,很容易学习,因为它们都有相同的C结构,我可以将其与我已经知道的联系起来。然后2年前我学了Python并且学得很好,Python对我来说比Ruby更容易学。然后从去年开始,我一直在尝试学习Ruby,然后是Rails,我承认,直到现在我还是学不会,讽刺的是那些打着简单易学的烙印,但是对于我这样一个老练的程序员来说,我只是无法将它

  6. ruby - 如何使用远程 API 将 Confluence "Space"导出为 PDF - 2

    如何将Confluence的“空间”导出为pdf文件?看起来Confluence5.0可能仍然支持使用XML-RPCAPI。不过,我找不到调用什么的示例。https://developer.atlassian.com/display/CONFDEV/Remote+API+Specification+for+PDF+Export#RemoteAPISpecificationforPDFExport-XML-RPCInformation该链接表示调用应以pdfexport为前缀,但没有列出任何调用或给出示例。 最佳答案 这可以使用Bob

  7. ruby-on-rails - 保存 PDFKit 中间件显示的 PDF 文件 - 2

    如果有人有兴趣将PDF文件保存在PDFKit中间件gem显示的文件系统中,那么这里是...重写middleware.rb文件的call方法。在覆盖中只需替换这一行:body=PDFKit.new(translate_paths(body,env),@options).to_pdf与pdf=PDFKit.new(translate_paths(body,env),@options)file=pdf.to_file('Your/file/name/path')Mymodel.my_method()#Youcanwriteyourmethodheretousethatfilebody=pdf

  8. ruby - 如何使用 Ruby Prawn 替换现有 PDF 中的单词? - 2

    -你好桑迪普。我是绝地大师尤达的学徒。我的主人相信Ruby社区的力量很强大,并选择了我来完成一项使用Ruby语言完成的简单任务:我需要使用PrawnPDFgem来完成任务。我有一个名为Dooku.pdf的现有pdf文档-它包含有关EvilCountDooku事件的敏感信息。在Dooku.pdf中有一个名为{galaxy}的文本。{galaxy}始终位于pdf文档每一页的相同位置。我需要打开Dooku.pdf,将{galaxy}的每个实例替换为{planet},然后保存/关闭Dooku.pdf。我如何使用PrawnPDFgem完成这个任务?-愿原力与你同在 最

  9. ruby-on-rails - 如何 'rake spec' 一个目录,例如楷模? - 2

    我可以rakespec并运行所有规范。但是尝试为一个目录运行规范,如rakespec/models/orrakespec/models/*.rb不提供任何输出或错误。一个选项是我可以做rspecspec/models/*.rb或rspecspec/models/但我想知道我是否可以留在Rake。 最佳答案 尝试使用rakespec:models而不是rakespec/models。运行rake-T|grepspec查看所有可用的rakespec任务。更新:通过rakespec运行规范可能比通过rspecspec运行它们慢,rspec

  10. ruby - 如何使用 Gnuplot 创建多页 PDF 文件? - 2

    我通过ruby-gnuplot在Mac上使用Gnuplot绘制了十几个图.如果我重新运行我的ruby​​脚本,那么带有绘图的打开窗口的数量就会翻倍。如果我可以在预览中打开的PDF中输出所有这些图,那么该文件将在每次重新运行后自动更新,我不需要费心关闭众多窗口。目前我只能通过每个PDF文件绘制一个图来实现这一点:Gnuplot.opendo|gp|Gnuplot::Plot.new(gp)do|plot|plot.arbitrary_lines我如何使用Gnuplot将我的所有图形制作成一个PDF? 最佳答案 嗯,至少在UN*x的gn

随机推荐