--- print_pdf/print_pdf.pages.inc	2010-08-13 20:04:58.000000000 -0400
+++ print_pdf/print_pdf-new.pages.inc	2011-01-28 19:14:14.505053000 -0500
@@ -20,14 +20,18 @@ require_once(drupal_get_path('module', '
  * @see _print_pdf_dompdf()
  * @see _print_pdf_tcpdf()
  */
-function print_pdf_controller() {
+function print_pdf_controller($path = '') {
   global $base_url;
 
   // Disable caching for generated PDFs, as Drupal doesn't ouput the proper headers from the cache
   $GLOBALS['conf']['cache'] = FALSE;
 
-  $args = func_get_args();
-  $path = implode('/', $args);
+  $return_pdf_as_string = TRUE;  // if called from a function, return PDF contents as a string
+  if (!$path) {  
+    $args = func_get_args();
+    $path = implode('/', $args);
+    $return_pdf_as_string = FALSE;  // if called via a Print_PDF link, return PDF as a file
+  }
   $cid = isset($_GET['comment']) ? (int)$_GET['comment'] : NULL;
 
   $print_pdf_pdf_tool = variable_get('print_pdf_pdf_tool', PRINT_PDF_PDF_TOOL_DEFAULT);
@@ -68,7 +72,12 @@ function print_pdf_controller() {
   }
 
   if (basename($print_pdf_pdf_tool) == 'dompdf_config.inc.php') {
-    _print_pdf_dompdf($print, $html, $pdf_filename);
+    if ($return_pdf_as_string) {
+      $pdf = _print_pdf_dompdf($print, $html, $pdf_filename, $return_pdf_as_string);
+      return $pdf;
+    } else {
+      _print_pdf_dompdf($print, $html, $pdf_filename);
+    }
   }
   elseif (basename($print_pdf_pdf_tool) == 'tcpdf.php') {
     _print_pdf_tcpdf($print, $html, $pdf_filename);
@@ -138,7 +147,7 @@ function _print_pdf_file_access_images($
  *   name of the PDF file to be generated
  * @see print_pdf_controller()
  */
-function _print_pdf_dompdf($print, $html, $filename) {
+function _print_pdf_dompdf($print, $html, $filename, $return_pdf_as_string) {
   $print_pdf_pdf_tool = variable_get('print_pdf_pdf_tool', PRINT_PDF_PDF_TOOL_DEFAULT);
   $print_pdf_paper_size = variable_get('print_pdf_paper_size', PRINT_PDF_PAPER_SIZE_DEFAULT);
   $print_pdf_page_orientation = variable_get('print_pdf_page_orientation', PRINT_PDF_PAGE_ORIENTATION_DEFAULT);
@@ -205,7 +214,12 @@ function _print_pdf_dompdf($print, $html
   $dompdf->load_html($html);
 
   $dompdf->render();
-  $dompdf->stream($filename, array('Attachment' => ($print_pdf_content_disposition == 2)));
+  if ($return_pdf_as_string) {
+    $pdf = $dompdf->output();
+    return $pdf;
+  } else {
+    $dompdf->stream($filename, array('Attachment' => ($print_pdf_content_disposition == 2)));
+  }
 }
 
 /**
@@ -219,7 +233,7 @@ function _print_pdf_dompdf($print, $html
  *   name of the PDF file to be generated
  * @see print_pdf_controller()
  */
-function _print_pdf_tcpdf($print, $html, $filename) {
+function _print_pdf_tcpdf($print, $html, $filename, $return_pdf_as_string) {
   global $base_url, $language;
 
   $print_pdf_pdf_tool = variable_get('print_pdf_pdf_tool', PRINT_PDF_PDF_TOOL_DEFAULT);
@@ -300,8 +314,13 @@ function _print_pdf_tcpdf($print, $html,
   ob_clean();
 
   //Close and output PDF document
-  $output_dest = ($print_pdf_content_disposition == 2) ? 'D' : 'I';
-  $pdf->Output($filename, $output_dest);
+  if ($return_pdf_as_string) {
+      $pdf = $pdf->Output($filename, 'S')
+      return $pdf;
+  } else {
+    $output_dest = ($print_pdf_content_disposition == 2) ? 'D' : 'I';
+    $pdf->Output($filename, $output_dest);
+  }
 }
 
 /**
@@ -315,7 +334,7 @@ function _print_pdf_tcpdf($print, $html,
  *   name of the PDF file to be generated
  * @see print_pdf_controller()
  */
-function _print_pdf_wkhtmltopdf($print, $html, $filename) {
+function _print_pdf_wkhtmltopdf($print, $html, $filename, $return_pdf_as_string) {
   $print_pdf_pdf_tool = variable_get('print_pdf_pdf_tool', PRINT_PDF_PDF_TOOL_DEFAULT);
   $print_pdf_paper_size = variable_get('print_pdf_paper_size', PRINT_PDF_PAPER_SIZE_DEFAULT);
   $print_pdf_page_orientation = variable_get('print_pdf_page_orientation', PRINT_PDF_PAGE_ORIENTATION_DEFAULT);
@@ -365,6 +384,10 @@ function _print_pdf_wkhtmltopdf($print,
   }
 
   if (!empty($pdf)) {
+    if ($return_pdf_as_string) {
+      return $pdf;
+      exit;
+    }
     if (headers_sent()) {
       die("Unable to stream pdf: headers already sent");
     }
