Shane Dowling : DOMpdf failing to render certain accented characters

I've noticed some issues with DOMpdf when trying to generate PDFs using their internal Helvetica font. After banging my head against a wall for a few hours trying to "fix" UTF-8 support, it turned out UTF-8 support was working fine. Essentially DOMpdf's internal Helvetica font didn't support a few polish characters. Specifically the Sacute, sacute and a few others like this. This was a bit of a killer problem for my requirements so I needed a work-around. My workaround was to use Arial fonts(they were close enough), but if you really need Helvetica you could source a copy of the .ttfs and replicate these steps.

Download Arial fonts

wget http://www.drivehq.com/file/df.aspx/shareID2129391/fileID59377155/arial.ttf wget http://www.911fonts.com/fonts/6/0/5/605.ttf -O arialit.ttf wget http://4nts.com/fonts/arialbd.ttf wget http://www.911fonts.com/fonts/6/0/4/604.ttf -O arialbit.ttf

This downloads arial, arial-bold, arial-oblique and arial-boldoblique.

Generate compatible dompdf files

Pull up a terminal and cd into your dompdf folder. If you're using composer, it'll be /vendor/dompdf/dompdf

php load_font.php arial ~/arial.ttf ~/arialbd.ttf ~/arialit.ttf ~/arialbit.ttf

You should now see an entry in lib/fonts/dompdf_font_family_cache.php

arial' =>
 array (
 'normal' => DOMPDF_FONT_DIR . 'arial',
 'bold' => DOMPDF_FONT_DIR . 'arialbd',
 'italic' => DOMPDF_FONT_DIR . 'arialit',
 'bold_italic' => DOMPDF_FONT_DIR . 'arialbit',
 ),

You can now reference the Arial font-family in your DOMpdf stylesheets and have it render some nice Helvetica like fonts.

If you are using composer with DOMpdf, I would highly recommend not leaving your custom fonts in DOMpdfs vendor folder. Copy the fonts directory somewhere in your projects directory, and over-ride this variable with your own def, referencing the new folder location.

def("DOMPDF_FONT_DIR", DOMPDF_DIR . "/lib/fonts/");

This means you shouldn't need to rely on dodgy customisations to the vendor folder.