From OpenEMR Project Wiki
OpenEMR 5.0.1 and above
In process of removing this and migrating to mPDF.
OpenEMR 4.2.2 to OpenEMR 5.0.0
The html2pdf library and FPDI library was updated to support PHP7 per below steps:
1. Removing all old files
2. Downloading HTML2PDF 4.5.0 from:
- https://github.com/spipu/html2pdf/releases (composer package)
3. Running composer command "composer install"
4. Requiring "setasign/fpdi": "1.6.*" for latest FPDI package
5. Removing the examples directory from the html2pdf directory.
6. Modifying library/html2pdf/_class/myPdf.class.php so that HTML2PDF_myPdf extends FPDI instead of TCPDF.
- Note that FPDI extends TCPDF.
7. Modifying interface/patient_file/report/custom_report.php line # 52 to require html2pdf/vendor/autoload.php rather html2pdf.class.php
8. Passing two new parameters "unicode and encoding" to HTML2PDF constructor in interface/patient_file/report/custom_report.php on line 57 and 58 respectively
9. Modifying library/html2pdf/vendor/setasign/fpdi/fpdi_bridge.php class removing second parameter "false" of "class_exists" method because TCPDF is autoloading
10. Removed examples directory from the TCPDF package.
11. Modified HTML2PDF package with fix to support RTL languages.
- (Note that this fix has been accepted into the development branch of html2pdf 4.5)
At this point the HTML2PDF(version 4.5.0) with TCPDF(version 6.2.12) and FPDI(version 1.6.1) is installed and working.
Here are the commits that did above steps:
OpenEMR 4.2.1 and below
HTML2PDF and FPDI are classes that allow PDFs to be created from existing HTML and existing PDF files, respectively. They are separate projects but were integrated for use with OpenEMR. They are contained within OpenEMR's library/html2pdf directory, with the following steps used to put them there:
1. Downloading HTML2PDF 3.31 from https://sourceforge.net/projects/html2fpdf/ and installing it as the library/html2pdf directory.
2. Downloading FPDI 1.4.2 and FPDF_TPL 1.2 from http://www.setasign.de/products/pdf-php-solutions/fpdi/downloads/ and installing them into the library/html2pdf/fpdi directory.
3. Removing the examples directory from the html2pdf directory.
4. Modifying library/html2pdf/fpdi/fpdf_tpl.php so that FPDF_TPL extends MyPDF instead of FPDF. Note that FPDI extends FPDF_TPL.
5. Modifying library/html2pdf/html2pdf.class.php to create its member pdf object as an instance of FPDI instead of MyPDF.
At this point the HTML2PDF class now includes the FPDI features.
Currently HTML2PDF is used for generating PDF versions of patient reports. ob_start() combined with ob_get_clean() captures the output that would otherwise be sent to the browser. When a PDF document is encountered or the end of script is reached, the HTML up to that point is captured and fed to HTML2PDF in this way.
Then for a PDF the features of the FPDI class (integrated into HTML2PDF) come into play, as it provides the ability to insert pages from an existing PDF file into the PDF that you are building. What's really nice is that the output PDF is built in a single pass, without having to use any temporary files or command line tools. It just works.
There's a CSS file style_pdf.css that can be tweaked to make the printout nicer. This would be a good area for some additional work.