Expose PDF writer to be used directly
We used to have some kind of wrapper that didn't do much except forward methods to the real instance. That unnecessary complexity made it harder to work with the real writer instance.
This commit is contained in:
parent
98cd5e07bf
commit
79ab852bf5
|
@ -27,6 +27,9 @@
|
||||||
"php-cs-fixer fix --ansi --dry-run --diff",
|
"php-cs-fixer fix --ansi --dry-run --diff",
|
||||||
"phpcs --report-width=200 --report-summary --report-full samples/ src/ tests/ --ignore=samples/Header.php --standard=PSR2 -n",
|
"phpcs --report-width=200 --report-summary --report-full samples/ src/ tests/ --ignore=samples/Header.php --standard=PSR2 -n",
|
||||||
"phpunit --color=always"
|
"phpunit --color=always"
|
||||||
|
],
|
||||||
|
"fix": [
|
||||||
|
"php-cs-fixer fix --ansi"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
|
|
|
@ -124,13 +124,15 @@ autoloading mechanism.
|
||||||
|
|
||||||
## Writing PDF
|
## Writing PDF
|
||||||
|
|
||||||
`PHPExcel_Settings::setPdfRenderer()` and `PHPExcel_Settings::setPdfRenderer()`
|
`PHPExcel_Settings::getPdfRenderer()` and `PHPExcel_Settings::setPdfRenderer()`
|
||||||
were removed and PDF libraries must be installed via composer. So the only thing
|
were removed. `PHPExcel_Settings::getPdfRendererName()` and
|
||||||
to do is to specify a renderer like so:
|
`PHPExcel_Settings::setPdfRendererName()` were renamed as `setDefaultPdfWriter()`
|
||||||
|
and `setDefaultPdfWriter()` respectively. And PDF libraries must be installed via
|
||||||
|
composer. So the only thing to do is to specify a default writer class like so:
|
||||||
|
|
||||||
```php
|
```php
|
||||||
$rendererName = \PhpOffice\PhpSpreadsheet\Settings::PDF_RENDERER_MPDF;
|
$rendererName = \PhpOffice\PhpSpreadsheet\Writer\Pdf\MPDF::class;
|
||||||
\PhpOffice\PhpSpreadsheet\Settings::setPdfRendererName($rendererName);
|
\PhpOffice\PhpSpreadsheet\Settings::setDefaultPdfWriter($rendererName);
|
||||||
```
|
```
|
||||||
|
|
||||||
## PclZip and ZipArchive
|
## PclZip and ZipArchive
|
||||||
|
|
|
@ -745,11 +745,11 @@ of different libraries.
|
||||||
|
|
||||||
Currently, the following libraries are supported:
|
Currently, the following libraries are supported:
|
||||||
|
|
||||||
Library | Downloadable from | PhpSpreadsheet Internal Constant
|
Library | Downloadable from | PhpSpreadsheet writer
|
||||||
--------|-------------------------------------|---------------------------------
|
--------|-------------------------------------|----------------------
|
||||||
tcPDF | https://github.com/tecnickcom/tcpdf | PDF_RENDERER_TCPDF
|
tcPDF | https://github.com/tecnickcom/tcpdf | TcPdf
|
||||||
mPDF | https://github.com/mpdf/mpdf | PDF_RENDERER_MPDF
|
mPDF | https://github.com/mpdf/mpdf | MPDF
|
||||||
domPDF | https://github.com/dompdf/dompdf | PDF_RENDERER_DOMPDF
|
domPDF | https://github.com/dompdf/dompdf | DomPDF
|
||||||
|
|
||||||
The different libraries have different strengths and weaknesses. Some
|
The different libraries have different strengths and weaknesses. Some
|
||||||
generate better formatted output than others, some are faster or use
|
generate better formatted output than others, some are faster or use
|
||||||
|
@ -757,12 +757,19 @@ less memory than others, while some generate smaller .pdf files. It is
|
||||||
the developers choice which one they wish to use, appropriate to their
|
the developers choice which one they wish to use, appropriate to their
|
||||||
own circumstances.
|
own circumstances.
|
||||||
|
|
||||||
Before instantiating a Writer to generate PDF output, you will need to
|
Before instantiating a Writer via `IOFactory` to generate PDF output,
|
||||||
indicate which Rendering library you are using.
|
you will need to indicate which writer you are using:
|
||||||
|
|
||||||
``` php
|
``` php
|
||||||
$rendererName = \PhpOffice\PhpSpreadsheet\Settings::PDF_RENDERER_MPDF;
|
$rendererName = \PhpOffice\PhpSpreadsheet\Writer\Pdf\MPDF::class;
|
||||||
\PhpOffice\PhpSpreadsheet\Settings::setPdfRendererName($rendererName);
|
\PhpOffice\PhpSpreadsheet\Settings::setDefaultPdfWriter($rendererName);
|
||||||
|
$writer = \PhpOffice\PhpSpreadsheet\IOFactory\IOFactory::createWriter($spreadsheet, 'Pdf');
|
||||||
|
```
|
||||||
|
|
||||||
|
Or you can instantiate directly the writer of your choice like so:
|
||||||
|
|
||||||
|
``` php
|
||||||
|
$writer = \PhpOffice\PhpSpreadsheet\Writer\Pdf\MPDF($spreadsheet);
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Writing a spreadsheet
|
#### Writing a spreadsheet
|
||||||
|
@ -771,11 +778,11 @@ Once you have identified the Renderer that you wish to use for PDF
|
||||||
generation, you can write a .pdf file using the following code:
|
generation, you can write a .pdf file using the following code:
|
||||||
|
|
||||||
``` php
|
``` php
|
||||||
$writer = new \PhpOffice\PhpSpreadsheet\Writer\Pdf($spreadsheet);
|
$writer = new \PhpOffice\PhpSpreadsheet\Writer\Pdf\MPDF($spreadsheet);
|
||||||
$writer->save("05featuredemo.pdf");
|
$writer->save("05featuredemo.pdf");
|
||||||
```
|
```
|
||||||
|
|
||||||
Please note that \PhpOffice\PhpSpreadsheet\Writer\Pdf only outputs the
|
Please note that `\PhpOffice\PhpSpreadsheet\Writer\Pdf` only outputs the
|
||||||
first worksheet by default.
|
first worksheet by default.
|
||||||
|
|
||||||
#### Write all worksheets
|
#### Write all worksheets
|
||||||
|
@ -803,7 +810,7 @@ This can be slow on large spreadsheets, and maybe even unwanted. You can
|
||||||
however disable formula pre-calculation:
|
however disable formula pre-calculation:
|
||||||
|
|
||||||
``` php
|
``` php
|
||||||
$writer = new \PhpOffice\PhpSpreadsheet\Writer\Pdf($spreadsheet);
|
$writer = new \PhpOffice\PhpSpreadsheet\Writer\Pdf\MPDF($spreadsheet);
|
||||||
$writer->setPreCalculateFormulas(false);
|
$writer->setPreCalculateFormulas(false);
|
||||||
|
|
||||||
$writer->save("05featuredemo.pdf");
|
$writer->save("05featuredemo.pdf");
|
||||||
|
|
|
@ -16,9 +16,7 @@ if ($helper->isCli()) {
|
||||||
|
|
||||||
// Change these values to select the Rendering library that you wish to use
|
// Change these values to select the Rendering library that you wish to use
|
||||||
// and its directory location on your server
|
// and its directory location on your server
|
||||||
//$rendererName = \PhpOffice\PhpSpreadsheet\Settings::PDF_RENDERER_TCPDF;
|
$rendererName = \PhpOffice\PhpSpreadsheet\Writer\Pdf\MPDF::class;
|
||||||
$rendererName = Settings::PDF_RENDERER_MPDF;
|
|
||||||
//$rendererName = \PhpOffice\PhpSpreadsheet\Settings::PDF_RENDERER_DOMPDF;
|
|
||||||
|
|
||||||
// Create new Spreadsheet object
|
// Create new Spreadsheet object
|
||||||
$spreadsheet = new Spreadsheet();
|
$spreadsheet = new Spreadsheet();
|
||||||
|
@ -51,7 +49,7 @@ $spreadsheet->getActiveSheet()->setShowGridLines(false);
|
||||||
// Set active sheet index to the first sheet, so Excel opens this as the first sheet
|
// Set active sheet index to the first sheet, so Excel opens this as the first sheet
|
||||||
$spreadsheet->setActiveSheetIndex(0);
|
$spreadsheet->setActiveSheetIndex(0);
|
||||||
|
|
||||||
Settings::setPdfRendererName($rendererName);
|
Settings::setDefaultPdfWriter($rendererName);
|
||||||
|
|
||||||
// Redirect output to a client’s web browser (PDF)
|
// Redirect output to a client’s web browser (PDF)
|
||||||
header('Content-Type: application/pdf');
|
header('Content-Type: application/pdf');
|
||||||
|
|
|
@ -7,9 +7,7 @@ require __DIR__ . '/../Header.php';
|
||||||
|
|
||||||
// Change these values to select the PDF Rendering library that you wish to use
|
// Change these values to select the PDF Rendering library that you wish to use
|
||||||
// and its directory location on your server
|
// and its directory location on your server
|
||||||
//$rendererName = \PhpOffice\PhpSpreadsheet\Settings::PDF_RENDERER_TCPDF;
|
$rendererName = \PhpOffice\PhpSpreadsheet\Writer\Pdf\DomPDF::class;
|
||||||
//$rendererName = \PhpOffice\PhpSpreadsheet\Settings::PDF_RENDERER_MPDF;
|
|
||||||
$rendererName = Settings::PDF_RENDERER_DOMPDF;
|
|
||||||
|
|
||||||
// Read from Xlsx (.xlsx) template
|
// Read from Xlsx (.xlsx) template
|
||||||
$helper->log('Load Xlsx template file');
|
$helper->log('Load Xlsx template file');
|
||||||
|
@ -21,7 +19,7 @@ $helper->write($spreadsheet, __FILE__, ['Xlsx', 'Xls', 'Html']);
|
||||||
|
|
||||||
// Export to PDF (.pdf)
|
// Export to PDF (.pdf)
|
||||||
$helper->log('Write to PDF format');
|
$helper->log('Write to PDF format');
|
||||||
Settings::setPdfRendererName($rendererName);
|
Settings::setDefaultPdfWriter($rendererName);
|
||||||
$helper->write($spreadsheet, __FILE__, ['Pdf']);
|
$helper->write($spreadsheet, __FILE__, ['Pdf']);
|
||||||
|
|
||||||
// Remove first two rows with field headers before exporting to CSV
|
// Remove first two rows with field headers before exporting to CSV
|
||||||
|
|
|
@ -7,11 +7,9 @@ require __DIR__ . '/../Header.php';
|
||||||
|
|
||||||
// Change these values to select the Rendering library that you wish to use
|
// Change these values to select the Rendering library that you wish to use
|
||||||
// for PDF files, and its directory location on your server
|
// for PDF files, and its directory location on your server
|
||||||
//$rendererName = \PhpOffice\PhpSpreadsheet\Settings::PDF_RENDERER_TCPDF;
|
$rendererName = \PhpOffice\PhpSpreadsheet\Writer\Pdf\MPDF::class;
|
||||||
$rendererName = Settings::PDF_RENDERER_MPDF;
|
|
||||||
//$rendererName = \PhpOffice\PhpSpreadsheet\Settings::PDF_RENDERER_DOMPDF;
|
|
||||||
|
|
||||||
Settings::setPdfRendererName($rendererName);
|
Settings::setDefaultPdfWriter($rendererName);
|
||||||
|
|
||||||
// Change these values to select the Rendering library that you wish to use
|
// Change these values to select the Rendering library that you wish to use
|
||||||
// for Chart images, and its directory location on your server
|
// for Chart images, and its directory location on your server
|
||||||
|
|
|
@ -12,9 +12,9 @@ $spreadsheet->getActiveSheet()->setShowGridLines(false);
|
||||||
$helper->log('Set orientation to landscape');
|
$helper->log('Set orientation to landscape');
|
||||||
$spreadsheet->getActiveSheet()->getPageSetup()->setOrientation(PageSetup::ORIENTATION_LANDSCAPE);
|
$spreadsheet->getActiveSheet()->getPageSetup()->setOrientation(PageSetup::ORIENTATION_LANDSCAPE);
|
||||||
|
|
||||||
$rendererName = Settings::PDF_RENDERER_DOMPDF;
|
$rendererName = \PhpOffice\PhpSpreadsheet\Writer\Pdf\DomPDF::class;
|
||||||
$helper->log("Write to PDF format using {$rendererName}");
|
$helper->log("Write to PDF format using {$rendererName}");
|
||||||
Settings::setPdfRendererName($rendererName);
|
Settings::setDefaultPdfWriter($rendererName);
|
||||||
|
|
||||||
// Save
|
// Save
|
||||||
$helper->write($spreadsheet, __FILE__, ['Pdf']);
|
$helper->write($spreadsheet, __FILE__, ['Pdf']);
|
||||||
|
|
|
@ -12,9 +12,9 @@ $spreadsheet->getActiveSheet()->setShowGridLines(false);
|
||||||
$helper->log('Set orientation to landscape');
|
$helper->log('Set orientation to landscape');
|
||||||
$spreadsheet->getActiveSheet()->getPageSetup()->setOrientation(PageSetup::ORIENTATION_LANDSCAPE);
|
$spreadsheet->getActiveSheet()->getPageSetup()->setOrientation(PageSetup::ORIENTATION_LANDSCAPE);
|
||||||
|
|
||||||
$rendererName = Settings::PDF_RENDERER_TCPDF;
|
$rendererName = \PhpOffice\PhpSpreadsheet\Writer\Pdf\TcPDF::class;
|
||||||
$helper->log("Write to PDF format using {$rendererName}");
|
$helper->log("Write to PDF format using {$rendererName}");
|
||||||
Settings::setPdfRendererName($rendererName);
|
Settings::setDefaultPdfWriter($rendererName);
|
||||||
|
|
||||||
// Save
|
// Save
|
||||||
$helper->write($spreadsheet, __FILE__, ['Pdf']);
|
$helper->write($spreadsheet, __FILE__, ['Pdf']);
|
||||||
|
|
|
@ -12,9 +12,9 @@ $spreadsheet->getActiveSheet()->setShowGridLines(false);
|
||||||
$helper->log('Set orientation to landscape');
|
$helper->log('Set orientation to landscape');
|
||||||
$spreadsheet->getActiveSheet()->getPageSetup()->setOrientation(PageSetup::ORIENTATION_LANDSCAPE);
|
$spreadsheet->getActiveSheet()->getPageSetup()->setOrientation(PageSetup::ORIENTATION_LANDSCAPE);
|
||||||
|
|
||||||
$rendererName = Settings::PDF_RENDERER_MPDF;
|
$rendererName = \PhpOffice\PhpSpreadsheet\Writer\Pdf\MPDF::class;
|
||||||
$helper->log("Write to PDF format using {$rendererName}");
|
$helper->log("Write to PDF format using {$rendererName}");
|
||||||
Settings::setPdfRendererName($rendererName);
|
Settings::setDefaultPdfWriter($rendererName);
|
||||||
|
|
||||||
// Save
|
// Save
|
||||||
$helper->write($spreadsheet, __FILE__, ['Pdf']);
|
$helper->write($spreadsheet, __FILE__, ['Pdf']);
|
||||||
|
|
|
@ -59,7 +59,7 @@ class Migrator
|
||||||
'PHPExcel_Writer_OpenDocument_Styles' => \PhpOffice\PhpSpreadsheet\Writer\Ods\Styles::class,
|
'PHPExcel_Writer_OpenDocument_Styles' => \PhpOffice\PhpSpreadsheet\Writer\Ods\Styles::class,
|
||||||
'PHPExcel_Writer_OpenDocument_Thumbnails' => \PhpOffice\PhpSpreadsheet\Writer\Ods\Thumbnails::class,
|
'PHPExcel_Writer_OpenDocument_Thumbnails' => \PhpOffice\PhpSpreadsheet\Writer\Ods\Thumbnails::class,
|
||||||
'PHPExcel_Writer_OpenDocument_WriterPart' => \PhpOffice\PhpSpreadsheet\Writer\Ods\WriterPart::class,
|
'PHPExcel_Writer_OpenDocument_WriterPart' => \PhpOffice\PhpSpreadsheet\Writer\Ods\WriterPart::class,
|
||||||
'PHPExcel_Writer_PDF_Core' => \PhpOffice\PhpSpreadsheet\Writer\Pdf\Core::class,
|
'PHPExcel_Writer_PDF_Core' => \PhpOffice\PhpSpreadsheet\Writer\Pdf::class,
|
||||||
'PHPExcel_Writer_PDF_DomPDF' => \PhpOffice\PhpSpreadsheet\Writer\Pdf\DomPDF::class,
|
'PHPExcel_Writer_PDF_DomPDF' => \PhpOffice\PhpSpreadsheet\Writer\Pdf\DomPDF::class,
|
||||||
'PHPExcel_Writer_PDF_mPDF' => \PhpOffice\PhpSpreadsheet\Writer\Pdf\MPDF::class,
|
'PHPExcel_Writer_PDF_mPDF' => \PhpOffice\PhpSpreadsheet\Writer\Pdf\MPDF::class,
|
||||||
'PHPExcel_Writer_PDF_tcPDF' => \PhpOffice\PhpSpreadsheet\Writer\Pdf\TcPDF::class,
|
'PHPExcel_Writer_PDF_tcPDF' => \PhpOffice\PhpSpreadsheet\Writer\Pdf\TcPDF::class,
|
||||||
|
|
|
@ -98,6 +98,15 @@ class IOFactory
|
||||||
// Search type
|
// Search type
|
||||||
$searchType = 'IWriter';
|
$searchType = 'IWriter';
|
||||||
|
|
||||||
|
if ($writerType === 'Pdf') {
|
||||||
|
$pdfWriter = Settings::getDefaultPdfWriter();
|
||||||
|
if ($pdfWriter === null) {
|
||||||
|
throw new Exception('PDF default writer has not been defined.');
|
||||||
|
}
|
||||||
|
|
||||||
|
return new $pdfWriter($spreadsheet);
|
||||||
|
}
|
||||||
|
|
||||||
// Include class
|
// Include class
|
||||||
foreach (self::$searchLocations as $searchLocation) {
|
foreach (self::$searchLocations as $searchLocation) {
|
||||||
if ($searchLocation['type'] == $searchType) {
|
if ($searchLocation['type'] == $searchType) {
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
namespace PhpOffice\PhpSpreadsheet;
|
namespace PhpOffice\PhpSpreadsheet;
|
||||||
|
|
||||||
use PhpOffice\PhpSpreadsheet\Collection\Memory;
|
use PhpOffice\PhpSpreadsheet\Collection\Memory;
|
||||||
|
use PhpOffice\PhpSpreadsheet\Writer\Pdf;
|
||||||
use Psr\SimpleCache\CacheInterface;
|
use Psr\SimpleCache\CacheInterface;
|
||||||
|
|
||||||
class Settings
|
class Settings
|
||||||
|
@ -10,19 +11,9 @@ class Settings
|
||||||
/** Optional Chart Rendering libraries */
|
/** Optional Chart Rendering libraries */
|
||||||
const CHART_RENDERER_JPGRAPH = 'JpGraph';
|
const CHART_RENDERER_JPGRAPH = 'JpGraph';
|
||||||
|
|
||||||
/** Optional PDF Rendering libraries */
|
|
||||||
const PDF_RENDERER_TCPDF = 'TcPDF';
|
|
||||||
const PDF_RENDERER_DOMPDF = 'DomPDF';
|
|
||||||
const PDF_RENDERER_MPDF = 'MPDF';
|
|
||||||
|
|
||||||
private static $chartRenderers = [
|
private static $chartRenderers = [
|
||||||
self::CHART_RENDERER_JPGRAPH,
|
self::CHART_RENDERER_JPGRAPH,
|
||||||
];
|
];
|
||||||
private static $pdfRenderers = [
|
|
||||||
self::PDF_RENDERER_TCPDF,
|
|
||||||
self::PDF_RENDERER_DOMPDF,
|
|
||||||
self::PDF_RENDERER_MPDF,
|
|
||||||
];
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Name of the external Library used for rendering charts
|
* Name of the external Library used for rendering charts
|
||||||
|
@ -47,7 +38,7 @@ class Settings
|
||||||
*
|
*
|
||||||
* @var string
|
* @var string
|
||||||
*/
|
*/
|
||||||
private static $pdfRendererName;
|
private static $defaultPdfWriter;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Default options for libxml loader.
|
* Default options for libxml loader.
|
||||||
|
@ -152,33 +143,27 @@ class Settings
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Identify to PhpSpreadsheet the external library to use for rendering PDF files.
|
* Identify to PhpSpreadsheet the default writer to use for PDF.
|
||||||
*
|
*
|
||||||
* @param string $libraryName Internal reference name of the library
|
* @param string $writerClassName Internal reference name of the library
|
||||||
* e.g. \PhpOffice\PhpSpreadsheet\Settings::PDF_RENDERER_TCPDF,
|
|
||||||
* \PhpOffice\PhpSpreadsheet\Settings::PDF_RENDERER_DOMPDF
|
|
||||||
* or \PhpOffice\PhpSpreadsheet\Settings::PDF_RENDERER_MPDF
|
|
||||||
*/
|
*/
|
||||||
public static function setPdfRendererName($libraryName)
|
public static function setDefaultPdfWriter($writerClassName)
|
||||||
{
|
{
|
||||||
if (!in_array($libraryName, self::$pdfRenderers)) {
|
if (!is_a($writerClassName, Pdf::class, true)) {
|
||||||
throw new Exception('"' . $libraryName . '" is not a valid PDF library name');
|
throw new Exception('"' . $writerClassName . '" is not a valid PDF writer class name');
|
||||||
}
|
}
|
||||||
self::$pdfRendererName = $libraryName;
|
self::$defaultPdfWriter = $writerClassName;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return the PDF Rendering Library that PhpSpreadsheet is currently configured to use (e.g. dompdf).
|
* Return the default PDF writer that PhpSpreadsheet is currently configured to use (e.g. dompdf).
|
||||||
*
|
*
|
||||||
* @return null|string Internal reference name of the PDF Rendering Library that PhpSpreadsheet is
|
* @return null|string Internal reference name of the PDF Rendering Library that PhpSpreadsheet is
|
||||||
* currently configured to use
|
* currently configured to use
|
||||||
* e.g. \PhpOffice\PhpSpreadsheet\Settings::PDF_RENDERER_TCPDF,
|
|
||||||
* \PhpOffice\PhpSpreadsheet\Settings::PDF_RENDERER_DOMPDF
|
|
||||||
* or \PhpOffice\PhpSpreadsheet\Settings::PDF_RENDERER_MPDF
|
|
||||||
*/
|
*/
|
||||||
public static function getPdfRendererName()
|
public static function getDefaultPdfWriter()
|
||||||
{
|
{
|
||||||
return self::$pdfRendererName;
|
return self::$defaultPdfWriter;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -2,58 +2,280 @@
|
||||||
|
|
||||||
namespace PhpOffice\PhpSpreadsheet\Writer;
|
namespace PhpOffice\PhpSpreadsheet\Writer;
|
||||||
|
|
||||||
use PhpOffice\PhpSpreadsheet\Settings;
|
use PhpOffice\PhpSpreadsheet\Calculation;
|
||||||
|
use PhpOffice\PhpSpreadsheet\Shared\File;
|
||||||
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
||||||
|
use PhpOffice\PhpSpreadsheet\Worksheet\PageSetup;
|
||||||
|
use PhpOffice\PhpSpreadsheet\Writer\Exception as WriterException;
|
||||||
|
|
||||||
class Pdf implements IWriter
|
abstract class Pdf extends Html implements IWriter
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* The wrapper for the requested PDF rendering engine.
|
* Temporary storage directory.
|
||||||
*
|
*
|
||||||
* @var PDF\Core
|
* @var string
|
||||||
*/
|
*/
|
||||||
private $renderer;
|
protected $tempDir = '';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Instantiate a new renderer of the configured type within this container class.
|
* Font.
|
||||||
*
|
*
|
||||||
* @param Spreadsheet $spreadsheet PhpSpreadsheet object
|
* @var string
|
||||||
|
*/
|
||||||
|
protected $font = 'freesans';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Orientation (Over-ride).
|
||||||
*
|
*
|
||||||
* @throws Exception when PDF library is not configured
|
* @var string
|
||||||
|
*/
|
||||||
|
protected $orientation;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Paper size (Over-ride).
|
||||||
|
*
|
||||||
|
* @var int
|
||||||
|
*/
|
||||||
|
protected $paperSize;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Temporary storage for Save Array Return type.
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
private $saveArrayReturnType;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Paper Sizes xRef List.
|
||||||
|
*
|
||||||
|
* @var array
|
||||||
|
*/
|
||||||
|
protected static $paperSizes = [
|
||||||
|
PageSetup::PAPERSIZE_LETTER => 'LETTER', // (8.5 in. by 11 in.)
|
||||||
|
PageSetup::PAPERSIZE_LETTER_SMALL => 'LETTER', // (8.5 in. by 11 in.)
|
||||||
|
PageSetup::PAPERSIZE_TABLOID => [792.00, 1224.00], // (11 in. by 17 in.)
|
||||||
|
PageSetup::PAPERSIZE_LEDGER => [1224.00, 792.00], // (17 in. by 11 in.)
|
||||||
|
PageSetup::PAPERSIZE_LEGAL => 'LEGAL', // (8.5 in. by 14 in.)
|
||||||
|
PageSetup::PAPERSIZE_STATEMENT => [396.00, 612.00], // (5.5 in. by 8.5 in.)
|
||||||
|
PageSetup::PAPERSIZE_EXECUTIVE => 'EXECUTIVE', // (7.25 in. by 10.5 in.)
|
||||||
|
PageSetup::PAPERSIZE_A3 => 'A3', // (297 mm by 420 mm)
|
||||||
|
PageSetup::PAPERSIZE_A4 => 'A4', // (210 mm by 297 mm)
|
||||||
|
PageSetup::PAPERSIZE_A4_SMALL => 'A4', // (210 mm by 297 mm)
|
||||||
|
PageSetup::PAPERSIZE_A5 => 'A5', // (148 mm by 210 mm)
|
||||||
|
PageSetup::PAPERSIZE_B4 => 'B4', // (250 mm by 353 mm)
|
||||||
|
PageSetup::PAPERSIZE_B5 => 'B5', // (176 mm by 250 mm)
|
||||||
|
PageSetup::PAPERSIZE_FOLIO => 'FOLIO', // (8.5 in. by 13 in.)
|
||||||
|
PageSetup::PAPERSIZE_QUARTO => [609.45, 779.53], // (215 mm by 275 mm)
|
||||||
|
PageSetup::PAPERSIZE_STANDARD_1 => [720.00, 1008.00], // (10 in. by 14 in.)
|
||||||
|
PageSetup::PAPERSIZE_STANDARD_2 => [792.00, 1224.00], // (11 in. by 17 in.)
|
||||||
|
PageSetup::PAPERSIZE_NOTE => 'LETTER', // (8.5 in. by 11 in.)
|
||||||
|
PageSetup::PAPERSIZE_NO9_ENVELOPE => [279.00, 639.00], // (3.875 in. by 8.875 in.)
|
||||||
|
PageSetup::PAPERSIZE_NO10_ENVELOPE => [297.00, 684.00], // (4.125 in. by 9.5 in.)
|
||||||
|
PageSetup::PAPERSIZE_NO11_ENVELOPE => [324.00, 747.00], // (4.5 in. by 10.375 in.)
|
||||||
|
PageSetup::PAPERSIZE_NO12_ENVELOPE => [342.00, 792.00], // (4.75 in. by 11 in.)
|
||||||
|
PageSetup::PAPERSIZE_NO14_ENVELOPE => [360.00, 828.00], // (5 in. by 11.5 in.)
|
||||||
|
PageSetup::PAPERSIZE_C => [1224.00, 1584.00], // (17 in. by 22 in.)
|
||||||
|
PageSetup::PAPERSIZE_D => [1584.00, 2448.00], // (22 in. by 34 in.)
|
||||||
|
PageSetup::PAPERSIZE_E => [2448.00, 3168.00], // (34 in. by 44 in.)
|
||||||
|
PageSetup::PAPERSIZE_DL_ENVELOPE => [311.81, 623.62], // (110 mm by 220 mm)
|
||||||
|
PageSetup::PAPERSIZE_C5_ENVELOPE => 'C5', // (162 mm by 229 mm)
|
||||||
|
PageSetup::PAPERSIZE_C3_ENVELOPE => 'C3', // (324 mm by 458 mm)
|
||||||
|
PageSetup::PAPERSIZE_C4_ENVELOPE => 'C4', // (229 mm by 324 mm)
|
||||||
|
PageSetup::PAPERSIZE_C6_ENVELOPE => 'C6', // (114 mm by 162 mm)
|
||||||
|
PageSetup::PAPERSIZE_C65_ENVELOPE => [323.15, 649.13], // (114 mm by 229 mm)
|
||||||
|
PageSetup::PAPERSIZE_B4_ENVELOPE => 'B4', // (250 mm by 353 mm)
|
||||||
|
PageSetup::PAPERSIZE_B5_ENVELOPE => 'B5', // (176 mm by 250 mm)
|
||||||
|
PageSetup::PAPERSIZE_B6_ENVELOPE => [498.90, 354.33], // (176 mm by 125 mm)
|
||||||
|
PageSetup::PAPERSIZE_ITALY_ENVELOPE => [311.81, 651.97], // (110 mm by 230 mm)
|
||||||
|
PageSetup::PAPERSIZE_MONARCH_ENVELOPE => [279.00, 540.00], // (3.875 in. by 7.5 in.)
|
||||||
|
PageSetup::PAPERSIZE_6_3_4_ENVELOPE => [261.00, 468.00], // (3.625 in. by 6.5 in.)
|
||||||
|
PageSetup::PAPERSIZE_US_STANDARD_FANFOLD => [1071.00, 792.00], // (14.875 in. by 11 in.)
|
||||||
|
PageSetup::PAPERSIZE_GERMAN_STANDARD_FANFOLD => [612.00, 864.00], // (8.5 in. by 12 in.)
|
||||||
|
PageSetup::PAPERSIZE_GERMAN_LEGAL_FANFOLD => 'FOLIO', // (8.5 in. by 13 in.)
|
||||||
|
PageSetup::PAPERSIZE_ISO_B4 => 'B4', // (250 mm by 353 mm)
|
||||||
|
PageSetup::PAPERSIZE_JAPANESE_DOUBLE_POSTCARD => [566.93, 419.53], // (200 mm by 148 mm)
|
||||||
|
PageSetup::PAPERSIZE_STANDARD_PAPER_1 => [648.00, 792.00], // (9 in. by 11 in.)
|
||||||
|
PageSetup::PAPERSIZE_STANDARD_PAPER_2 => [720.00, 792.00], // (10 in. by 11 in.)
|
||||||
|
PageSetup::PAPERSIZE_STANDARD_PAPER_3 => [1080.00, 792.00], // (15 in. by 11 in.)
|
||||||
|
PageSetup::PAPERSIZE_INVITE_ENVELOPE => [623.62, 623.62], // (220 mm by 220 mm)
|
||||||
|
PageSetup::PAPERSIZE_LETTER_EXTRA_PAPER => [667.80, 864.00], // (9.275 in. by 12 in.)
|
||||||
|
PageSetup::PAPERSIZE_LEGAL_EXTRA_PAPER => [667.80, 1080.00], // (9.275 in. by 15 in.)
|
||||||
|
PageSetup::PAPERSIZE_TABLOID_EXTRA_PAPER => [841.68, 1296.00], // (11.69 in. by 18 in.)
|
||||||
|
PageSetup::PAPERSIZE_A4_EXTRA_PAPER => [668.98, 912.76], // (236 mm by 322 mm)
|
||||||
|
PageSetup::PAPERSIZE_LETTER_TRANSVERSE_PAPER => [595.80, 792.00], // (8.275 in. by 11 in.)
|
||||||
|
PageSetup::PAPERSIZE_A4_TRANSVERSE_PAPER => 'A4', // (210 mm by 297 mm)
|
||||||
|
PageSetup::PAPERSIZE_LETTER_EXTRA_TRANSVERSE_PAPER => [667.80, 864.00], // (9.275 in. by 12 in.)
|
||||||
|
PageSetup::PAPERSIZE_SUPERA_SUPERA_A4_PAPER => [643.46, 1009.13], // (227 mm by 356 mm)
|
||||||
|
PageSetup::PAPERSIZE_SUPERB_SUPERB_A3_PAPER => [864.57, 1380.47], // (305 mm by 487 mm)
|
||||||
|
PageSetup::PAPERSIZE_LETTER_PLUS_PAPER => [612.00, 913.68], // (8.5 in. by 12.69 in.)
|
||||||
|
PageSetup::PAPERSIZE_A4_PLUS_PAPER => [595.28, 935.43], // (210 mm by 330 mm)
|
||||||
|
PageSetup::PAPERSIZE_A5_TRANSVERSE_PAPER => 'A5', // (148 mm by 210 mm)
|
||||||
|
PageSetup::PAPERSIZE_JIS_B5_TRANSVERSE_PAPER => [515.91, 728.50], // (182 mm by 257 mm)
|
||||||
|
PageSetup::PAPERSIZE_A3_EXTRA_PAPER => [912.76, 1261.42], // (322 mm by 445 mm)
|
||||||
|
PageSetup::PAPERSIZE_A5_EXTRA_PAPER => [493.23, 666.14], // (174 mm by 235 mm)
|
||||||
|
PageSetup::PAPERSIZE_ISO_B5_EXTRA_PAPER => [569.76, 782.36], // (201 mm by 276 mm)
|
||||||
|
PageSetup::PAPERSIZE_A2_PAPER => 'A2', // (420 mm by 594 mm)
|
||||||
|
PageSetup::PAPERSIZE_A3_TRANSVERSE_PAPER => 'A3', // (297 mm by 420 mm)
|
||||||
|
PageSetup::PAPERSIZE_A3_EXTRA_TRANSVERSE_PAPER => [912.76, 1261.42], // (322 mm by 445 mm)
|
||||||
|
];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a new PDF Writer instance.
|
||||||
|
*
|
||||||
|
* @param Spreadsheet $spreadsheet Spreadsheet object
|
||||||
*/
|
*/
|
||||||
public function __construct(Spreadsheet $spreadsheet)
|
public function __construct(Spreadsheet $spreadsheet)
|
||||||
{
|
{
|
||||||
$pdfLibraryName = Settings::getPdfRendererName();
|
parent::__construct($spreadsheet);
|
||||||
if ($pdfLibraryName === null) {
|
$this->setUseInlineCss(true);
|
||||||
throw new Exception('PDF Rendering library has not been defined.');
|
$this->tempDir = File::sysGetTempDir();
|
||||||
}
|
|
||||||
|
|
||||||
$rendererName = '\\PhpOffice\\PhpSpreadsheet\\Writer\\Pdf\\' . $pdfLibraryName;
|
|
||||||
$this->renderer = new $rendererName($spreadsheet);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Magic method to handle direct calls to the configured PDF renderer wrapper class.
|
* Get Font.
|
||||||
*
|
*
|
||||||
* @param string $name Renderer library method name
|
* @return string
|
||||||
* @param mixed[] $arguments Array of arguments to pass to the renderer method
|
|
||||||
*
|
|
||||||
* @return mixed Returned data from the PDF renderer wrapper method
|
|
||||||
*/
|
*/
|
||||||
public function __call($name, $arguments)
|
public function getFont()
|
||||||
{
|
{
|
||||||
if ($this->renderer === null) {
|
return $this->font;
|
||||||
throw new Exception('PDF Rendering library has not been defined.');
|
|
||||||
}
|
|
||||||
|
|
||||||
return call_user_func_array([$this->renderer, $name], $arguments);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* {@inheritdoc}
|
* Set font. Examples:
|
||||||
|
* 'arialunicid0-chinese-simplified'
|
||||||
|
* 'arialunicid0-chinese-traditional'
|
||||||
|
* 'arialunicid0-korean'
|
||||||
|
* 'arialunicid0-japanese'.
|
||||||
|
*
|
||||||
|
* @param string $fontName
|
||||||
*/
|
*/
|
||||||
public function save($pFilename)
|
public function setFont($fontName)
|
||||||
{
|
{
|
||||||
$this->renderer->save($pFilename);
|
$this->font = $fontName;
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get Paper Size.
|
||||||
|
*
|
||||||
|
* @return int
|
||||||
|
*/
|
||||||
|
public function getPaperSize()
|
||||||
|
{
|
||||||
|
return $this->paperSize;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set Paper Size.
|
||||||
|
*
|
||||||
|
* @param string $pValue Paper size see PageSetup::PAPERSIZE_*
|
||||||
|
*
|
||||||
|
* @return self
|
||||||
|
*/
|
||||||
|
public function setPaperSize($pValue)
|
||||||
|
{
|
||||||
|
$this->paperSize = $pValue;
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get Orientation.
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getOrientation()
|
||||||
|
{
|
||||||
|
return $this->orientation;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set Orientation.
|
||||||
|
*
|
||||||
|
* @param string $pValue Page orientation see PageSetup::ORIENTATION_*
|
||||||
|
*
|
||||||
|
* @return self
|
||||||
|
*/
|
||||||
|
public function setOrientation($pValue)
|
||||||
|
{
|
||||||
|
$this->orientation = $pValue;
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get temporary storage directory.
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getTempDir()
|
||||||
|
{
|
||||||
|
return $this->tempDir;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set temporary storage directory.
|
||||||
|
*
|
||||||
|
* @param string $pValue Temporary storage directory
|
||||||
|
*
|
||||||
|
* @throws WriterException when directory does not exist
|
||||||
|
*
|
||||||
|
* @return self
|
||||||
|
*/
|
||||||
|
public function setTempDir($pValue)
|
||||||
|
{
|
||||||
|
if (is_dir($pValue)) {
|
||||||
|
$this->tempDir = $pValue;
|
||||||
|
} else {
|
||||||
|
throw new WriterException("Directory does not exist: $pValue");
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Save Spreadsheet to PDF file, pre-save.
|
||||||
|
*
|
||||||
|
* @param string $pFilename Name of the file to save as
|
||||||
|
*
|
||||||
|
* @throws WriterException
|
||||||
|
*/
|
||||||
|
protected function prepareForSave($pFilename)
|
||||||
|
{
|
||||||
|
// garbage collect
|
||||||
|
$this->spreadsheet->garbageCollect();
|
||||||
|
|
||||||
|
$this->saveArrayReturnType = Calculation::getArrayReturnType();
|
||||||
|
Calculation::setArrayReturnType(Calculation::RETURN_ARRAY_AS_VALUE);
|
||||||
|
|
||||||
|
// Open file
|
||||||
|
$fileHandle = fopen($pFilename, 'w');
|
||||||
|
if ($fileHandle === false) {
|
||||||
|
throw new WriterException("Could not open file $pFilename for writing.");
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set PDF
|
||||||
|
$this->isPdf = true;
|
||||||
|
// Build CSS
|
||||||
|
$this->buildCSS(true);
|
||||||
|
|
||||||
|
return $fileHandle;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Save PhpSpreadsheet to PDF file, post-save.
|
||||||
|
*
|
||||||
|
* @param resource $fileHandle
|
||||||
|
*
|
||||||
|
* @throws WriterException
|
||||||
|
*/
|
||||||
|
protected function restoreStateAfterSave($fileHandle)
|
||||||
|
{
|
||||||
|
// Close file
|
||||||
|
fclose($fileHandle);
|
||||||
|
|
||||||
|
Calculation::setArrayReturnType($this->saveArrayReturnType);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,282 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
namespace PhpOffice\PhpSpreadsheet\Writer\Pdf;
|
|
||||||
|
|
||||||
use PhpOffice\PhpSpreadsheet\Calculation;
|
|
||||||
use PhpOffice\PhpSpreadsheet\Shared\File;
|
|
||||||
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
|
||||||
use PhpOffice\PhpSpreadsheet\Worksheet\PageSetup;
|
|
||||||
use PhpOffice\PhpSpreadsheet\Writer\Exception as WriterException;
|
|
||||||
use PhpOffice\PhpSpreadsheet\Writer\Html;
|
|
||||||
|
|
||||||
abstract class Core extends Html
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* Temporary storage directory.
|
|
||||||
*
|
|
||||||
* @var string
|
|
||||||
*/
|
|
||||||
protected $tempDir = '';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Font.
|
|
||||||
*
|
|
||||||
* @var string
|
|
||||||
*/
|
|
||||||
protected $font = 'freesans';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Orientation (Over-ride).
|
|
||||||
*
|
|
||||||
* @var string
|
|
||||||
*/
|
|
||||||
protected $orientation;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Paper size (Over-ride).
|
|
||||||
*
|
|
||||||
* @var int
|
|
||||||
*/
|
|
||||||
protected $paperSize;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Temporary storage for Save Array Return type.
|
|
||||||
*
|
|
||||||
* @var string
|
|
||||||
*/
|
|
||||||
private $saveArrayReturnType;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Paper Sizes xRef List.
|
|
||||||
*
|
|
||||||
* @var array
|
|
||||||
*/
|
|
||||||
protected static $paperSizes = [
|
|
||||||
PageSetup::PAPERSIZE_LETTER => 'LETTER', // (8.5 in. by 11 in.)
|
|
||||||
PageSetup::PAPERSIZE_LETTER_SMALL => 'LETTER', // (8.5 in. by 11 in.)
|
|
||||||
PageSetup::PAPERSIZE_TABLOID => [792.00, 1224.00], // (11 in. by 17 in.)
|
|
||||||
PageSetup::PAPERSIZE_LEDGER => [1224.00, 792.00], // (17 in. by 11 in.)
|
|
||||||
PageSetup::PAPERSIZE_LEGAL => 'LEGAL', // (8.5 in. by 14 in.)
|
|
||||||
PageSetup::PAPERSIZE_STATEMENT => [396.00, 612.00], // (5.5 in. by 8.5 in.)
|
|
||||||
PageSetup::PAPERSIZE_EXECUTIVE => 'EXECUTIVE', // (7.25 in. by 10.5 in.)
|
|
||||||
PageSetup::PAPERSIZE_A3 => 'A3', // (297 mm by 420 mm)
|
|
||||||
PageSetup::PAPERSIZE_A4 => 'A4', // (210 mm by 297 mm)
|
|
||||||
PageSetup::PAPERSIZE_A4_SMALL => 'A4', // (210 mm by 297 mm)
|
|
||||||
PageSetup::PAPERSIZE_A5 => 'A5', // (148 mm by 210 mm)
|
|
||||||
PageSetup::PAPERSIZE_B4 => 'B4', // (250 mm by 353 mm)
|
|
||||||
PageSetup::PAPERSIZE_B5 => 'B5', // (176 mm by 250 mm)
|
|
||||||
PageSetup::PAPERSIZE_FOLIO => 'FOLIO', // (8.5 in. by 13 in.)
|
|
||||||
PageSetup::PAPERSIZE_QUARTO => [609.45, 779.53], // (215 mm by 275 mm)
|
|
||||||
PageSetup::PAPERSIZE_STANDARD_1 => [720.00, 1008.00], // (10 in. by 14 in.)
|
|
||||||
PageSetup::PAPERSIZE_STANDARD_2 => [792.00, 1224.00], // (11 in. by 17 in.)
|
|
||||||
PageSetup::PAPERSIZE_NOTE => 'LETTER', // (8.5 in. by 11 in.)
|
|
||||||
PageSetup::PAPERSIZE_NO9_ENVELOPE => [279.00, 639.00], // (3.875 in. by 8.875 in.)
|
|
||||||
PageSetup::PAPERSIZE_NO10_ENVELOPE => [297.00, 684.00], // (4.125 in. by 9.5 in.)
|
|
||||||
PageSetup::PAPERSIZE_NO11_ENVELOPE => [324.00, 747.00], // (4.5 in. by 10.375 in.)
|
|
||||||
PageSetup::PAPERSIZE_NO12_ENVELOPE => [342.00, 792.00], // (4.75 in. by 11 in.)
|
|
||||||
PageSetup::PAPERSIZE_NO14_ENVELOPE => [360.00, 828.00], // (5 in. by 11.5 in.)
|
|
||||||
PageSetup::PAPERSIZE_C => [1224.00, 1584.00], // (17 in. by 22 in.)
|
|
||||||
PageSetup::PAPERSIZE_D => [1584.00, 2448.00], // (22 in. by 34 in.)
|
|
||||||
PageSetup::PAPERSIZE_E => [2448.00, 3168.00], // (34 in. by 44 in.)
|
|
||||||
PageSetup::PAPERSIZE_DL_ENVELOPE => [311.81, 623.62], // (110 mm by 220 mm)
|
|
||||||
PageSetup::PAPERSIZE_C5_ENVELOPE => 'C5', // (162 mm by 229 mm)
|
|
||||||
PageSetup::PAPERSIZE_C3_ENVELOPE => 'C3', // (324 mm by 458 mm)
|
|
||||||
PageSetup::PAPERSIZE_C4_ENVELOPE => 'C4', // (229 mm by 324 mm)
|
|
||||||
PageSetup::PAPERSIZE_C6_ENVELOPE => 'C6', // (114 mm by 162 mm)
|
|
||||||
PageSetup::PAPERSIZE_C65_ENVELOPE => [323.15, 649.13], // (114 mm by 229 mm)
|
|
||||||
PageSetup::PAPERSIZE_B4_ENVELOPE => 'B4', // (250 mm by 353 mm)
|
|
||||||
PageSetup::PAPERSIZE_B5_ENVELOPE => 'B5', // (176 mm by 250 mm)
|
|
||||||
PageSetup::PAPERSIZE_B6_ENVELOPE => [498.90, 354.33], // (176 mm by 125 mm)
|
|
||||||
PageSetup::PAPERSIZE_ITALY_ENVELOPE => [311.81, 651.97], // (110 mm by 230 mm)
|
|
||||||
PageSetup::PAPERSIZE_MONARCH_ENVELOPE => [279.00, 540.00], // (3.875 in. by 7.5 in.)
|
|
||||||
PageSetup::PAPERSIZE_6_3_4_ENVELOPE => [261.00, 468.00], // (3.625 in. by 6.5 in.)
|
|
||||||
PageSetup::PAPERSIZE_US_STANDARD_FANFOLD => [1071.00, 792.00], // (14.875 in. by 11 in.)
|
|
||||||
PageSetup::PAPERSIZE_GERMAN_STANDARD_FANFOLD => [612.00, 864.00], // (8.5 in. by 12 in.)
|
|
||||||
PageSetup::PAPERSIZE_GERMAN_LEGAL_FANFOLD => 'FOLIO', // (8.5 in. by 13 in.)
|
|
||||||
PageSetup::PAPERSIZE_ISO_B4 => 'B4', // (250 mm by 353 mm)
|
|
||||||
PageSetup::PAPERSIZE_JAPANESE_DOUBLE_POSTCARD => [566.93, 419.53], // (200 mm by 148 mm)
|
|
||||||
PageSetup::PAPERSIZE_STANDARD_PAPER_1 => [648.00, 792.00], // (9 in. by 11 in.)
|
|
||||||
PageSetup::PAPERSIZE_STANDARD_PAPER_2 => [720.00, 792.00], // (10 in. by 11 in.)
|
|
||||||
PageSetup::PAPERSIZE_STANDARD_PAPER_3 => [1080.00, 792.00], // (15 in. by 11 in.)
|
|
||||||
PageSetup::PAPERSIZE_INVITE_ENVELOPE => [623.62, 623.62], // (220 mm by 220 mm)
|
|
||||||
PageSetup::PAPERSIZE_LETTER_EXTRA_PAPER => [667.80, 864.00], // (9.275 in. by 12 in.)
|
|
||||||
PageSetup::PAPERSIZE_LEGAL_EXTRA_PAPER => [667.80, 1080.00], // (9.275 in. by 15 in.)
|
|
||||||
PageSetup::PAPERSIZE_TABLOID_EXTRA_PAPER => [841.68, 1296.00], // (11.69 in. by 18 in.)
|
|
||||||
PageSetup::PAPERSIZE_A4_EXTRA_PAPER => [668.98, 912.76], // (236 mm by 322 mm)
|
|
||||||
PageSetup::PAPERSIZE_LETTER_TRANSVERSE_PAPER => [595.80, 792.00], // (8.275 in. by 11 in.)
|
|
||||||
PageSetup::PAPERSIZE_A4_TRANSVERSE_PAPER => 'A4', // (210 mm by 297 mm)
|
|
||||||
PageSetup::PAPERSIZE_LETTER_EXTRA_TRANSVERSE_PAPER => [667.80, 864.00], // (9.275 in. by 12 in.)
|
|
||||||
PageSetup::PAPERSIZE_SUPERA_SUPERA_A4_PAPER => [643.46, 1009.13], // (227 mm by 356 mm)
|
|
||||||
PageSetup::PAPERSIZE_SUPERB_SUPERB_A3_PAPER => [864.57, 1380.47], // (305 mm by 487 mm)
|
|
||||||
PageSetup::PAPERSIZE_LETTER_PLUS_PAPER => [612.00, 913.68], // (8.5 in. by 12.69 in.)
|
|
||||||
PageSetup::PAPERSIZE_A4_PLUS_PAPER => [595.28, 935.43], // (210 mm by 330 mm)
|
|
||||||
PageSetup::PAPERSIZE_A5_TRANSVERSE_PAPER => 'A5', // (148 mm by 210 mm)
|
|
||||||
PageSetup::PAPERSIZE_JIS_B5_TRANSVERSE_PAPER => [515.91, 728.50], // (182 mm by 257 mm)
|
|
||||||
PageSetup::PAPERSIZE_A3_EXTRA_PAPER => [912.76, 1261.42], // (322 mm by 445 mm)
|
|
||||||
PageSetup::PAPERSIZE_A5_EXTRA_PAPER => [493.23, 666.14], // (174 mm by 235 mm)
|
|
||||||
PageSetup::PAPERSIZE_ISO_B5_EXTRA_PAPER => [569.76, 782.36], // (201 mm by 276 mm)
|
|
||||||
PageSetup::PAPERSIZE_A2_PAPER => 'A2', // (420 mm by 594 mm)
|
|
||||||
PageSetup::PAPERSIZE_A3_TRANSVERSE_PAPER => 'A3', // (297 mm by 420 mm)
|
|
||||||
PageSetup::PAPERSIZE_A3_EXTRA_TRANSVERSE_PAPER => [912.76, 1261.42], // (322 mm by 445 mm)
|
|
||||||
];
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Create a new PDF Writer instance.
|
|
||||||
*
|
|
||||||
* @param Spreadsheet $spreadsheet Spreadsheet object
|
|
||||||
*/
|
|
||||||
public function __construct(Spreadsheet $spreadsheet)
|
|
||||||
{
|
|
||||||
parent::__construct($spreadsheet);
|
|
||||||
$this->setUseInlineCss(true);
|
|
||||||
$this->tempDir = File::sysGetTempDir();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get Font.
|
|
||||||
*
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
public function getFont()
|
|
||||||
{
|
|
||||||
return $this->font;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Set font. Examples:
|
|
||||||
* 'arialunicid0-chinese-simplified'
|
|
||||||
* 'arialunicid0-chinese-traditional'
|
|
||||||
* 'arialunicid0-korean'
|
|
||||||
* 'arialunicid0-japanese'.
|
|
||||||
*
|
|
||||||
* @param string $fontName
|
|
||||||
*/
|
|
||||||
public function setFont($fontName)
|
|
||||||
{
|
|
||||||
$this->font = $fontName;
|
|
||||||
|
|
||||||
return $this;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get Paper Size.
|
|
||||||
*
|
|
||||||
* @return int
|
|
||||||
*/
|
|
||||||
public function getPaperSize()
|
|
||||||
{
|
|
||||||
return $this->paperSize;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Set Paper Size.
|
|
||||||
*
|
|
||||||
* @param string $pValue Paper size see PageSetup::PAPERSIZE_*
|
|
||||||
*
|
|
||||||
* @return self
|
|
||||||
*/
|
|
||||||
public function setPaperSize($pValue)
|
|
||||||
{
|
|
||||||
$this->paperSize = $pValue;
|
|
||||||
|
|
||||||
return $this;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get Orientation.
|
|
||||||
*
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
public function getOrientation()
|
|
||||||
{
|
|
||||||
return $this->orientation;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Set Orientation.
|
|
||||||
*
|
|
||||||
* @param string $pValue Page orientation see PageSetup::ORIENTATION_*
|
|
||||||
*
|
|
||||||
* @return self
|
|
||||||
*/
|
|
||||||
public function setOrientation($pValue)
|
|
||||||
{
|
|
||||||
$this->orientation = $pValue;
|
|
||||||
|
|
||||||
return $this;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get temporary storage directory.
|
|
||||||
*
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
public function getTempDir()
|
|
||||||
{
|
|
||||||
return $this->tempDir;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Set temporary storage directory.
|
|
||||||
*
|
|
||||||
* @param string $pValue Temporary storage directory
|
|
||||||
*
|
|
||||||
* @throws WriterException when directory does not exist
|
|
||||||
*
|
|
||||||
* @return self
|
|
||||||
*/
|
|
||||||
public function setTempDir($pValue)
|
|
||||||
{
|
|
||||||
if (is_dir($pValue)) {
|
|
||||||
$this->tempDir = $pValue;
|
|
||||||
} else {
|
|
||||||
throw new WriterException("Directory does not exist: $pValue");
|
|
||||||
}
|
|
||||||
|
|
||||||
return $this;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Save Spreadsheet to PDF file, pre-save.
|
|
||||||
*
|
|
||||||
* @param string $pFilename Name of the file to save as
|
|
||||||
*
|
|
||||||
* @throws WriterException
|
|
||||||
*/
|
|
||||||
protected function prepareForSave($pFilename)
|
|
||||||
{
|
|
||||||
// garbage collect
|
|
||||||
$this->spreadsheet->garbageCollect();
|
|
||||||
|
|
||||||
$this->saveArrayReturnType = Calculation::getArrayReturnType();
|
|
||||||
Calculation::setArrayReturnType(Calculation::RETURN_ARRAY_AS_VALUE);
|
|
||||||
|
|
||||||
// Open file
|
|
||||||
$fileHandle = fopen($pFilename, 'w');
|
|
||||||
if ($fileHandle === false) {
|
|
||||||
throw new WriterException("Could not open file $pFilename for writing.");
|
|
||||||
}
|
|
||||||
|
|
||||||
// Set PDF
|
|
||||||
$this->isPdf = true;
|
|
||||||
// Build CSS
|
|
||||||
$this->buildCSS(true);
|
|
||||||
|
|
||||||
return $fileHandle;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Save PhpSpreadsheet to PDF file, post-save.
|
|
||||||
*
|
|
||||||
* @param resource $fileHandle
|
|
||||||
*
|
|
||||||
* @throws WriterException
|
|
||||||
*/
|
|
||||||
protected function restoreStateAfterSave($fileHandle)
|
|
||||||
{
|
|
||||||
// Close file
|
|
||||||
fclose($fileHandle);
|
|
||||||
|
|
||||||
Calculation::setArrayReturnType($this->saveArrayReturnType);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -4,8 +4,9 @@ namespace PhpOffice\PhpSpreadsheet\Writer\Pdf;
|
||||||
|
|
||||||
use PhpOffice\PhpSpreadsheet\Worksheet\PageSetup;
|
use PhpOffice\PhpSpreadsheet\Worksheet\PageSetup;
|
||||||
use PhpOffice\PhpSpreadsheet\Writer\IWriter;
|
use PhpOffice\PhpSpreadsheet\Writer\IWriter;
|
||||||
|
use PhpOffice\PhpSpreadsheet\Writer\Pdf;
|
||||||
|
|
||||||
class DomPDF extends Core implements IWriter
|
class DomPDF extends Pdf implements IWriter
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* Save Spreadsheet to file.
|
* Save Spreadsheet to file.
|
||||||
|
|
|
@ -5,8 +5,9 @@ namespace PhpOffice\PhpSpreadsheet\Writer\Pdf;
|
||||||
use PhpOffice\PhpSpreadsheet\Exception as PhpSpreadsheetException;
|
use PhpOffice\PhpSpreadsheet\Exception as PhpSpreadsheetException;
|
||||||
use PhpOffice\PhpSpreadsheet\Worksheet\PageSetup;
|
use PhpOffice\PhpSpreadsheet\Worksheet\PageSetup;
|
||||||
use PhpOffice\PhpSpreadsheet\Writer\IWriter;
|
use PhpOffice\PhpSpreadsheet\Writer\IWriter;
|
||||||
|
use PhpOffice\PhpSpreadsheet\Writer\Pdf;
|
||||||
|
|
||||||
class MPDF extends Core implements IWriter
|
class MPDF extends Pdf implements IWriter
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* Save Spreadsheet to file.
|
* Save Spreadsheet to file.
|
||||||
|
|
|
@ -4,8 +4,9 @@ namespace PhpOffice\PhpSpreadsheet\Writer\Pdf;
|
||||||
|
|
||||||
use PhpOffice\PhpSpreadsheet\Worksheet\PageSetup;
|
use PhpOffice\PhpSpreadsheet\Worksheet\PageSetup;
|
||||||
use PhpOffice\PhpSpreadsheet\Writer\IWriter;
|
use PhpOffice\PhpSpreadsheet\Writer\IWriter;
|
||||||
|
use PhpOffice\PhpSpreadsheet\Writer\Pdf;
|
||||||
|
|
||||||
class TcPDF extends Core implements IWriter
|
class TcPDF extends Pdf implements IWriter
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* Save Spreadsheet to file.
|
* Save Spreadsheet to file.
|
||||||
|
|
Loading…
Reference in New Issue