CRM-16005 - Use and configure the dompdf provided by composer.
authorTim Otten <totten@civicrm.org>
Wed, 25 Feb 2015 01:37:07 +0000 (17:37 -0800)
committerTim Otten <totten@civicrm.org>
Wed, 25 Feb 2015 01:37:07 +0000 (17:37 -0800)
CRM/Utils/PDF/Utils.php
composer.json
tools/scripts/composer/dompdf-cleanup.sh [new file with mode: 0755]

index 90f36cecdfbe3e07f98142ca7396da8ac75e2e09..f7dc760449e4427d7b694cf47e1f6f799e0ef6e3 100644 (file)
@@ -191,9 +191,9 @@ class CRM_Utils_PDF_Utils {
    */
   public static function _html2pdf_dompdf($paper_size, $orientation, $html, $output, $fileName) {
     // CRM-12165 - Remote file support required for image handling.
-    define("DOMPDF_ENABLE_REMOTE", true);
-    define('DOMPDF_ENABLE_AUTOLOAD', false);
-    require_once 'packages/vendor/dompdf/dompdf/dompdf_config.inc.php';
+    define('DOMPDF_ENABLE_REMOTE', TRUE);
+    define('DOMPDF_ENABLE_AUTOLOAD', FALSE);
+    require_once 'vendor/dompdf/dompdf/dompdf_config.inc.php';
 
     $dompdf = new DOMPDF();
     $dompdf->set_paper($paper_size, $orientation);
index 89325b984377880865c4c957bd27b52de6477940..d4701c874b3808aa4ca80e87aa6b41d16cdb2e9c 100644 (file)
@@ -6,10 +6,19 @@
     }
   },
   "require": {
+    "dompdf/dompdf" : "0.6.*",
     "symfony/dependency-injection": "2.3.*",
     "symfony/event-dispatcher": "2.3.*",
     "psr/log": "1.0.0",
     "symfony/finder": "2.3.*",
     "totten/ca-config": "~13.02"
+  },
+  "scripts": {
+    "post-install-cmd": [
+      "bash tools/scripts/composer/dompdf-cleanup.sh"
+    ],
+    "post-update-cmd": [
+      "bash tools/scripts/composer/dompdf-cleanup.sh"
+    ]
   }
 }
diff --git a/tools/scripts/composer/dompdf-cleanup.sh b/tools/scripts/composer/dompdf-cleanup.sh
new file mode 100755 (executable)
index 0000000..b17e50d
--- /dev/null
@@ -0,0 +1,121 @@
+#!/bin/bash
+
+## Cleanup the vendor tree. The main issue here is that civi Civi is
+## deployed as a module inside a CMS, so all its source-code gets published.
+## Some libraries distribute admin tools and sample files which should not
+## be published.
+##
+## This script should be idempotent -- if you rerun it several times, it
+## should always produce the same post-condition.
+
+##############################################################################
+## usage: safe_delete <relpath...>
+function safe_delete() {
+  for file in "$@" ; do
+    if [ -z "$file" ]; then
+      echo "Skip: empty file name"
+    elif [ -e "$file" ]; then
+      rm -rf "$file"
+    fi
+  done
+}
+
+##############################################################################
+## usage: make_font_cache > font-cache.php
+function make_font_cache() {
+cat <<EOFONT
+<?php return array (
+  'sans-serif' =>
+  array (
+    'normal' => DOMPDF_DIR . '/lib/fonts/Helvetica',
+    'bold' => DOMPDF_DIR . '/lib/fonts/Helvetica-Bold',
+    'italic' => DOMPDF_DIR . '/lib/fonts/Helvetica-Oblique',
+    'bold_italic' => DOMPDF_DIR . '/lib/fonts/Helvetica-BoldOblique',
+  ),
+  'times' =>
+  array (
+    'normal' => DOMPDF_DIR . '/lib/fonts/Times-Roman',
+    'bold' => DOMPDF_DIR . '/lib/fonts/Times-Bold',
+    'italic' => DOMPDF_DIR . '/lib/fonts/Times-Italic',
+    'bold_italic' => DOMPDF_DIR . '/lib/fonts/Times-BoldItalic',
+  ),
+  'times-roman' =>
+  array (
+    'normal' => DOMPDF_DIR . '/lib/fonts/Times-Roman',
+    'bold' => DOMPDF_DIR . '/lib/fonts/Times-Bold',
+    'italic' => DOMPDF_DIR . '/lib/fonts/Times-Italic',
+    'bold_italic' => DOMPDF_DIR . '/lib/fonts/Times-BoldItalic',
+  ),
+  'courier' =>
+  array (
+    'normal' => DOMPDF_DIR . '/lib/fonts/Courier',
+    'bold' => DOMPDF_DIR . '/lib/fonts/Courier-Bold',
+    'italic' => DOMPDF_DIR . '/lib/fonts/Courier-Oblique',
+    'bold_italic' => DOMPDF_DIR . '/lib/fonts/Courier-BoldOblique',
+  ),
+  'helvetica' =>
+  array (
+    'normal' => DOMPDF_DIR . '/lib/fonts/Helvetica',
+    'bold' => DOMPDF_DIR . '/lib/fonts/Helvetica-Bold',
+    'italic' => DOMPDF_DIR . '/lib/fonts/Helvetica-Oblique',
+    'bold_italic' => DOMPDF_DIR . '/lib/fonts/Helvetica-BoldOblique',
+  ),
+  'zapfdingbats' =>
+  array (
+    'normal' => DOMPDF_DIR . '/lib/fonts/ZapfDingbats',
+    'bold' => DOMPDF_DIR . '/lib/fonts/ZapfDingbats',
+    'italic' => DOMPDF_DIR . '/lib/fonts/ZapfDingbats',
+    'bold_italic' => DOMPDF_DIR . '/lib/fonts/ZapfDingbats',
+  ),
+  'symbol' =>
+  array (
+    'normal' => DOMPDF_DIR . '/lib/fonts/Symbol',
+    'bold' => DOMPDF_DIR . '/lib/fonts/Symbol',
+    'italic' => DOMPDF_DIR . '/lib/fonts/Symbol',
+    'bold_italic' => DOMPDF_DIR . '/lib/fonts/Symbol',
+  ),
+  'serif' =>
+  array (
+    'normal' => DOMPDF_DIR . '/lib/fonts/Times-Roman',
+    'bold' => DOMPDF_DIR . '/lib/fonts/Times-Bold',
+    'italic' => DOMPDF_DIR . '/lib/fonts/Times-Italic',
+    'bold_italic' => DOMPDF_DIR . '/lib/fonts/Times-BoldItalic',
+  ),
+  'monospace' =>
+  array (
+    'normal' => DOMPDF_DIR . '/lib/fonts/Courier',
+    'bold' => DOMPDF_DIR . '/lib/fonts/Courier-Bold',
+    'italic' => DOMPDF_DIR . '/lib/fonts/Courier-Oblique',
+    'bold_italic' => DOMPDF_DIR . '/lib/fonts/Courier-BoldOblique',
+  ),
+  'fixed' =>
+  array (
+    'normal' => DOMPDF_DIR . '/lib/fonts/Courier',
+    'bold' => DOMPDF_DIR . '/lib/fonts/Courier-Bold',
+    'italic' => DOMPDF_DIR . '/lib/fonts/Courier-Oblique',
+    'bold_italic' => DOMPDF_DIR . '/lib/fonts/Courier-BoldOblique',
+  ),
+) ?>
+EOFONT
+}
+
+function make_font_readme() {
+cat <<EOREADME
+To save space in the final distribution we have not included the DejaVu family of fonts. You can get these fonts from:
+
+http://code.google.com/p/dompdf/
+
+Download the latest version and copy the font files from the lib/fonts directories to this directory.
+EOREADME
+}
+
+##############################################################################
+## Remove example/CLI scripts. They're not needed and increase the attack-surface.
+safe_delete vendor/dompdf/dompdf/dompdf.php
+safe_delete vendor/dompdf/dompdf/www
+safe_delete vendor/phenx/php-font-lib/www
+
+# Remove DejaVu fonts. They add 12mb.
+safe_delete vendor/dompdf/dompdf/lib/fonts/DejaVu*
+make_font_cache > vendor/dompdf/dompdf/lib/fonts/dompdf_font_family_cache.dist.php
+make_font_readme > vendor/dompdf/dompdf/lib/fonts/README.DejaVuFonts.txt