invoice_type; $page_format = get_option( 'wcj_invoicing_' . $invoice_type . '_page_format', 'A4' ); if ( 'custom' === $page_format ) { $page_format = array( get_option( 'wcj_invoicing_' . $invoice_type . '_page_format_custom_width', 0 ), get_option( 'wcj_invoicing_' . $invoice_type . '_page_format_custom_height', 0 ) ); } // Create new PDF document require_once( wcj_plugin_path() . '/includes/classes/class-wcj-tcpdf.php' ); $pdf = new WCJ_TCPDF( get_option( 'wcj_invoicing_' . $invoice_type . '_page_orientation', 'P' ), PDF_UNIT, $page_format, true, 'UTF-8', false ); $pdf->set_invoice_type( $invoice_type ); // Set document information $pdf->SetCreator( PDF_CREATOR ); // $pdf->SetAuthor( 'Booster for WooCommerce' ); $invoice_title = $invoice_type; $invoice_types = /* ( 'yes' === get_option( 'wcj_invoicing_hide_disabled_docs_settings', 'no' ) ) ? wcj_get_enabled_invoice_types() : */ wcj_get_invoice_types(); foreach ( $invoice_types as $invoice_type_data ) { if ( $invoice_type === $invoice_type_data['id'] ) { $invoice_title = $invoice_type_data['title']; break; } } $pdf->SetTitle( $invoice_title ); $pdf->SetSubject( 'Invoice PDF' ); $pdf->SetKeywords( 'invoice, PDF' ); // Header - set default header data if ( 'yes' === get_option( 'wcj_invoicing_' . $invoice_type . '_header_enabled', 'yes' ) ) { $the_logo = ''; $the_logo_width_mm = 0; if ( '' != ( $header_image = do_shortcode( get_option( 'wcj_invoicing_' . $invoice_type . '_header_image', '' ) ) ) ) { $the_logo = parse_url( $header_image, PHP_URL_PATH ); $the_logo_width_mm = get_option( 'wcj_invoicing_' . $invoice_type . '_header_image_width_mm', 50 ); if ( ! file_exists( K_PATH_IMAGES . $the_logo ) ) { $the_logo = ''; $the_logo_width_mm = 0; } } $pdf->SetHeaderData( $the_logo, $the_logo_width_mm, do_shortcode( get_option( 'wcj_invoicing_' . $invoice_type . '_header_title_text', $invoice_title ) ), do_shortcode( get_option( 'wcj_invoicing_' . $invoice_type . '_header_text', __( 'Company Name', 'woocommerce-jetpack' ) ) ), wcj_hex2rgb( get_option( 'wcj_invoicing_' . $invoice_type . '_header_text_color', '#cccccc' ) ), wcj_hex2rgb( get_option( 'wcj_invoicing_' . $invoice_type . '_header_line_color', '#cccccc' ) ) ); } else { $pdf->SetPrintHeader( false ); } // Footer if ( 'yes' === get_option( 'wcj_invoicing_' . $invoice_type . '_footer_enabled', 'yes' ) ) { $pdf->setFooterData( wcj_hex2rgb( get_option( 'wcj_invoicing_' . $invoice_type . '_footer_text_color', '#cccccc' ) ), wcj_hex2rgb( get_option( 'wcj_invoicing_' . $invoice_type . '_footer_line_color', '#cccccc' ) ) ); } else { $pdf->SetPrintFooter( false ); } $tcpdf_font = wcj_get_tcpdf_font( $invoice_type ); // Set Header and Footer fonts $pdf->setHeaderFont( array( /* PDF_FONT_NAME_MAIN */ $tcpdf_font, '', PDF_FONT_SIZE_MAIN ) ); $pdf->setFooterFont( array( /* PDF_FONT_NAME_DATA */ $tcpdf_font, '', PDF_FONT_SIZE_DATA ) ); // Set default monospaced font $pdf->SetDefaultMonospacedFont( PDF_FONT_MONOSPACED ); // Set margins $pdf->SetMargins( get_option( 'wcj_invoicing_' . $invoice_type . '_margin_left', 15 ), get_option( 'wcj_invoicing_' . $invoice_type . '_margin_top', 27 ), get_option( 'wcj_invoicing_' . $invoice_type . '_margin_right', 15 ) ); $pdf->SetHeaderMargin( get_option( 'wcj_invoicing_' . $invoice_type . '_margin_header', 10 ) ); $pdf->SetFooterMargin( get_option( 'wcj_invoicing_' . $invoice_type . '_margin_footer', 10 ) ); // Set auto page breaks $pdf->SetAutoPageBreak( true, get_option( 'wcj_invoicing_' . $invoice_type . '_margin_bottom', 0 ) ); // Set image scale factor $pdf->setImageScale( PDF_IMAGE_SCALE_RATIO ); /*// Set some language-dependent strings (optional) if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { require_once(dirname(__FILE__).'/lang/eng.php'); $pdf->setLanguageArray($l); }*/ // Set default font subsetting mode $pdf->setFontSubsetting( true ); // Set font $pdf->SetFont( $tcpdf_font, '', get_option( 'wcj_invoicing_' . $invoice_type . '_general_font_size', 8 ), '', true ); // Add a page $pdf->AddPage(); // Set text shadow effect if ( 'yes' === get_option( 'wcj_invoicing_' . $invoice_type . '_general_font_shadowed', 'no' ) ) { $pdf->setTextShadow( array( 'enabled' => true, 'depth_w' => 0.2, 'depth_h' => 0.2, 'color' => array( 196, 196, 196 ), 'opacity' => 1, 'blend_mode' => 'Normal' ) ); } // Background image if ( '' != ( $background_image = do_shortcode( get_option( 'wcj_invoicing_' . $invoice_type . '_background_image', '' ) ) ) ) { $background_image = parse_url( $background_image, PHP_URL_PATH ); if ( file_exists( K_PATH_IMAGES . $background_image ) ) { $pdf->Image( $background_image, 0, 0, $pdf->getPageWidth(), $pdf->getPageHeight() ); } } return $pdf; } /** * maybe_replace_tcpdf_method_params. * * @version 3.6.0 * @since 3.6.0 */ function maybe_replace_tcpdf_method_params( $html, $pdf ) { $start_str = 'wcj_tcpdf_method_params_start'; $end_str = 'wcj_tcpdf_method_params_end'; $start_str_length = strlen( $start_str ); $end_str_length = strlen( $end_str ); while ( false !== ( $start = strpos( $html, $start_str ) ) ) { $params_start = $start + $start_str_length; $params_length = strpos( $html, $end_str ) - $params_start; $params = $pdf->serializeTCPDFtagParameters( unserialize( substr( $html, $params_start, $params_length ) ) ); $html = substr_replace( $html, 'params="' . $params . '"', $start, $start_str_length + $params_length + $end_str_length ); } return $html; } /** * get_html. * * Gets invoice content HTML. * * @version 3.6.0 * @since 3.5.0 * @todo pass other params (billing_country, payment_method) as global (same as user_id) instead of $_GET * @todo `force_balance_tags()` - there are some bugs and performance issues, see http://wordpress.stackexchange.com/questions/89121/why-doesnt-default-wordpress-page-view-use-force-balance-tags */ function get_html( $order_id, $pdf ) { $_GET['order_id'] = $order_id; $the_order = wc_get_order( $order_id ); if ( ! isset( $_GET['billing_country'] ) ) { $_GET['billing_country'] = ( WCJ_IS_WC_VERSION_BELOW_3 ? $the_order->billing_country : $the_order->get_billing_country() ); } if ( ! isset( $_GET['payment_method'] ) ) { $_GET['payment_method'] = wcj_order_get_payment_method( $the_order ); } global $wcj_pdf_invoice_data; if ( ! isset( $wcj_pdf_invoice_data['user_id'] ) ) { $wcj_pdf_invoice_data['user_id'] = ( WCJ_IS_WC_VERSION_BELOW_3 ? $the_order->customer_user : $the_order->get_customer_id() ); } $html = do_shortcode( get_option( 'wcj_invoicing_' . $this->invoice_type . '_template', WCJ()->modules['pdf_invoicing_templates']->get_default_template( $this->invoice_type ) ) ); $html = $this->maybe_replace_tcpdf_method_params( $html, $pdf ); return force_balance_tags( $html ); } /** * get_pdf. * * @version 3.6.0 * @todo (maybe) `die()` on success */ function get_pdf( $dest ) { $pdf = $this->prepare_pdf(); $html = $this->get_html( $this->order_id, $pdf ); $styling = ''; $pdf->writeHTMLCell( 0, 0, '', '', $styling . $html, 0, 1, 0, true, '', true ); $result_pdf = $pdf->Output( '', 'S' ); $file_name = $this->get_file_name(); if ( 'F' === $dest ) { $file_path = wcj_get_invoicing_temp_dir() . '/' . $file_name; if ( ! file_put_contents( $file_path, $result_pdf ) ) { return null; } return $file_path; } elseif ( 'D' === $dest || 'I' === $dest ) { if ( 'D' === $dest ) { header( "Content-Type: application/octet-stream" ); header( "Content-Disposition: attachment; filename=" . urlencode( $file_name ) ); header( "Content-Type: application/octet-stream" ); header( "Content-Type: application/download" ); header( "Content-Description: File Transfer" ); } elseif ( 'I' === $dest ) { header( "Content-type: application/pdf" ); header( "Content-Disposition: inline; filename=" . urlencode( $file_name ) ); } if ( wcj_is_module_enabled( 'general' ) && 'yes' === get_option( 'wcj_general_advanced_disable_save_sys_temp_dir', 'no' ) ) { header( "Content-Length: " . strlen( $result_pdf ) ); echo $result_pdf; } else { $file_path = wcj_get_invoicing_temp_dir() . '/' . $file_name; if ( ! file_put_contents( $file_path, $result_pdf ) ) { return null; } header( "Content-Length: " . filesize( $file_path ) ); flush(); // this doesn't really matter. if ( false !== ( $fp = fopen( $file_path, "r" ) ) ) { while ( ! feof( $fp ) ) { echo fread( $fp, 65536 ); flush(); // this is essential for large downloads } fclose( $fp ); } else { die( __( 'Unexpected error', 'woocommerce-jetpack' ) ); } } } return null; } } endif;