Blame | Letzte Änderung | Log anzeigen | RSS feed
<?php/*****************************************************************************//** Inclusions */define ( "HTML2PS_BASEDIR", "@@@@ change this value for yours needs @@@@" );require_once ( HTML2PS_BASEDIR . "config.inc.php" );require_once ( HTML2PS_DIR . "pipeline.factory.class.php" );require_once ( HTML2PS_DIR . "fetcher.url.class.php" );/*****************************************************************************//** Definitions */// ** Valid post processing directivesglobal $VALID_POST_PROCESSING_DIRECTIVES;// DIRECTIVE => true: multi-value, false: single-value$VALID_POST_PROCESSING_DIRECTIVES = array ( // VISIBILITY SPECIFICATION (ids lists)"only_first_page" => true,"only_last_page" => true,"all_but_first_page" => true,"all_but_last_page" => true,"only_even_page" => true,"only_odd_page" => true,// MARGIN (mm)"margin_left" => false,"margin_right" => false,"margin_top" => false,"margin_bottom" => false,// PAGE WIDTH (pixel)"page_width" => false);/*****************************************************************************//** Run-time settings */// ** PHPset_time_limit ( 10000 );// ** HTML2PSini_set ( "user_agent", DEFAULT_USER_AGENT );$g_css_index = 0;$g_stylesheet_title = ""; // Title of styleshee to use (empty if no preferences are set)/*****************************************************************************//** Parameters */// Input url$fi = trim ( urldecode ( get_var ( "fi", $_GET, 255, "" ) ) );// Output file name (without ".pdf")$fo = trim ( urldecode ( get_var ( "fo", $_GET, 255, "document" ) ) );// Margin value in mm (see page definition in test.html)$ml = (int) get_var ( "ml", $_GET, 255, -1 );$mr = (int) get_var ( "mr", $_GET, 255, -1 );$mt = (int) get_var ( "mt", $_GET, 255, -1 );$mb = (int) get_var ( "mb", $_GET, 255, -1 );// Page width$pw = (int) get_var ( "pw", $_GET, 255, -1 );/*****************************************************************************//** Parameters validation */if ( $fi == "" ) { die ( "Wrong parameters." ); }/*****************************************************************************//** Get post-processing information */// *** Initglobal $POST_PROCESSING_DIRECTIVES;$POST_PROCESSING_DIRECTIVES = array();// *** Get file content in row (array)$filerows = file ( $fi );if ( $filerows == false ) { die ( "Unable to get file content." ); }// *** Search for directives block$viewed_post_process_open = false;$viewed_post_process_close = false;for ( $i = 0; $i < count ( $filerows ); $i++ ) {if ( strpos ( trim ( $filerows[$i] ), "HTML2PDF_POST_PROCESSING_DIRECTIVES -->" ) === 0 ) {// Directives block ended$viewed_post_process_close = true;break;}if ( $viewed_post_process_open ) { // Am i in directives lock?// Check if commentif ( strpos ( trim ( $filerows[$i] ), "//" ) === 0 ) { continue; } // Skip comment line// Normal line$tmp = explode ( ":", $filerows[$i] );$row_type = ( isset ( $tmp[0] ) ? trim ( $tmp[0] ) : "" );$row_info = ( isset ( $tmp[1] ) ? trim ( $tmp[1] ) : "" );// This row is a valid directive?if ( ! isset ( $VALID_POST_PROCESSING_DIRECTIVES[$row_type] ) ) {die ( "Unknown POST PROCESSING directive: |$row_type|." );}$mulval = $VALID_POST_PROCESSING_DIRECTIVES[$row_type];// Save directive$values = explode ( ",", $row_info );if ( $mulval ) {// Multi-value directiveif ( count ( $values ) > 0 ) {if ( ! isset ( $POST_PROCESSING_DIRECTIVES[$row_type] ) ) {$POST_PROCESSING_DIRECTIVES[$row_type] = $values;} else {$POST_PROCESSING_DIRECTIVES[$row_type] = array_merge ( $POST_PROCESSING_DIRECTIVES[$row_type], $values );}}} else {// Single-value directiveif ( ! isset ( $values[0] ) ) {die ( "Specify a value for |$row_type| directive." );}$POST_PROCESSING_DIRECTIVES[$row_type] = $values[0];}}if ( strpos ( trim ( $filerows[$i] ), "<!-- HTML2PDF_POST_PROCESSING_DIRECTIVES" ) === 0 ) {// Directives block started$viewed_post_process_open = true;}}if ( $viewed_post_process_open != $viewed_post_process_close ) {die ( "Error reading POST PROCESSING directives." );}/*****************************************************************************//** Use post-processing information (not all of them yet) */// ** Overwrite margin value with directivesif ( $ml == -1 ) {$ml = ( isset ( $POST_PROCESSING_DIRECTIVES["margin_left"] ) ?$POST_PROCESSING_DIRECTIVES["margin_left"] :0 );}if ( $mr == -1 ) {$mr = ( isset ( $POST_PROCESSING_DIRECTIVES["margin_right"] ) ?$POST_PROCESSING_DIRECTIVES["margin_right"] :0 );}if ( $mt == -1 ) {$mt = ( isset ( $POST_PROCESSING_DIRECTIVES["margin_top"] ) ?$POST_PROCESSING_DIRECTIVES["margin_top"] :0 );}if ( $mb == -1 ) {$mb = ( isset ( $POST_PROCESSING_DIRECTIVES["margin_bottom"] ) ?$POST_PROCESSING_DIRECTIVES["margin_bottom"] :0 );}// ** Overwrite page width value with directivesif ( $pw == -1 ) {$pw = ( isset ( $POST_PROCESSING_DIRECTIVES["page_width"] ) ?$POST_PROCESSING_DIRECTIVES["page_width"] :800 );}/*****************************************************************************//** Configuration */$GLOBALS['g_config'] = array ( 'cssmedia' => "screen",'media' => "A4",'scalepoints' => true,'renderimages' => true,'renderfields' => true,'renderforms' => false,'pslevel' => 3,'renderlinks' => true,'pagewidth' => $pw,'landscape' => false,'method' => "fpdf",'margins' => array ( 'left' => $ml,'right' => $mr,'top' => $mt,'bottom' => $mb,),'encoding' => "",'ps2pdf' => false,'compress' => false,'output' => 1,'pdfversion' => "1.2",'transparency_workaround' => false,'imagequality_workaround' => false,'draw_page_border' => false,'debugbox' => false,'html2xhtml' => true,'mode' => 'html','smartpagebreak' => true);/*****************************************************************************//** Inizializza pipeline */// ** Parse configuration fileparse_config_file ( HTML2PS_BASEDIR . "html2ps.config" );// ** Media$g_media = Media::predefined ( $GLOBALS['g_config']['media'] );$g_media->set_landscape ( $GLOBALS['g_config']['landscape'] );$g_media->set_margins ( $GLOBALS['g_config']['margins'] );$g_media->set_pixels ( $GLOBALS['g_config']['pagewidth'] );// ** Pipeline// *** Initialize the coversion pipeline$pipeline = new Pipeline();// *** Fetchers$pipeline->fetchers[] = new FetcherUrl();// *** Data filters$pipeline->data_filters[] = new DataFilterDoctype();$pipeline->data_filters[] = new DataFilterUTF8 ( "" );$pipeline->data_filters[] = new DataFilterHTML2XHTML();// *** Parser$pipeline->parser = new ParserXHTML();// *** Pre-tree filters$pipeline->pre_tree_filters = array();$pipeline->pre_tree_filters[] = new PreTreeFilterHTML2PSFields();// *** Layout engine$pipeline->layout_engine = new LayoutEngineDefault();// *** Post-tree filters$pipeline->post_tree_filters = array();// *** Output driver$pipeline->output_driver = new OutputDriverFPDF();// *** Destination$pipeline->destination = new DestinationDownload ( $fo );// *** Install event handler$dispatcher =& $pipeline->getDispatcher();$dispatcher->add_observer ( 'before-page', 'visible_hidden_by_id');/*****************************************************************************//** Main */// ** Generate PDF file$status = $pipeline->process ( $fi, $g_media );if ( $status == null ) {print ( $pipeline->error_message() );syslog ( LOG_ERR, "PHP: Error in conversion pipeline" );die();}/*****************************************************************************//** Functions */// ** Event handlerfunction visible_hidden_by_id ( $params ) {global $POST_PROCESSING_DIRECTIVES;// ** Read page number$exppag = $params["pipeline"]->output_driver->get_expected_pages();$pageno = $params["pageno"] + 1; // Plus 1 because in "before-page" pageno isn't yet incremented// ** Show elements only in first pageif ( isset ( $POST_PROCESSING_DIRECTIVES["only_first_page"] ) ) {$value = ( $pageno == 1 ? VISIBILITY_VISIBLE : VISIBILITY_HIDDEN );foreach ( $POST_PROCESSING_DIRECTIVES["only_first_page"] as $k => $id ) {$elem = $params["document"]->get_element_by_id ( trim ( $id ) );if ( $elem != NULL ) {$elem->setCSSProperty ( CSS_VISIBILITY, $value );}}}// ** Show elements only in last pageif ( isset ( $POST_PROCESSING_DIRECTIVES["only_last_page"] ) ) {$value = ( $pageno == $exppag ? VISIBILITY_VISIBLE : VISIBILITY_HIDDEN );foreach ( $POST_PROCESSING_DIRECTIVES["only_last_page"] as $k => $id ) {$elem = $params["document"]->get_element_by_id ( trim ( $id ) );if ( $elem != NULL ) {$elem->setCSSProperty ( CSS_VISIBILITY, $value );}}}// ** Show elements in all pages but firstif ( isset ( $POST_PROCESSING_DIRECTIVES["all_but_first_page"] ) ) {$value = ( $pageno != 1 ? VISIBILITY_VISIBLE : VISIBILITY_HIDDEN );foreach ( $POST_PROCESSING_DIRECTIVES["all_but_first_page"] as $k => $id ) {$elem = $params["document"]->get_element_by_id ( trim ( $id ) );if ( $elem != NULL ) {$elem->setCSSProperty ( CSS_VISIBILITY, $value );}}}// ** Show elements in all pages but lastif ( isset ( $POST_PROCESSING_DIRECTIVES["all_but_last_page"] ) ) {$value = ( $pageno != $exppag ? VISIBILITY_VISIBLE : VISIBILITY_HIDDEN );foreach ( $POST_PROCESSING_DIRECTIVES["all_but_last_page"] as $k => $id ) {$elem = $params["document"]->get_element_by_id ( trim ( $id ) );if ( $elem != NULL ) {$elem->setCSSProperty ( CSS_VISIBILITY, $value );}}}// ** Show elements only in even pagesif ( isset ( $POST_PROCESSING_DIRECTIVES["only_even_page"] ) ) {$value = ( $pageno % 2 == 0 ? VISIBILITY_VISIBLE : VISIBILITY_HIDDEN );foreach ( $POST_PROCESSING_DIRECTIVES["only_even_page"] as $k => $id ) {$elem = $params["document"]->get_element_by_id ( trim ( $id ) );if ( $elem != NULL ) {$elem->setCSSProperty ( CSS_VISIBILITY, $value );}}}// ** Show elements only in odd pagesif ( isset ( $POST_PROCESSING_DIRECTIVES["only_odd_page"] ) ) {$value = ( $pageno % 2 != 0 ? VISIBILITY_VISIBLE : VISIBILITY_HIDDEN );foreach ( $POST_PROCESSING_DIRECTIVES["only_odd_page"] as $k => $id ) {$elem = $params["document"]->get_element_by_id ( trim ( $id ) );if ( $elem != NULL ) {$elem->setCSSProperty ( CSS_VISIBILITY, $value );}}}}// ** Generic functionsfunction get_var ( $name, $array, $maxlength = 255, $default = null ) {if ( ! isset ( $array[$name] ) ) { return $default; }$data = $array[$name];if ( is_array ( $data ) ) {if ( get_magic_quotes_gpc() ) {foreach ( $data as $key => $value ) {$data[$key] = stripslashes ( $data[$key] );}}} else {if ( get_magic_quotes_gpc() ) {$data = stripslashes ( $data );}$data = substr ( $data, 0, $maxlength );}return $data;}?>