2017-11-21 20 views
0

PDFファイルからJPGイメージを作成するために、php拡張子 "Imagick"を使用しようとしています。
は私が仕事にこの拡張機能を必要とする二つの状況がありますContaoの3.5.14Contao 3.5とImagick php拡張子

使用:
私はニュース記事にPDFファイルを添付するとき、第1の状況です。
この場合、カスタムのテンプレートを割り当てるカスタムNews Listモジュールを作成するだけです。
このカスタムテンプレートでは、JPGを保存するためにいくつかのPHPを投げています。
それが正常に動作しない:

<div class="publication layout_full block<?= $this->class ?>"> 
    <h2><?= $this->headline ?></h2> 
    <?php if ($this->hasMetaFields): ?> 
    <p class="info"><?php echo $this->parseDate("F Y", strtotime($this->date)); ?><?= $this->author ?> <?= $this->commentCount ?></p> 
    <?php endif; ?> 
    <?php if ($this->hasSubHeadline): ?> 
    <h4><?= $this->subHeadline ?></h4> 
    <?php endif; ?> 

    <?php if ($this->addImage): ?> 
    <div class='image_container'> 
    <img src='<?= $this->singleSRC ?>'/> 
</div> 
    <?php endif; ?> 

    <?php if ($this->enclosure): ?> 
    <div class="enclosure"> 
     <?php for($i=0;$i<count($this->enclosure);$i++) { 

    // the IMAGICK bit: 

$pdf_file = $this->enclosure[$i]['enclosure'].'[0]'; 
$save_to = 'files/thumbnails/'.$this->enclosure[$i]['link'].'.jpg'; 
if (!file_exists($save_to)) { 
$im = new Imagick($pdf_file); 
$im->setImageFormat ("jpeg"); 
$im->writeImage ($save_to); 
} 
?> 
     <div class="vignette"><a target="_blank" href="<?= $this->enclosure[$i]['enclosure'] ?>" title="<?= $this->enclosure[$i]['title'] ?> (<?= $this->enclosure[$i]['filesize'] ?>)"><img src='<?= $save_to ?>'/></a></div> 

    <?php } ?> 

    </div> 
    <?php endif; ?> 

// and so on... 

</div> 

は今ここに頭痛私に与え第2の状況は付属しています...
私は「ダウンロードコンテンツ要素」を使用しながら、PDFファイルのうち、JPGを作成するためのImagick拡張機能を使用する必要があります。
私のImagickビットを追加するためにce_download.html5テンプレートを変更:

<?php $this->extend('block_searchable'); ?> 
    <?php $this->block('content'); ?> 
<!--------Here's the IMAGICK bit-------------> 
<?php 
$pdf_file = $this->singleSRC.'[0]'; 
$save_to = 'files/thumbnails/'.$this->id.'.jpg'; 
if (!file_exists($save_to)) { 
    $im = new Imagick($pdf_file); 
    $im->setImageFormat ("jpeg"); 
    $im->writeImage ($save_to); 
    } 
?> 
<!--------Here's end the IMAGICK bit------------> 
<a href="<?= $this->href ?>" title="<?= $this->title ?>"> 
     <div class="image_container"> 
      <img style="width:100%;height:auto" src='<?= $save_to ?>' /> 
     </div> 
     </a> 
     <div class="teaser"> 
     <a href="<?= $this->href ?>" title="<?= $this->title ?>"> 
      <h2> <?= $this->link ?> </h2> 
     </a> 
     </div> 

     <?php $this->endblock(); ?> 

そして、私は私のダウンロード要素を置い記事へ行くしようとすると、バックオフィスで投げ致命的なエラー:

Fatal error: Uncaught exception ImagickException with message unable to open image `files/Folder/myFile.pdf': No such file or directory @ error/blob.c/OpenBlob/2589 thrown in templates/ce_download.html5 on line 11 
#0 templates/ce_download.html5(11): Imagick->__construct('files/Folder...') 
#1 system/modules/core/library/Contao/BaseTemplate.php(88): include('/home/www/clien...') 
#2 system/modules/core/library/Contao/Template.php(277): Contao\BaseTemplate->parse() 
#3 system/modules/core/classes/FrontendTemplate.php(46): Contao\Template->parse() 
#4 system/modules/core/elements/ContentElement.php(289): Contao\FrontendTemplate->parse() 
#5 system/modules/core/elements/ContentDownload.php(72): Contao\ContentElement->generate() 
#6 system/modules/core/library/Contao/Controller.php(484): Contao\ContentDownload->generate() 
#7 system/cache/dca/tl_content.php(1166): Contao\Controller::getContentElement(Object(Contao\ContentModel)) 
#8 system/modules/core/drivers/DC_Table.php(4321): tl_content->addCteType(Array) 
#9 system/modules/core/drivers/DC_Table.php(378): Contao\DC_Table->parentView() 
#10 system/modules/core/classes/Backend.php(650): Contao\DC_Table->showAll() 
#11 system/modules/core/controllers/BackendMain.php(131): Contao\Backend->getBackendModule('article') 
#12 contao/main.php(20): Contao\BackendMain->run() 
#13 {main} 

ce_download.html5の11行目は です。$ im = new Imagick($ pdf_file);
最初はパス関連の問題だと思っていましたが、JPGが正しく作成され、フロントエンドで正常に表示されるためではありません。 これは、ce_テンプレートの仕組みやバックオフィスでの表示方法に関係しているはずです。
私は実際にこのphpコードをce_downloadテンプレートに干渉することなく動作させる方法を知りません。

私はそこに私を助けることができる誰にも感謝します。
よろしく
ビニー

+1

「新しいImagick(TL_ROOT。 '/'。$ pdf_file); ' – fritzmg

+0

@fritzmg Waouh!それは今働きます...それは経路の問題でした: - /私は答えとしてあなたのコメントを変更するように自由に感じます、私はライトの答えとしてそれを選択することができます。感謝万円... – Vinny

答えて

1

あなたはTL_ROOT定数を経由して、絶対パスを使用する必要があります。例:

$pdf_file = TL_ROOT . '/' . $this->singleSRC.'[0]'; 
$save_to = TL_ROOT . '/files/thumbnails/'.$this->id.'.jpg'; 
if (!file_exists($save_to)) { 
    $im = new Imagick($pdf_file); 
    $im->setImageFormat("jpeg"); 
    $im->writeImage($save_to); 
}