print_pdf_mpdf.module 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. <?php
  2. /**
  3. * @file
  4. * Generate a PDF for the print_pdf module using the mPDF library.
  5. *
  6. * @ingroup print
  7. */
  8. /**
  9. * Implements hook_pdf_tool_info().
  10. */
  11. function print_pdf_mpdf_pdf_tool_info() {
  12. $info = array(
  13. 'name' => 'mPDF',
  14. 'url' => 'https://github.com/mpdf/mpdf/releases/latest',
  15. 'expand_css' => FALSE,
  16. 'public_dirs' => array(
  17. 'ttfontdata',
  18. 'tmp',
  19. ),
  20. );
  21. $pdf_tool = explode('|', variable_get('print_pdf_pdf_tool', PRINT_PDF_PDF_TOOL_DEFAULT));
  22. if (!isset($pdf_tool[1]) || print_pdf_mpdf_pdf_tool_version($pdf_tool[1]) !== '>= 7.x') {
  23. $info['tool_dirs'] = array(
  24. 'graph_cache',
  25. );
  26. }
  27. return $info;
  28. }
  29. /**
  30. * Implements hook_pdf_tool_version().
  31. */
  32. function print_pdf_mpdf_pdf_tool_version($pdf_tool) {
  33. if (file_exists(DRUPAL_ROOT . '/' . $pdf_tool)) {
  34. include_once DRUPAL_ROOT . '/' . $pdf_tool;
  35. }
  36. if (defined('mPDF_VERSION')) {
  37. return mPDF_VERSION;
  38. }
  39. else {
  40. // Version 7 of the mpdf library uses a composer autoloader.
  41. // Also there no longer is a way to truly detect the library version, so
  42. // this seems like the best alternative.
  43. $mpdf_version_7_plus = strpos($pdf_tool, 'autoload.php') !== FALSE;
  44. if ($mpdf_version_7_plus) {
  45. return '>= 7.x';
  46. }
  47. else {
  48. return 'unknown';
  49. }
  50. }
  51. }
  52. /**
  53. * Implements hook_print_pdf_available_libs_alter().
  54. */
  55. function print_pdf_mpdf_print_pdf_available_libs_alter(&$pdf_tools) {
  56. module_load_include('inc', 'print', 'includes/print');
  57. $tools = _print_scan_libs('mpdf', '!^mpdf.php$!');
  58. foreach ($tools as $tool) {
  59. $pdf_tools['print_pdf_mpdf|' . $tool] = 'mPDF (' . dirname($tool) . ')';
  60. }
  61. // mPDF >= 7.0 uses a composer autoloader.
  62. $tools = _print_scan_libs('mpdf', '!^autoload.php$!');
  63. foreach ($tools as $tool) {
  64. if (preg_match('!mpdf.*?/vendor/autoload.php$!', $tool)) {
  65. $pdf_tools['print_pdf_mpdf|' . $tool] = 'mPDF (' . dirname(dirname($tool)) . ')';
  66. }
  67. }
  68. }