static function &pdflib($fileName, $searchPath, &$values, $numPages = 1, $echo = true, $output = 'College_Match_App', $creator = 'CiviCRM', $author = 'http://www.civicrm.org/', $title = '2006 College Match Scholarship Application') { try { $pdf = new PDFlib(); $pdf->set_parameter("compatibility", "1.6"); $pdf->set_parameter("licensefile", "/home/paras/bin/license/pdflib.txt"); if ($pdf->begin_document('', '') == 0) { CRM_Core_Error::statusBounce("PDFlib Error: " . $pdf->get_errmsg()); } $config =& CRM_Core_Config::singleton(); $pdf->set_parameter('resourcefile', $config->templateDir . '/Quest/pdf/pdflib.upr'); $pdf->set_parameter('textformat', 'utf8'); /* Set the search path for fonts and PDF files */ $pdf->set_parameter('SearchPath', $searchPath); /* This line is required to avoid problems on Japanese systems */ $pdf->set_parameter('hypertextencoding', 'winansi'); $pdf->set_info('Creator', $creator); $pdf->set_info('Author', $author); $pdf->set_info('Title', $title); $blockContainer = $pdf->open_pdi($fileName, '', 0); if ($blockContainer == 0) { CRM_Core_Error::statusBounce('PDFlib Error: ' . $pdf->get_errmsg()); } for ($i = 1; $i <= $numPages; $i++) { $page = $pdf->open_pdi_page($blockContainer, $i, ''); if ($page == 0) { CRM_Core_Error::statusBounce('PDFlib Error: ' . $pdf->get_errmsg()); } $pdf->begin_page_ext(20, 20, ''); /* dummy page size */ /* This will adjust the page size to the block container's size. */ $pdf->fit_pdi_page($page, 0, 0, 'adjustpage'); $status = array(); /* Fill all text blocks with dynamic data */ foreach ($values as $key => $value) { if (is_array($value)) { continue; } // pdflib does like the forward slash character, hence convert $value = str_replace('/', '_', $value); $res = $pdf->fill_textblock($page, $key, $value, 'embedding encoding=winansi'); /** if ( $res == 0 ) { CRM_Core_Error::debug( "$key, $value: $res", $pdf->get_errmsg( ) ); } else { CRM_Core_Error::debug( "SUCCESS: $key, $value", null ); } **/ } $pdf->end_page_ext(''); $pdf->close_pdi_page($page); } $pdf->end_document(''); $pdf->close_pdi($blockContainer); $buf = $pdf->get_buffer(); $len = strlen($buf); if ($echo) { header('Content-type: application/pdf'); header("Content-Length: {$len}"); header("Content-Disposition: inline; filename={$output}.pdf"); echo $buf; exit; } else { return $buf; } } catch (PDFlibException $excp) { CRM_Core_Error::statusBounce('PDFlib Error: Exception' . "[" . $excp->get_errnum() . "] " . $excp->get_apiname() . ": " . $excp->get_errmsg()); } catch (Exception $excp) { CRM_Core_Error::statusBounce("PDFlib Error: " . $excp->get_errmsg()); } }
/** * Class constructor * * @param string $paper The size of paper to use ({@link PDFLib_Adapter::$PAPER_SIZES}) * @param string $orientation The orientation of the document (either 'landscape' or 'portrait') */ function __construct($paper = "letter", $orientation = "portrait") { if (is_array($paper)) { $size = $paper; } else { if (array_key_exists(strtolower($paper), self::$PAPER_SIZES)) { $size = self::$PAPER_SIZES[$paper]; } else { $size = self::$PAPER_SIZES["letter"]; } } if (strtolower($orientation) == "landscape") { $a = $size[3]; $size[3] = $size[2]; $size[2] = $a; } $this->_width = $size[2]; $this->_height = $size[3]; $this->_pdf = new PDFLib(); $this->_pdf->set_info("Creator", "DOMPDF Converter"); $this->_pdf->set_info("Date", date("Y-m-d")); if (self::$IN_MEMORY) { $this->_pdf->begin_document("", ""); } else { $this->_file = tempnam(DOMPDF_TEMP_DIR, "dompdf_tmp_"); $this->_pdf->begin_document($this->_file, ""); } $this->_pdf->set_parameter("topdown", "true"); $this->_pdf->begin_page_ext($this->_width, $this->_height, ""); $this->_page_number = $this->_page_count = 1; $this->_page_text = null; $this->_imgs = array(); $this->_fonts = array(); $this->_objs = array(); // Set up font paths $families = Font_Metrics::get_font_families(); foreach ($families as $family => $files) { foreach ($files as $style => $file) { $face = basename($file); // Prefer ttfs to afms if (file_exists($file . ".ttf")) { $file .= ".ttf"; } else { if (file_exists($file . ".TTF")) { $file .= ".TTF"; } else { if (file_exists($file . ".pfb")) { $file .= ".pfb"; } else { if (file_exists($file . ".PFB")) { $file .= ".PFB"; } else { continue; } } } } $this->_pdf->set_parameter("FontOutline", "\\{{$face}\\}=\\{{$file}\\}"); } } }
/** * Class constructor * * @param mixed $paper The size of paper to use either a string (see {@link CPDF_Adapter::$PAPER_SIZES}) or * an array(xmin,ymin,xmax,ymax) * @param string $orientation The orientation of the document (either 'landscape' or 'portrait') */ function __construct($paper = "letter", $orientation = "portrait") { if (is_array($paper)) { $size = $paper; } else { if (isset(self::$PAPER_SIZES[mb_strtolower($paper)])) { $size = self::$PAPER_SIZES[$paper]; } else { $size = self::$PAPER_SIZES["letter"]; } } if (mb_strtolower($orientation) == "landscape") { $a = $size[3]; $size[3] = $size[2]; $size[2] = $a; } $this->_width = $size[2] - $size[0]; $this->_height = $size[3] - $size[1]; $this->_pdf = new PDFLib(); if (defined("DOMPDF_PDFLIB_LICENSE")) { $this->_pdf->set_parameter("license", DOMPDF_PDFLIB_LICENSE); } $this->_pdf->set_parameter("textformat", "utf8"); $this->_pdf->set_parameter("fontwarning", "false"); $this->_pdf->set_info("Creator", "DOMPDF Converter"); // Silence pedantic warnings about missing TZ settings if (function_exists("date_default_timezone_get")) { $tz = @date_default_timezone_get(); date_default_timezone_set("UTC"); $this->_pdf->set_info("Date", date("Y-m-d")); date_default_timezone_set($tz); } else { $this->_pdf->set_info("Date", date("Y-m-d")); } if (self::$IN_MEMORY) { $this->_pdf->begin_document("", ""); } else { $this->_file = tempnam(DOMPDF_TEMP_DIR, "dompdf_tmp_"); $this->_pdf->begin_document($this->_file, ""); } $this->_pdf->begin_page_ext($this->_width, $this->_height, ""); $this->_page_number = $this->_page_count = 1; $this->_page_text = array(); $this->_imgs = array(); $this->_fonts = array(); $this->_objs = array(); // Set up font paths $families = Font_Metrics::get_font_families(); foreach ($families as $family => $files) { foreach ($files as $style => $file) { $face = basename($file); // Prefer ttfs to afms if (file_exists($file . ".ttf")) { $file .= ".ttf"; } else { if (file_exists($file . ".TTF")) { $file .= ".TTF"; } else { if (file_exists($file . ".pfb")) { $file .= ".pfb"; } else { if (file_exists($file . ".PFB")) { $file .= ".PFB"; } else { continue; } } } } $this->_pdf->set_parameter("FontOutline", "\\{{$face}\\}=\\{{$file}\\}"); } } }
public function generateTanPdf(Customer $customer, $password) { $tanRepository = $this->getTanRepository(); $tans = array(); for ($i = 0; $i < self::NUMBER_OF_INIT_TANS; $i++) { $tan = Tan::generate($customer->id); if ($tanRepository->saveTan($tan)) { $tans[] = $tan; } } $tans = array_map(function ($tan) { return $tan->value; }, $tans); function wrapWithWhitespace($str, $length) { $neededPadding = $length - strlen($str); $front = floor($neededPadding / 2) > 0 ? floor($neededPadding / 2) : 0; $back = ceil($neededPadding / 2) > 0 ? ceil($neededPadding / 2) : 0; $str = str_repeat(" ", $front) . $str . str_repeat(" ", $back); return substr($str, 0, $length); } try { $p = new \PDFlib(); if ($p->begin_document("", "") == 0) { die("Error: " . $p->get_errmsg()); } $p->set_info("Creator", "SitzBank"); $p->set_info("Author", "SitzBank App"); $p->set_info("Title", "Tans for {$customer->firstname} {$customer->lastname}"); $p->set_parameter("textformat", "utf8"); $p->begin_page_ext(595, 842, ""); $font = $p->load_font("Helvetica-Bold", "winansi", ""); $p->setfont($font, 18.0); $p->set_text_pos(25, 780); $p->show("Tans for {$customer->firstname} {$customer->lastname}"); $font = $p->load_font("Courier", "winansi", ""); $p->setfont($font, 9.0); $p->set_text_pos(20, 750); $p->show(str_repeat("-", 100)); $tansPerRow = 4; for ($i = 0; $i < count($tans); $i += $tansPerRow) { $limit = min($i + $tansPerRow, count($tans)); $row = array_slice($tans, $i, $limit); $row = array_map(function ($str) { return wrapWithWhitespace($str, 25); }, $row); $p->continue_text(implode('|', $row)); } $p->continue_text(str_repeat("-", 100)); $p->end_page_ext(""); $p->end_document(""); $buf = $p->get_buffer(); } catch (\Exception $e) { return JsonErrorResponse::fromKey(JsonErrorResponse::UNEXPECTED_ERROR); } $temp_file = tempnam(sys_get_temp_dir(), 'SBTanPdf'); file_put_contents($temp_file, $buf); $temp_file_output = $temp_file . "-pw"; if (in_array(strtoupper(substr(PHP_OS, 0, 3)), array('DAR', 'WIN'))) { shell_exec("cp {$temp_file} {$temp_file_output}"); } else { shell_exec("/usr/bin/pdftk {$temp_file} output {$temp_file_output} user_pw {$password}"); } return $temp_file_output; }
/** * Class constructor * * @param mixed $paper The size of paper to use either a string (see {@link CPDF_Adapter::$PAPER_SIZES}) or * an array(xmin,ymin,xmax,ymax) * @param string $orientation The orientation of the document (either 'landscape' or 'portrait') * @param DOMPDF $dompdf */ function __construct($paper = "letter", $orientation = "portrait", DOMPDF $dompdf) { if ( is_array($paper) ) { $size = $paper; } else if ( isset(self::$PAPER_SIZES[mb_strtolower($paper)]) ) { $size = self::$PAPER_SIZES[mb_strtolower($paper)]; } else { $size = self::$PAPER_SIZES["letter"]; } if ( mb_strtolower($orientation) === "landscape" ) { list($size[2], $size[3]) = array($size[3], $size[2]); } $this->_width = $size[2] - $size[0]; $this->_height= $size[3] - $size[1]; $this->_dompdf = $dompdf; $this->_pdf = new PDFLib(); if ( defined("DOMPDF_PDFLIB_LICENSE") ) $this->_pdf->set_parameter( "license", DOMPDF_PDFLIB_LICENSE); $this->_pdf->set_parameter("textformat", "utf8"); $this->_pdf->set_parameter("fontwarning", "false"); $this->_pdf->set_info("Creator", "DOMPDF"); // Silence pedantic warnings about missing TZ settings $tz = @date_default_timezone_get(); date_default_timezone_set("UTC"); $this->_pdf->set_info("Date", date("Y-m-d")); date_default_timezone_set($tz); if ( self::$IN_MEMORY ) $this->_pdf->begin_document("",""); else { $tmp_dir = $this->_dompdf->get_options("temp_dir"); $tmp_name = tempnam($tmp_dir, "libdompdf_pdf_"); @unlink($tmp_name); $this->_file = "$tmp_name.pdf"; $this->_pdf->begin_document($this->_file,""); } $this->_pdf->begin_page_ext($this->_width, $this->_height, ""); $this->_page_number = $this->_page_count = 1; $this->_page_text = array(); $this->_imgs = array(); $this->_fonts = array(); $this->_objs = array(); // Set up font paths $families = Font_Metrics::get_font_families(); foreach ($families as $files) { foreach ($files as $file) { $face = basename($file); $afm = null; // Prefer ttfs to afms if ( file_exists("$file.ttf") ) { $outline = "$file.ttf"; } else if ( file_exists("$file.TTF") ) { $outline = "$file.TTF"; } else if ( file_exists("$file.pfb") ) { $outline = "$file.pfb"; if ( file_exists("$file.afm") ) { $afm = "$file.afm"; } } else if ( file_exists("$file.PFB") ) { $outline = "$file.PFB"; if ( file_exists("$file.AFM") ) { $afm = "$file.AFM"; } } else { continue; } $this->_pdf->set_parameter("FontOutline", "\{$face\}=\{$outline\}"); if ( !is_null($afm) ) { $this->_pdf->set_parameter("FontAFM", "\{$face\}=\{$afm\}"); } } } }
$sql = "SELECT content FROM site_text WHERE tname = '" . eCRC(dirname($environment["ebene"])) . "." . basename($environment["ebene"]) . "' AND status = '1'"; if ($debugging["sql_enable"]) { $debugging["ausgabe"] .= "sql: " . $sql . $debugging["char"]; } $result = $db->query($sql); $data = $db->fetch_array($result, 1); $test = content_split_all($data["content"]); $mutate["H"] = array("H"); #$mutate["B"] = array(""); $mutate["P"] = array("P"); $pdf = new PDFlib(); $pdf->begin_document("", "lang=de tagged=true"); $pdf->set_info("Creator", "hello.php"); $pdf->set_info("Author", "STI"); $pdf->set_info("Title", "Hello world (PHP)!"); $pdf->set_parameter("autospace", "true"); $doc = $pdf->begin_item("Document", "Title=Buffy"); $pdf->begin_page_ext(0, 0, "width=a4.width height=a4.height"); $font = $pdf->load_font("Helvetica", "unicode", ""); $pdf->setfont($font, 10); $fontname = $pdf->get_parameter("fontname", 0); $count = 0; $i = 0; foreach ($tag_sort as $key => $value) { if (array_key_exists($value["para"][0], $mutate)) { if ($value["start"] > $count) { $out[$i] = substr($data["content"], $value["start"], $value["end"] - $value["start"]); $count = $value["end"]; $buffy = 0; } else { if ($buffy == -1) {
public function customerTransactionsPdf(Request $request, $id) { $transactionRepository = $this->getTransactionRepository(); $customerRepository = $this->getCustomerRepository(); $transactions = $transactionRepository->getCustomerTransactions($id); $customer = $customerRepository->getCustomerById($id); if (is_null($customer)) { return JsonErrorResponse::fromKey(JsonErrorResponse::INVALID_CUSTOMER_ID); } //add customer data foreach ($transactions as $trans) { $trans->from_customer = $customerRepository->getCustomerById($trans->from_id); $trans->to_customer = $customerRepository->getCustomerById($trans->to_id); } function wrapWithWhitespace($str, $length) { $neededPadding = $length - strlen($str); $front = floor($neededPadding / 2) > 0 ? floor($neededPadding / 2) : 0; $back = ceil($neededPadding / 2) > 0 ? ceil($neededPadding / 2) : 0; $str = str_repeat(" ", $front) . $str . str_repeat(" ", $back); return substr($str, 0, $length); } try { $p = new \PDFlib(); if ($p->begin_document("", "") == 0) { die("Error: " . $p->get_errmsg()); } $p->set_info("Creator", "SitzBank"); $p->set_info("Author", "SitzBank App"); $p->set_info("Title", "Transactions for {$customer->firstname} {$customer->lastname}"); $p->set_parameter("textformat", "utf8"); $p->begin_page_ext(595, 842, ""); $font = $p->load_font("Helvetica-Bold", "winansi", ""); $p->setfont($font, 18.0); $p->set_text_pos(25, 780); $p->show("Transactions for {$customer->firstname} {$customer->lastname}"); $font = $p->load_font("Courier", "winansi", ""); $p->setfont($font, 9.0); $p->set_text_pos(20, 750); $p->show(str_repeat("-", 100)); $header = array('Time', 'From', 'To', 'Amount', 'Status'); $header = array_map(function ($str) { return wrapWithWhitespace($str, 19); }, $header); $p->continue_text(implode('|', $header)); foreach ($transactions as $trans) { $p->continue_text(str_repeat("-", 100)); $row = array($trans->timestamp, $trans->from_customer->firstname . ' ' . $trans->from_customer->lastname, $trans->to_customer->firstname . ' ' . $trans->to_customer->lastname, $trans->amount, $trans->status); $row = array_map(function ($str) { return wrapWithWhitespace($str, 19); }, $row); $p->continue_text(implode('|', $row)); $p->continue_text("Description: {$trans->description}"); } $p->continue_text(str_repeat("=", 100)); $p->continue_text(str_repeat(" ", 100)); $p->setfont($font, 12.0); $p->continue_text("Balance: " . $customerRepository->getCustomerBalance($customer->id)); $p->end_page_ext(""); $p->end_document(""); $buf = $p->get_buffer(); $len = strlen($buf); } catch (\Exception $e) { return JsonErrorResponse::fromKey(JsonErrorResponse::UNEXPECTED_ERROR); } header("Content-type: application/pdf"); header("Content-Length: {$len}"); header("Content-Disposition: inline; filename=transactions.pdf"); return $buf; }
public function render() { if (!$this->ops_form) { return "No form to render"; } $vn_margin_left_px = $this->getFormSetting('marginLeft'); $vn_margin_top_px = $this->getFormSetting('marginTop'); $vn_margin_right_px = $this->getFormSetting('marginRight'); $vn_margin_bottom_px = $this->getFormSetting('marginBottom'); $vn_page_width_px = $this->getFormSetting('pageWidth'); $vn_page_height_px = $this->getFormSetting('pageHeight'); $vn_subform_width_px = $this->getFormSetting('subFormWidth'); $vn_subform_height_px = $this->getFormSetting('subFormHeight'); $vn_subform_hgutter_px = $this->getFormSetting('horizontalGutter'); $vn_subform_vgutter_px = $this->getFormSetting('verticalGutter'); $vb_subform_use_border = (bool) $this->getFormSetting('useBorder'); $vn_subform_border_dash = (int) $this->getFormSetting('borderDash'); $this->opa_images = array(); // cache of images loaded into new PDF $this->opa_fonts = array(); // cache of fonts used in new PDF if ($this->getPDFLibrary() == __PDF_LIBRARY_ZEND__) { $o_pdf = new Zend_Pdf(); $o_pdf->pages[] = $o_pdf->newPage($vn_page_width_px, $vn_page_height_px); } else { $o_pdf = new PDFlib(); $o_pdf->set_parameter("errorpolicy", "return"); $o_pdf->begin_document("", "openmode=none"); $o_pdf->begin_page_ext($vn_page_width_px, $vn_page_height_px, ""); } $this->setFont($o_pdf, "Helvetica", 12); // default // Render page elements foreach ($this->opa_form_page_elements as $vs_name => $vo_element) { $vo_element->render($o_pdf); } // Render sub-forms // $this->renderPageElements($o_pdf, 0); $vn_x = $vn_margin_left_px; $vn_y = $vn_page_height_px - $vn_margin_top_px; $vn_num_subforms = sizeof($this->opo_subforms); if ($this->opa_starting_subform > 0) { for ($vn_i = 0; $vn_i < $this->opa_starting_subform; $vn_i++) { $vn_x += $vn_subform_vgutter_px + $vn_subform_width_px; if ($vn_x + $vn_subform_width_px > $vn_page_width_px) { $vn_x = $vn_margin_left_px; $vn_y -= $vn_subform_hgutter_px + $vn_subform_height_px; if ($vn_y - $vn_subform_height_px < $vn_margin_bottom_px && $vn_i < $vn_num_subforms - 1) { # need new page! $vn_x = $vn_margin_left_px; $vn_y = $vn_page_height_px - $vn_margin_top_px; } } } } $vn_cur_page = 0; for ($vn_i = 0; $vn_i < $vn_num_subforms; $vn_i++) { $o_subform = $this->opo_subforms[$vn_i]; $o_subform->setOutline($vb_subform_use_border ? 1 : 0, $vn_subform_border_dash); $o_subform->render($o_pdf, $vn_x, $vn_y); $vn_x += $vn_subform_vgutter_px + $vn_subform_width_px; if ($vn_x + $vn_subform_width_px > $vn_page_width_px) { $vn_x = $vn_margin_left_px; $vn_y -= $vn_subform_hgutter_px + $vn_subform_height_px; if ($vn_y - $vn_subform_height_px < $vn_margin_bottom_px && $vn_i < $vn_num_subforms - 1) { # need new page! $vn_cur_page++; if ($this->getPDFLibrary() == __PDF_LIBRARY_ZEND__) { $o_pdf->pages[] = $o_pdf->newPage($vn_page_width_px, $vn_page_height_px); } else { $o_pdf->end_page_ext(""); $o_pdf->begin_page_ext($vn_page_width_px, $vn_page_height_px, ""); } $this->setFont($o_pdf, "Helvetica", 12); // default $this->renderPageElements($o_pdf, $vn_cur_page); $vn_x = $vn_margin_left_px; $vn_y = $vn_page_height_px - $vn_margin_top_px; } } } if ($this->getPDFLibrary() == __PDF_LIBRARY_ZEND__) { return $o_pdf->render(); } else { $o_pdf->end_page_ext(""); foreach ($this->opa_images as $vs_path => $vn_image_ref) { $o_pdf->close_image($vn_image_ref); } $o_pdf->end_document(""); return $o_pdf->get_buffer(); } }
/** * Returns the CFD as PDF * * @param array $data the CFD array * @param boolean $print_headers if set true, it prints the PDF directly * @return mixed */ public static function getPDF(array &$data, $print_headers = false) { try { $p = new PDFlib(); $p->set_parameter("errorpolicy", "return"); if ($p->begin_document("", "") == 0) { die("Error: " . $p->get_errmsg()); } $p->set_info("Creator", "SimpleCFD.php"); $p->set_info("Author", self::encText($data['Emisor']['nombre'])); $p->set_info("Title", "Factura No. " . $data['folio']); $p->set_info("Subject", "Factura emitada a " . self::encText($data['Receptor']['nombre']) . " el " . $data['fecha']); // set letter size $p->begin_page_ext(612, 792, ""); $font = $p->load_font("Helvetica-Bold", "iso8859-1", ""); $p->setfont($font, 12); $p->fit_textline("Factura", 30, 750, "fontsize=16 position=left"); // Serie if (isset($data['serie'])) { $p->fit_textline("Serie: ", 120, 765, "fontsize=8 fillcolor={rgb 0.6 0.3 0.6} " . "position={bottom left} boxsize={25 10}"); $p->fit_textline($data['serie'], 145, 765, "fontsize=8 " . "position={bottom left} boxsize={60 10}"); } // Folio $p->fit_textline("Folio: ", 120, 750, "fontsize=8 fillcolor={rgb 0.6 0.3 0.6} " . "position={bottom left} boxsize={25 10}"); $p->fit_textline($data['folio'], 145, 750, "fontsize=8 " . "position={bottom left} boxsize={90 10}"); // AnoAprobacion $p->fit_textline(self::encText("Año de Aprobación: "), 250, 765, "fontsize=8 fillcolor={rgb 0.6 0.3 0.6} " . "position={bottom left} boxsize={80 10}"); $p->fit_textline($data['anoAprobacion'], 330, 765, "fontsize=8 " . "position={bottom left} boxsize={20 10}"); // NoAprobacion $p->fit_textline(self::encText("Número de Aprobación: "), 250, 750, "fontsize=8 fillcolor={rgb 0.6 0.3 0.6} " . "position={bottom left} boxsize={95 10}"); $p->fit_textline($data['noAprobacion'], 345, 750, "fontsize=8 " . "position={bottom left} boxsize={65 10}"); // Fecha $p->fit_textline("Fecha:", 425, 750, "fontsize=8 fillcolor={rgb 0.6 0.3 0.6} " . "position={bottom left} boxsize={30 10}"); $p->fit_textline($data['fecha'], 455, 750, "fontsize=8 " . "position={bottom left} boxsize={80 10}"); // line $p->moveto(30, 740); $p->lineto(580, 740); $p->stroke(); $p->setlinewidth(0.5); // Emisor $p->fit_textline("Emisor", 30, 720, "fontsize=10 fillcolor={rgb 0.6 0.3 0.6} " . "position={bottom left} boxsize={200 20}"); $p->fit_textline(self::encText($data['Emisor']['nombre']), 30, 695, "fontsize=18 " . "position={bottom left} boxsize={270 20}"); $p->fit_textline("RFC: " . $data['Emisor']['rfc'], 30, 675, "fontsize=14 " . "position={bottom left} boxsize={270 15}"); $domicilio = self::encText($data['DomicilioFiscal']['calle']) . " No. " . $data['DomicilioFiscal']['noExterior']; $domicilio .= isset($data['DomicilioFiscal']['noInterior']) ? " - " . $data['DomicilioFiscal']['noInterior'] : ''; $p->fit_textline(self::encText($domicilio), 30, 660, "fontsize=12 " . "position={bottom left} boxsize={270 10}"); unset($domicilio); $p->fit_textline(self::encText($data['DomicilioFiscal']['colonia']), 30, 645, "fontsize=12 " . "position={bottom left} boxsize={270 10}"); $p->fit_textline(self::encText($data['DomicilioFiscal']['municipio']), 30, 630, "fontsize=12 " . "position={bottom left} boxsize={270 10}"); $p->fit_textline("C.P. " . $data['DomicilioFiscal']['codigoPostal'], 30, 615, "fontsize=12 " . "position={bottom left} boxsize={270 10}"); $p->fit_textline(self::encText($data['DomicilioFiscal']['estado']), 30, 600, "fontsize=12 " . "position={bottom left} boxsize={270 10}"); // Receptor $p->fit_textline("Receptor", 380, 720, "fontsize=10 fillcolor={rgb 0.6 0.3 0.6} " . "position={bottom right} boxsize={200 20}"); $p->fit_textline(self::encText($data['Receptor']['nombre']), 310, 695, "fontsize=18 " . "position={bottom right} boxsize={270 20}"); $p->fit_textline("RFC: " . $data['Receptor']['rfc'], 310, 675, "fontsize=14 " . "position={bottom right} boxsize={270 15}"); $domicilio = self::encText($data['Domicilio']['calle']) . " No. " . $data['Domicilio']['noExterior']; $domicilio .= isset($data['Domicilio']['noInterior']) ? " - " . $data['Domicilio']['noInterior'] : ''; $p->fit_textline($domicilio, 310, 660, "fontsize=12 " . "position={bottom right} boxsize={270 10}"); unset($domicilio); $p->fit_textline(self::encText($data['Domicilio']['colonia']), 310, 645, "fontsize=12 " . "position={bottom right} boxsize={270 10}"); $p->fit_textline(self::encText($data['Domicilio']['municipio']), 310, 630, "fontsize=12 " . "position={bottom right} boxsize={270 10}"); $p->fit_textline("C.P. " . $data['Domicilio']['codigoPostal'], 310, 615, "fontsize=12 " . "position={bottom right} boxsize={270 10}"); $p->fit_textline(self::encText($data['Domicilio']['estado']), 310, 600, "fontsize=12 " . "position={bottom right} boxsize={270 10}"); // line $p->moveto(30, 585); $p->lineto(580, 585); $p->stroke(); // Concepto // Cantidad $p->fit_textline("Cantidad", 30, 565, "fontsize=11 fillcolor={rgb 0.6 0.3 0.6} " . "position={bottom left} boxsize={50 10}"); // Descripcion $p->fit_textline(self::encText("Descripción"), 100, 565, "fontsize=11 fillcolor={rgb 0.6 0.3 0.6} " . "position={bottom left} boxsize={65 10}"); // Precio $p->fit_textline("Precio", 483, 565, "fontsize=11 fillcolor={rgb 0.6 0.3 0.6} " . "position={bottom left} boxsize={35 10}"); // Importe $p->fit_textline("Importe", 540, 565, "fontsize=11 fillcolor={rgb 0.6 0.3 0.6} " . "position={bottom left} boxsize={40 10}"); // line $p->moveto(30, 555); $p->lineto(580, 555); $p->stroke(); $count = count($data['Concepto']); static $pos = 552; for ($i = 0; $i < $count; ++$i) { $pos -= 20; // Cantidad $p->fit_textline($data['Concepto'][$i]['cantidad'], 30, $pos, "fontsize=9 " . "position={bottom left} boxsize={145 10}"); // Descripcion $p->fit_textline($data['Concepto'][$i]['descripcion'], 100, $pos, "fontsize=9 " . "position={bottom left} boxsize={145 10}"); // Valor unitario $p->fit_textline($data['Concepto'][$i]['valorUnitario'], 483, $pos, "fontsize=9 " . "position={bottom left} boxsize={145 10}"); // Importe $p->fit_textline($data['Concepto'][$i]['importe'], 435, $pos, "fontsize=9 " . "position={bottom right} boxsize={145 10}"); } // line cantidad $p->moveto(90, 580); $p->lineto(90, $pos - 10); $p->stroke(); // line descripcion $p->moveto(470, 580); $p->lineto(470, $pos - 10); $p->stroke(); // line $p->moveto(30, $pos - 20); $p->lineto(580, $pos - 20); $p->stroke(); // Subtotal $pos -= 40; $p->fit_textline("SubTotal", 375, $pos, "fontsize=9 fillcolor={rgb 0.6 0.3 0.6} " . "position={bottom right} boxsize={145 10}"); $p->fit_textline($data['subTotal'], 435, $pos, "fontsize=9 " . "position={bottom right} boxsize={145 10}"); // Traslado if (isset($data['Traslado'])) { $count = count($data['Traslado']); for ($i = 0; $i < $count; ++$i) { $pos -= 20; $p->fit_textline($data['Traslado'][$i]['impuesto'], 375, $pos, "fontsize=9 fillcolor={rgb 0.6 0.3 0.6} " . "position={bottom right} boxsize={145 10}"); $p->fit_textline(" (Tasa: " . $data['Traslado'][$i]['tasa'] . "%)", 357, $pos + 1, "fontsize=6 fillcolor={rgb 0.6 0.3 0.6} " . "position={bottom right} boxsize={145 10}"); $p->fit_textline($data['Traslado'][$i]['importe'], 435, $pos, "fontsize=9 " . "position={bottom right} boxsize={145 10}"); } } // Retencion if (isset($data['Retencion'])) { $count = count($data['Retencion']); for ($i = 0; $i < $count; ++$i) { $pos -= 20; $p->fit_textline(self::encText("Retención ") . $data['Retencion'][$i]['impuesto'], 375, $pos, "fontsize=9 fillcolor={rgb 0.6 0.3 0.6} " . "position={bottom right} boxsize={145 10}"); $p->fit_textline($data['Retencion'][$i]['importe'], 435, $pos, "fontsize=9 " . "position={bottom right} boxsize={145 10}"); } } // Total $pos -= 20; $p->fit_textline("Total", 375, $pos, "fontsize=9 fillcolor={rgb 0.6 0.3 0.6} " . "position={bottom right} boxsize={145 10}"); $p->fit_textline($data['total'], 435, $pos, "fontsize=9 " . "position={bottom right} boxsize={145 10}"); // line importe $pos -= 10; $p->moveto(530, 580); $p->lineto(530, $pos); $p->stroke(); // line $pos -= 10; $p->moveto(30, $pos); $p->lineto(580, $pos); $p->stroke(); // noCertificado $pos -= 20; $p->fit_textline(self::encText("Número de Serie del Certificado:"), 30, $pos, "fontsize=9 fillcolor={rgb 0.6 0.3 0.6} " . "position={bottom left} boxsize={145 10}"); $p->fit_textline(self::encText($data['noCertificado']), 175, $pos, "fontsize=9 position={bottom left} boxsize={100 10}"); // cadenaOriginal $p->fit_textline("Cadena original:", 30, $pos - 20, "fontsize=9 fillcolor={rgb 0.6 0.3 0.6} " . "position={bottom left} boxsize={75 10}"); $cad = explode(":::", wordwrap(self::encText($data['cadenaOriginal']), 150, ":::", true)); $count = count($cad); $position_cad = $pos - 20; for ($i = 0; $i < $count; ++$i) { $position_cad -= 10; $p->fit_textline($cad[$i], 30, $position_cad, "fontsize=7 position={bottom left} boxsize={550 10}"); } unset($count); // sello $position_cer = $position_cad - 20; $p->fit_textline("Sello Digital:", 30, $position_cer, "fontsize=9 fillcolor={rgb 0.6 0.3 0.6} " . "position={bottom left} boxsize={60 10}"); $cer = explode(":::", wordwrap($data['sello'], 115, ":::", true)); $count = count($cer); $position = $position_cer; for ($i = 0; $i < $count; ++$i) { $position -= 10; $p->fit_textline(self::encText($cer[$i]), 30, $position, "fontsize=7 position={bottom left} boxsize={550 10}"); } unset($count); unset($cer); // note CFD $p->fit_textline(self::encText("Este documento es una impresión de un " . "Comprobante Fiscal Digital "), 150, $position - 30, "fontsize=10 " . "position={bottom left} boxsize={320 10}"); $p->end_page_ext(""); $p->end_document(""); $buf = $p->get_buffer(); unset($p); if ($print_headers) { $len = strlen($buf); header("Content-type: application/pdf"); header("Content-Length: {$len}"); header("Content-Disposition: inline; filename=hello.pdf"); echo $buf; exit; } return $buf; } catch (PDFlibException $e) { die("PDFlib exception occurred in Factura:\n" . "[" . $e->get_errnum() . "] " . $e->get_apiname() . ": " . $e->get_errmsg() . "\n"); } catch (Exception $e) { die($e); } }
/** * Class constructor * * @param mixed $paper The size of paper to use either a string (see {@link Dompdf\Adapter\CPDF::$PAPER_SIZES}) or * an array(xmin,ymin,xmax,ymax) * @param string $orientation The orientation of the document (either 'landscape' or 'portrait') * @param Dompdf $dompdf */ function __construct($paper = "letter", $orientation = "portrait", Dompdf $dompdf) { if (is_array($paper)) { $size = $paper; } else { if (isset(self::$PAPER_SIZES[mb_strtolower($paper)])) { $size = self::$PAPER_SIZES[mb_strtolower($paper)]; } else { $size = self::$PAPER_SIZES["letter"]; } } if (mb_strtolower($orientation) === "landscape") { list($size[2], $size[3]) = array($size[3], $size[2]); } $this->_width = $size[2] - $size[0]; $this->_height = $size[3] - $size[1]; $this->_dompdf = $dompdf; $this->_pdf = new \PDFLib(); $license = $dompdf->get_option('pdflibLicense'); if (strlen($license) > 0) { $this->_pdf->set_parameter("license", $license); } $this->_pdf->set_parameter("textformat", "utf8"); $this->_pdf->set_parameter("fontwarning", "false"); // TODO: fetch PDFLib version information for the producer field $this->_pdf->set_info("Producer", sprintf("%s + PDFLib", $dompdf->version)); // Silence pedantic warnings about missing TZ settings $tz = @date_default_timezone_get(); date_default_timezone_set("UTC"); $this->_pdf->set_info("Date", date("Y-m-d")); date_default_timezone_set($tz); if (self::$IN_MEMORY) { $this->_pdf->begin_document("", ""); } else { $tmp_dir = $this->_dompdf->get_options("temp_dir"); $tmp_name = tempnam($tmp_dir, "libdompdf_pdf_"); @unlink($tmp_name); $this->_file = "{$tmp_name}.pdf"; $this->_pdf->begin_document($this->_file, ""); } $this->_pdf->begin_page_ext($this->_width, $this->_height, ""); $this->_page_number = $this->_page_count = 1; $this->_page_text = array(); $this->_imgs = array(); $this->_fonts = array(); $this->_objs = array(); // Set up font paths $families = $dompdf->getFontMetrics->getFontFamilies(); foreach ($families as $files) { foreach ($files as $file) { $face = basename($file); $afm = null; // Prefer ttfs to afms if (file_exists("{$file}.ttf")) { $outline = "{$file}.ttf"; } else { if (file_exists("{$file}.TTF")) { $outline = "{$file}.TTF"; } else { if (file_exists("{$file}.pfb")) { $outline = "{$file}.pfb"; if (file_exists("{$file}.afm")) { $afm = "{$file}.afm"; } } else { if (file_exists("{$file}.PFB")) { $outline = "{$file}.PFB"; if (file_exists("{$file}.AFM")) { $afm = "{$file}.AFM"; } } else { continue; } } } } $this->_pdf->set_parameter("FontOutline", "\\{{$face}\\}=\\{{$outline}\\}"); if (!is_null($afm)) { $this->_pdf->set_parameter("FontAFM", "\\{{$face}\\}=\\{{$afm}\\}"); } } } }