Linux ip-172-26-7-228 5.4.0-1103-aws #111~18.04.1-Ubuntu SMP Tue May 23 20:04:10 UTC 2023 x86_64
Your IP : 3.138.123.240
<?php
namespace Mpdf\Writer;
use Mpdf\Strict;
use Mpdf\Mpdf;
use Psr\Log\LoggerInterface;
final class ResourceWriter implements \Psr\Log\LoggerAwareInterface
{
use Strict;
/**
* @var \Mpdf\Mpdf
*/
private $mpdf;
/**
* @var \Mpdf\Writer\BaseWriter
*/
private $writer;
/**
* @var \Mpdf\Writer\ColorWriter
*/
private $colorWriter;
/**
* @var \Mpdf\Writer\FontWriter
*/
private $fontWriter;
/**
* @var \Mpdf\Writer\ImageWriter
*/
private $imageWriter;
/**
* @var \Mpdf\Writer\FormWriter
*/
private $formWriter;
/**
* @var \Mpdf\Writer\OptionalContentWriter
*/
private $optionalContentWriter;
/**
* @var \Mpdf\Writer\BackgroundWriter
*/
private $backgroundWriter;
/**
* @var \Mpdf\Writer\BookmarkWriter
*/
private $bookmarkWriter;
/**
* @var \Mpdf\Writer\MetadataWriter
*/
private $metadataWriter;
/**
* @var \Mpdf\Writer\JavaScriptWriter
*/
private $javaScriptWriter;
/**
* @var \Psr\Log\LoggerInterface
*/
private $logger;
public function __construct(
Mpdf $mpdf,
BaseWriter $writer,
ColorWriter $colorWriter,
FontWriter $fontWriter,
ImageWriter $imageWriter,
FormWriter $formWriter,
OptionalContentWriter $optionalContentWriter,
BackgroundWriter $backgroundWriter,
BookmarkWriter $bookmarkWriter,
MetadataWriter $metadataWriter,
JavaScriptWriter $javaScriptWriter,
LoggerInterface $logger
) {
$this->mpdf = $mpdf;
$this->writer = $writer;
$this->colorWriter = $colorWriter;
$this->fontWriter = $fontWriter;
$this->imageWriter = $imageWriter;
$this->formWriter = $formWriter;
$this->optionalContentWriter = $optionalContentWriter;
$this->backgroundWriter = $backgroundWriter;
$this->bookmarkWriter = $bookmarkWriter;
$this->metadataWriter = $metadataWriter;
$this->javaScriptWriter = $javaScriptWriter;
$this->logger = $logger;
}
public function writeResources() // _putresources
{
if ($this->mpdf->hasOC || count($this->mpdf->layers)) {
$this->optionalContentWriter->writeOptionalContentGroups();
}
$this->mpdf->_putextgstates();
$this->colorWriter->writeSpotColors();
// @log Compiling Fonts
$this->fontWriter->writeFonts();
// @log Compiling Images
$this->imageWriter->writeImages();
$this->formWriter->writeFormObjects();
$this->mpdf->writeImportedPagesAndResolvedObjects();
$this->backgroundWriter->writeShaders();
$this->backgroundWriter->writePatterns();
// Resource dictionary
$this->mpdf->offsets[2] = strlen($this->mpdf->buffer);
$this->writer->write('2 0 obj');
$this->writer->write('<</ProcSet [/PDF /Text /ImageB /ImageC /ImageI]');
$this->writer->write('/Font <<');
foreach ($this->mpdf->fonts as $font) {
if (isset($font['type']) && $font['type'] === 'TTF' && !$font['used']) {
continue;
}
if (isset($font['type']) && $font['type'] === 'TTF' && ($font['sip'] || $font['smp'])) {
foreach ($font['n'] as $k => $fid) {
$this->writer->write('/F' . $font['subsetfontids'][$k] . ' ' . $font['n'][$k] . ' 0 R');
}
} else {
$this->writer->write('/F' . $font['i'] . ' ' . $font['n'] . ' 0 R');
}
}
$this->writer->write('>>');
if (count($this->mpdf->spotColors)) {
$this->writer->write('/ColorSpace <<');
foreach ($this->mpdf->spotColors as $color) {
$this->writer->write('/CS' . $color['i'] . ' ' . $color['n'] . ' 0 R');
}
$this->writer->write('>>');
}
if (count($this->mpdf->extgstates)) {
$this->writer->write('/ExtGState <<');
foreach ($this->mpdf->extgstates as $k => $extgstate) {
if (isset($extgstate['trans'])) {
$this->writer->write('/' . $extgstate['trans'] . ' ' . $extgstate['n'] . ' 0 R');
} else {
$this->writer->write('/GS' . $k . ' ' . $extgstate['n'] . ' 0 R');
}
}
$this->writer->write('>>');
}
/* -- BACKGROUNDS -- */
if (($this->mpdf->gradients !== null && (count($this->mpdf->gradients) > 0))) { // mPDF 5.7.3
$this->writer->write('/Shading <<');
foreach ($this->mpdf->gradients as $id => $grad) {
$this->writer->write('/Sh' . $id . ' ' . $grad['id'] . ' 0 R');
}
$this->writer->write('>>');
/*
// ??? Not needed !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
$this->writer->write('/Pattern <<');
foreach ($this->mpdf->gradients as $id => $grad) {
$this->writer->write('/P'.$id.' '.$grad['pattern'].' 0 R');
}
$this->writer->write('>>');
*/
}
/* -- END BACKGROUNDS -- */
if (count($this->mpdf->images) || count($this->mpdf->formobjects) || count($this->mpdf->getImportedPages())) {
$this->writer->write('/XObject <<');
foreach ($this->mpdf->images as $image) {
$this->writer->write('/I' . $image['i'] . ' ' . $image['n'] . ' 0 R');
}
foreach ($this->mpdf->formobjects as $formobject) {
$this->writer->write('/FO' . $formobject['i'] . ' ' . $formobject['n'] . ' 0 R');
}
/* -- IMPORTS -- */
foreach ($this->mpdf->getImportedPages() as $pageData) {
$this->writer->write('/' . $pageData['id'] . ' ' . $pageData['objectNumber'] . ' 0 R');
}
/* -- END IMPORTS -- */
$this->writer->write('>>');
}
/* -- BACKGROUNDS -- */
if (count($this->mpdf->patterns)) {
$this->writer->write('/Pattern <<');
foreach ($this->mpdf->patterns as $k => $patterns) {
$this->writer->write('/P' . $k . ' ' . $patterns['n'] . ' 0 R');
}
$this->writer->write('>>');
}
/* -- END BACKGROUNDS -- */
if ($this->mpdf->hasOC || count($this->mpdf->layers)) {
$this->writer->write('/Properties <<');
if ($this->mpdf->hasOC) {
$this->writer->write('/OC1 ' . $this->mpdf->n_ocg_print . ' 0 R /OC2 ' . $this->mpdf->n_ocg_view . ' 0 R /OC3 ' . $this->mpdf->n_ocg_hidden . ' 0 R ');
}
if (count($this->mpdf->layers)) {
foreach ($this->mpdf->layers as $id => $layer) {
$this->writer->write('/ZI' . $id . ' ' . $layer['n'] . ' 0 R');
}
}
$this->writer->write('>>');
}
$this->writer->write('>>');
$this->writer->write('endobj'); // end resource dictionary
$this->bookmarkWriter->writeBookmarks();
if (!empty($this->mpdf->js)) {
$this->javaScriptWriter->writeJavascript();
}
if ($this->mpdf->encrypted) {
$this->writer->object();
$this->mpdf->enc_obj_id = $this->mpdf->n;
$this->writer->write('<<');
$this->metadataWriter->writeEncryption();
$this->writer->write('>>');
$this->writer->write('endobj');
}
}
/**
* @param \Psr\Log\LoggerInterface $logger
*
* @return void
*/
public function setLogger(LoggerInterface $logger)
{
$this->logger = $logger;
}
}
|