Skip to content

Commit 25ff914

Browse files
committed
Simplify IOFactory to rely on autoloading
1 parent 3e6a419 commit 25ff914

File tree

18 files changed

+328
-262
lines changed

18 files changed

+328
-262
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/).
2727
### BREAKING CHANGE
2828

2929
- Standardization of array keys used for style, see the [migration guide](./docs/topics/migration-from-PHPExcel.md).
30+
- Easier usage of PDF writers, and other custom readers and writers, see the [migration guide](./docs/topics/migration-from-PHPExcel.md).
3031

3132
## [1.0.0-beta] - 2017-08-17
3233

docs/index.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ spreadsheet file formats, like Excel and LibreOffice Calc.
1919
|HTML |||
2020
|SYLK || |
2121
|CSV |||
22-
|PDF (using either the tcPDF, DomPDF or mPDF libraries, which need to be installed separately)| ||
22+
|PDF (using either the TCPDF, Dompdf or mPDF libraries, which need to be installed separately)| ||
2323

2424
# Getting started
2525

docs/topics/migration-from-PHPExcel.md

Lines changed: 47 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,28 @@ Before | After
4343
`'PDF'` | `'Pdf'`
4444
`'SYLK'` | `'Slk'`
4545

46+
### Simplified IOFactory
47+
48+
The following methods :
49+
50+
- `PHPExcel_IOFactory::getSearchLocations()`
51+
- `PHPExcel_IOFactory::setSearchLocations()`
52+
- `PHPExcel_IOFactory::addSearchLocation()`
53+
54+
were replaced by `IOFactory::registerReader()` and `IOFactory::registerWriter()`. That means
55+
IOFactory now relies on classes autoloading.
56+
57+
Before:
58+
59+
```php
60+
\PHPExcel_IOFactory::addSearchLocation($type, $location, $classname);
61+
```
62+
63+
After:
64+
65+
```php
66+
\PhpOffice\PhpSpreadsheet\IOFactory::registerReader($type, $classname);
67+
```
4668

4769
### Removed deprecated things
4870

@@ -148,15 +170,33 @@ autoloading mechanism.
148170

149171
### Writing PDF
150172

151-
`PHPExcel_Settings::getPdfRenderer()` and `PHPExcel_Settings::setPdfRenderer()`
152-
were removed. `PHPExcel_Settings::getPdfRendererName()` and
153-
`PHPExcel_Settings::setPdfRendererName()` were renamed as `setDefaultPdfWriter()`
154-
and `setDefaultPdfWriter()` respectively. And PDF libraries must be installed via
155-
composer. So the only thing to do is to specify a default writer class like so:
173+
PDF libraries must be installed via composer. And the following methods were removed
174+
and are replaced by `IOFactory::registerWriter()` instead:
175+
176+
- `PHPExcel_Settings::getPdfRenderer()`
177+
- `PHPExcel_Settings::setPdfRenderer()`
178+
- `PHPExcel_Settings::getPdfRendererName()`
179+
- `PHPExcel_Settings::setPdfRendererName()` were renamed as `setDefaultPdfWriter()`
180+
181+
Before:
156182

157183
```php
158-
$rendererName = \PhpOffice\PhpSpreadsheet\Writer\Pdf\MPDF::class;
159-
\PhpOffice\PhpSpreadsheet\Settings::setDefaultPdfWriter($rendererName);
184+
\PHPExcel_Settings::setPdfRendererName(PHPExcel_Settings::PDF_RENDERER_MPDF);
185+
\PHPExcel_Settings::setPdfRenderer($somePath);
186+
$writer = \PHPExcel_IOFactory::createWriter($spreadsheet, 'PDF');
187+
```
188+
189+
After:
190+
191+
```php
192+
$writer = \PhpOffice\PhpSpreadsheet\IOFactory::createWriter($spreadsheet, 'Mpdf');
193+
194+
// Or alternatively
195+
\PhpOffice\PhpSpreadsheet\IOFactory::registerWriter('Pdf', \PhpOffice\PhpSpreadsheet\Writer\Pdf\Mpdf::class);
196+
$writer = \PhpOffice\PhpSpreadsheet\IOFactory::createWriter($spreadsheet, 'Pdf');
197+
198+
// Or alternatively
199+
$writer = new \PhpOffice\PhpSpreadsheet\Writer\Pdf\Mpdf($spreadsheet);
160200
```
161201

162202
### PclZip and ZipArchive

docs/topics/reading-and-writing-to-file.md

Lines changed: 19 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -739,37 +739,44 @@ regarding to styling cells, number formatting, ...
739739
### \PhpOffice\PhpSpreadsheet\Writer\Pdf
740740
741741
PhpSpreadsheet’s PDF Writer is a wrapper for a 3rd-Party PDF Rendering
742-
library such as tcPDF, mPDF or DomPDF. You must now install a PDF
742+
library such as TCPDF, mPDF or Dompdf. You must now install a PDF
743743
rendering library yourself; but PhpSpreadsheet will work with a number
744744
of different libraries.
745745
746746
Currently, the following libraries are supported:
747747
748748
Library | Downloadable from | PhpSpreadsheet writer
749749
--------|-------------------------------------|----------------------
750-
tcPDF | https://github.com/tecnickcom/tcpdf | TcPdf
751-
mPDF | https://github.com/mpdf/mpdf | MPDF
752-
domPDF | https://github.com/dompdf/dompdf | DomPDF
750+
TCPDF | https://github.com/tecnickcom/tcpdf | Tcpdf
751+
mPDF | https://github.com/mpdf/mpdf | Mpdf
752+
Dompdf | https://github.com/dompdf/dompdf | Dompdf
753753
754754
The different libraries have different strengths and weaknesses. Some
755755
generate better formatted output than others, some are faster or use
756756
less memory than others, while some generate smaller .pdf files. It is
757757
the developers choice which one they wish to use, appropriate to their
758758
own circumstances.
759759
760-
Before instantiating a Writer via `IOFactory` to generate PDF output,
761-
you will need to indicate which writer you are using:
760+
You can instantiate a writer with its specific name, like so:
762761
763762
``` php
764-
$rendererName = \PhpOffice\PhpSpreadsheet\Writer\Pdf\MPDF::class;
765-
\PhpOffice\PhpSpreadsheet\Settings::setDefaultPdfWriter($rendererName);
766-
$writer = \PhpOffice\PhpSpreadsheet\IOFactory\IOFactory::createWriter($spreadsheet, 'Pdf');
763+
$writer = \PhpOffice\PhpSpreadsheet\IOFactory::createWriter($spreadsheet, 'Mpdf');
764+
```
765+
766+
Or you can register which writer you are using with a more generic name,
767+
so you don't need to remember which library you chose, only that you want
768+
to write PDF files:
769+
770+
``` php
771+
$class = \PhpOffice\PhpSpreadsheet\Writer\Pdf\Mpdf::class;
772+
\PhpOffice\PhpSpreadsheet\IOFactory::registerWriter('Pdf', $class);
773+
$writer = \PhpOffice\PhpSpreadsheet\IOFactory::createWriter($spreadsheet, 'Pdf');
767774
```
768775
769776
Or you can instantiate directly the writer of your choice like so:
770777
771778
``` php
772-
$writer = \PhpOffice\PhpSpreadsheet\Writer\Pdf\MPDF($spreadsheet);
779+
$writer = \PhpOffice\PhpSpreadsheet\Writer\Pdf\Mpdf($spreadsheet);
773780
```
774781
775782
#### Writing a spreadsheet
@@ -778,7 +785,7 @@ Once you have identified the Renderer that you wish to use for PDF
778785
generation, you can write a .pdf file using the following code:
779786
780787
``` php
781-
$writer = new \PhpOffice\PhpSpreadsheet\Writer\Pdf\MPDF($spreadsheet);
788+
$writer = new \PhpOffice\PhpSpreadsheet\Writer\Pdf\Mpdf($spreadsheet);
782789
$writer->save("05featuredemo.pdf");
783790
```
784791
@@ -810,7 +817,7 @@ This can be slow on large spreadsheets, and maybe even unwanted. You can
810817
however disable formula pre-calculation:
811818
812819
``` php
813-
$writer = new \PhpOffice\PhpSpreadsheet\Writer\Pdf\MPDF($spreadsheet);
820+
$writer = new \PhpOffice\PhpSpreadsheet\Writer\Pdf\Mpdf($spreadsheet);
814821
$writer->setPreCalculateFormulas(false);
815822
816823
$writer->save("05featuredemo.pdf");

samples/Basic/01_Simple_download_pdf.php

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
use PhpOffice\PhpSpreadsheet\Helper\Sample;
44
use PhpOffice\PhpSpreadsheet\IOFactory;
5-
use PhpOffice\PhpSpreadsheet\Settings;
65
use PhpOffice\PhpSpreadsheet\Spreadsheet;
76

87
require_once __DIR__ . '/../../src/Bootstrap.php';
@@ -14,10 +13,6 @@
1413
return;
1514
}
1615

17-
// Change these values to select the Rendering library that you wish to use
18-
// and its directory location on your server
19-
$rendererName = \PhpOffice\PhpSpreadsheet\Writer\Pdf\MPDF::class;
20-
2116
// Create new Spreadsheet object
2217
$spreadsheet = new Spreadsheet();
2318

@@ -49,7 +44,7 @@
4944
// Set active sheet index to the first sheet, so Excel opens this as the first sheet
5045
$spreadsheet->setActiveSheetIndex(0);
5146

52-
Settings::setDefaultPdfWriter($rendererName);
47+
IOFactory::registerWriter('Pdf', \PhpOffice\PhpSpreadsheet\Writer\Pdf\Mpdf::class);
5348

5449
// Redirect output to a client’s web browser (PDF)
5550
header('Content-Type: application/pdf');

samples/Basic/26_Utf8.php

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,9 @@
11
<?php
22

33
use PhpOffice\PhpSpreadsheet\IOFactory;
4-
use PhpOffice\PhpSpreadsheet\Settings;
54

65
require __DIR__ . '/../Header.php';
76

8-
// Change these values to select the PDF Rendering library that you wish to use
9-
// and its directory location on your server
10-
$rendererName = \PhpOffice\PhpSpreadsheet\Writer\Pdf\DomPDF::class;
11-
127
// Read from Xlsx (.xlsx) template
138
$helper->log('Load Xlsx template file');
149
$reader = IOFactory::createReader('Xlsx');
@@ -19,7 +14,7 @@
1914

2015
// Export to PDF (.pdf)
2116
$helper->log('Write to PDF format');
22-
Settings::setDefaultPdfWriter($rendererName);
17+
IOFactory::registerWriter('Pdf', \PhpOffice\PhpSpreadsheet\Writer\Pdf\Dompdf::class);
2318
$helper->write($spreadsheet, __FILE__, ['Pdf']);
2419

2520
// Remove first two rows with field headers before exporting to CSV

samples/Chart/32_Chart_read_write_PDF.php

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,7 @@
55

66
require __DIR__ . '/../Header.php';
77

8-
// Change these values to select the Rendering library that you wish to use
9-
// for PDF files, and its directory location on your server
10-
$rendererName = \PhpOffice\PhpSpreadsheet\Writer\Pdf\MPDF::class;
11-
12-
Settings::setDefaultPdfWriter($rendererName);
8+
IOFactory::registerWriter('Pdf', \PhpOffice\PhpSpreadsheet\Writer\Pdf\Mpdf::class);
139

1410
// Change these values to select the Rendering library that you wish to use
1511
// for Chart images, and its directory location on your server

samples/Pdf/21_Pdf_Domdf.php

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?php
22

3-
use PhpOffice\PhpSpreadsheet\Settings;
3+
use PhpOffice\PhpSpreadsheet\IOFactory;
44
use PhpOffice\PhpSpreadsheet\Worksheet\PageSetup;
55

66
require __DIR__ . '/../Header.php';
@@ -12,9 +12,9 @@
1212
$helper->log('Set orientation to landscape');
1313
$spreadsheet->getActiveSheet()->getPageSetup()->setOrientation(PageSetup::ORIENTATION_LANDSCAPE);
1414

15-
$rendererName = \PhpOffice\PhpSpreadsheet\Writer\Pdf\DomPDF::class;
16-
$helper->log("Write to PDF format using {$rendererName}");
17-
Settings::setDefaultPdfWriter($rendererName);
15+
$className = \PhpOffice\PhpSpreadsheet\Writer\Pdf\Dompdf::class;
16+
$helper->log("Write to PDF format using {$className}");
17+
IOFactory::registerWriter('Pdf', $className);
1818

1919
// Save
2020
$helper->write($spreadsheet, __FILE__, ['Pdf']);

samples/Pdf/21_Pdf_TCPDF.php

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?php
22

3-
use PhpOffice\PhpSpreadsheet\Settings;
3+
use PhpOffice\PhpSpreadsheet\IOFactory;
44
use PhpOffice\PhpSpreadsheet\Worksheet\PageSetup;
55

66
require __DIR__ . '/../Header.php';
@@ -12,9 +12,9 @@
1212
$helper->log('Set orientation to landscape');
1313
$spreadsheet->getActiveSheet()->getPageSetup()->setOrientation(PageSetup::ORIENTATION_LANDSCAPE);
1414

15-
$rendererName = \PhpOffice\PhpSpreadsheet\Writer\Pdf\TcPDF::class;
16-
$helper->log("Write to PDF format using {$rendererName}");
17-
Settings::setDefaultPdfWriter($rendererName);
15+
$className = \PhpOffice\PhpSpreadsheet\Writer\Pdf\Tcpdf::class;
16+
$helper->log("Write to PDF format using {$className}");
17+
IOFactory::registerWriter('Pdf', $className);
1818

1919
// Save
2020
$helper->write($spreadsheet, __FILE__, ['Pdf']);

samples/Pdf/21_Pdf_mPDF.php

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?php
22

3-
use PhpOffice\PhpSpreadsheet\Settings;
3+
use PhpOffice\PhpSpreadsheet\IOFactory;
44
use PhpOffice\PhpSpreadsheet\Worksheet\PageSetup;
55

66
require __DIR__ . '/../Header.php';
@@ -12,9 +12,9 @@
1212
$helper->log('Set orientation to landscape');
1313
$spreadsheet->getActiveSheet()->getPageSetup()->setOrientation(PageSetup::ORIENTATION_LANDSCAPE);
1414

15-
$rendererName = \PhpOffice\PhpSpreadsheet\Writer\Pdf\MPDF::class;
16-
$helper->log("Write to PDF format using {$rendererName}");
17-
Settings::setDefaultPdfWriter($rendererName);
15+
$className = \PhpOffice\PhpSpreadsheet\Writer\Pdf\Mpdf::class;
16+
$helper->log("Write to PDF format using {$className}");
17+
IOFactory::registerWriter('Pdf', $className);
1818

1919
// Save
2020
$helper->write($spreadsheet, __FILE__, ['Pdf']);

0 commit comments

Comments
 (0)