Index: pdfview.module =================================================================== RCS file: /cvs/drupal-contrib/contributions/modules/pdfview/pdfview.module,v retrieving revision 1.37.2.6 diff -u -F^f -r1.37.2.6 pdfview.module --- pdfview.module 5 Feb 2007 15:29:42 -0000 1.37.2.6 +++ pdfview.module 5 Feb 2007 18:14:33 -0000 @@ -94,11 +94,10 @@ function pdfview_node_controller() { * Renders a node as a PDF file. */ function pdfview_node($node) { - $path = drupal_get_path('module', 'pdfview'); - require_once($path . '/tcpdf/tcpdf.php'); + pdfview_tcpdf_init(); $pdf = theme('pdfview_pdf'); - + if ($node->type == 'book') { $depth = count(book_location($node)) + 1; $pdf = pdfview_book_recurse($pdf, $node, $depth); @@ -106,26 +105,41 @@ function pdfview_node($node) { else { $pdf = theme('pdfview_node', $pdf, $node); } - + return $pdf; } +/* + * Defines the default constants and includes tcpdf.php + */ +function pdfview_tcpdf_init() { + define('K_TCPDF_EXTERNAL_CONFIG', TRUE); + define('K_PATH_MAIN', dirname(__FILE__) .'/tcpdf'); + define('FPDF_FONTPATH', K_PATH_MAIN."/fonts/"); + define('K_PATH_IMAGES', K_PATH_MAIN."/images/"); + define('K_BLANK_IMAGE', K_PATH_IMAGES."_blank.png"); + define("K_CELL_HEIGHT_RATIO", variable_get('pdfview_tcpdf_cell_height_ratio', 1.25)); + define("K_SMALL_RATIO", variable_get('pdfview_tcpdf_font_small_ratio', 2/3)); + + require_once(drupal_get_path('module', 'pdfview') .'/pdfview_tcpdf.inc'); +} + /** * Renders a book as a PDF file. */ function pdfview_book_recurse($pdf, &$node, $depth = 10) { - if ($node) { + if ($node) { $pdf = theme('pdfview_node', $pdf, $node); - $children = db_query(db_rewrite_sql('SELECT n.nid, n.title, b.weight FROM {node} n INNER JOIN {book} b ON n.vid = b.vid WHERE n.status = 1 AND b.parent = %d AND n.moderate = 0 ORDER BY b.weight, n.title'), $node->nid); + $children = db_query(db_rewrite_sql('SELECT n.nid, n.title, b.weight FROM {node} n INNER JOIN {book} b ON n.vid = b.vid WHERE n.status = 1 AND b.parent = %d AND n.moderate = 0 ORDER BY b.weight, n.title'), $node->nid); while ($childpage = db_fetch_object($children)) { $childnode = node_load($childpage->nid); if ($childnode->nid != $node->nid) { $pdf = pdfview_book_recurse($pdf, $childnode, $depth + 1); } - } - } + } + } return $pdf; } @@ -144,99 +158,25 @@ function pdfview_generate_file(&$pdf, $f * @ingroup themeable */ function theme_pdfview_pdf() { - $pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true); + pdfview_tcpdf_init(); + $pdf = new pdfviewTCPDF(variable_get('pdfview_tcpdf_page_orientation', 'P'), variable_get('pdfview_tcpdf_unit', 'mm'), variable_get('pdfview_tcpdf_page_format', 'A4'), true); $pdf->Open(); - - // set margins - $pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); - $pdf->SetHeaderMargin(PDF_MARGIN_HEADER); - $pdf->SetFooterMargin(PDF_MARGIN_FOOTER); - - // set auto page breaks - $pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); - $pdf->AliasNbPages(); - - // set image scale factor - $pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); - - $pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); - $pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); - - return $pdf; -} - -/** - * Renders PDF output for a node - * @ingroup themeable - */ -function theme_pdfview_node(&$pdf, $node) { - $pdf->AddPage(); - - $pdf = theme('pdfview_title', $pdf, $node->title); - - $author = strip_tags(theme('username', $node)); - $pdf = theme('pdfview_author', $pdf, $author); - $pdf = theme('pdfview_published', $pdf, $node->created); - - if (node_hook($node, 'view')) { - node_invoke($node, 'view'); - } - else { - $node = node_prepare($node); - } - node_invoke_nodeapi($node, 'view'); - $content = drupal_render($node->content); - - $content = pdfview_check_images($content); - $pdf->SetFont(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN); - $pdf = theme('pdfview_html', $pdf, $content); - - return $pdf; -} + // set margins + $pdf->SetMargins(variable_get('pdfview_tcpdf_margin_left', 15), variable_get('pdfview_tcpdf_margin_top', 27), variable_get('pdfview_tcpdf_margin_right', 15)); + $pdf->SetHeaderMargin(variable_get('pdfview_tcpdf_margin_header', 5)); + $pdf->SetFooterMargin(variable_get('pdfview_tcpdf_margin_footer', 10)); -/** - * Renders a title - * @ingroup themeable - */ -function theme_pdfview_title(&$pdf, $title) { - $pdf->SetFont(PDF_FONT_NAME_MAIN, 'B', PDF_FONT_SIZE_MAIN * K_TITLE_MAGNIFICATION); - $pdf->SetLineWidth(1); - $pdf = theme('pdfview_html', $pdf, $title); - $pdf->Ln(5); - return $pdf; -} + // set auto page breaks + $pdf->SetAutoPageBreak(TRUE, variable_get('pdfview_tcpdf_margin_bottom', 25)); + $pdf->AliasNbPages(); -/** - * Renders an author line - * @ingroup themeable - */ -function theme_pdfview_author(&$pdf, $author) { - $pdf->SetFont(PDF_FONT_NAME_MAIN,'BI', PDF_FONT_SIZE_MAIN); - $pdf->MultiCell(0, 5, t('By @author', array('@author' => $author)), 0, 'L', 0); - return $pdf; -} + // set image scale factor + $pdf->setImageScale(variable_get('pdfview_tcpdf_image_scale_ratio', 4)); -/** - * Renders a publication date - * @ingroup themeable - */ -function theme_pdfview_published(&$pdf, $timestamp) { - $published = format_date($timestamp, 'small'); - $pdf->SetFont('', '', PDF_FONT_SIZE_MAIN); - $pdf->MultiCell(0, 5, t('Published: @date', array('@date' => $published)), 0, 'L', 0); - $pdf->Ln(5); - return $pdf; -} + $pdf->setHeaderFont(Array(variable_get('pdfview_tcpdf_font_main_name', 'FreeSans'), '', variable_get('pdfview_tcpdf_font_main_size', 10))); + $pdf->setFooterFont(Array(variable_get('pdfview_tcpdf_font_data_name', "FreeSerif"), '', variable_get('pdfview_tcpdf_font_data_size', 8))); -/** - * Renders an HTML string to PDF - * @ingroup themeable - */ -function theme_pdfview_html(&$pdf, $html) { - foreach (explode("\n", $html) as $one) { - $pdf->writeHTML($one); - } return $pdf; }