From 81f09bb5e2ffad8f371f23160dda5313daee1645 Mon Sep 17 00:00:00 2001 From: Flatlogic Bot Date: Fri, 9 Jan 2026 10:33:15 +0000 Subject: [PATCH] Dodane sugestie wskazane przez klienta (pdf, logo) --- assets/pasted-20260109-101826-fd5e170e.jpg | Bin 0 -> 57698 bytes assets/pasted-20260109-102314-972f2719.jpg | Bin 0 -> 45435 bytes debug_price.log | 1179 ++++++++ generate_order_pdf.php | 179 ++ includes/fpdf/font/courier.php | 10 + includes/fpdf/font/courierb.php | 10 + includes/fpdf/font/courierbi.php | 10 + includes/fpdf/font/courieri.php | 10 + includes/fpdf/font/helvetica.php | 21 + includes/fpdf/font/helveticab.php | 21 + includes/fpdf/font/helveticabi.php | 21 + includes/fpdf/font/helveticai.php | 21 + includes/fpdf/font/symbol.php | 20 + includes/fpdf/font/times.php | 21 + includes/fpdf/font/timesb.php | 21 + includes/fpdf/font/timesbi.php | 21 + includes/fpdf/font/timesi.php | 21 + includes/fpdf/font/zapfdingbats.php | 20 + includes/fpdf/fpdf.php | 1934 ++++++++++++++ includes/header.php | 26 +- includes/i18n.php | 22 + includes/tfpdf/font/courier.php | 8 + includes/tfpdf/font/courierb.php | 8 + includes/tfpdf/font/courierbi.php | 8 + includes/tfpdf/font/courieri.php | 8 + includes/tfpdf/font/helvetica.php | 19 + includes/tfpdf/font/helveticab.php | 19 + includes/tfpdf/font/helveticabi.php | 19 + includes/tfpdf/font/helveticai.php | 19 + includes/tfpdf/font/symbol.php | 19 + includes/tfpdf/font/times.php | 19 + includes/tfpdf/font/timesb.php | 19 + includes/tfpdf/font/timesbi.php | 19 + includes/tfpdf/font/timesi.php | 19 + .../tfpdf/font/unifont/DejaVuSans-Bold.ttf | Bin 0 -> 705684 bytes .../font/unifont/DejaVuSans-BoldOblique.ttf | Bin 0 -> 643292 bytes .../font/unifont/DejaVuSans-ExtraLight.ttf | Bin 0 -> 355380 bytes .../tfpdf/font/unifont/DejaVuSans-Oblique.ttf | Bin 0 -> 635416 bytes includes/tfpdf/font/unifont/DejaVuSans.ttf | Bin 0 -> 757076 bytes .../font/unifont/DejaVuSansCondensed-Bold.ttf | Bin 0 -> 665028 bytes .../DejaVuSansCondensed-BoldOblique.ttf | Bin 0 -> 611836 bytes .../unifont/DejaVuSansCondensed-Oblique.ttf | Bin 0 -> 599292 bytes .../font/unifont/DejaVuSansCondensed.ttf | Bin 0 -> 680264 bytes .../font/unifont/DejaVuSansMono-Bold.ttf | Bin 0 -> 331992 bytes .../unifont/DejaVuSansMono-BoldOblique.ttf | Bin 0 -> 253580 bytes .../font/unifont/DejaVuSansMono-Oblique.ttf | Bin 0 -> 251932 bytes .../tfpdf/font/unifont/DejaVuSansMono.ttf | Bin 0 -> 340712 bytes .../tfpdf/font/unifont/DejaVuSerif-Bold.ttf | Bin 0 -> 356088 bytes .../font/unifont/DejaVuSerif-BoldItalic.ttf | Bin 0 -> 347460 bytes .../tfpdf/font/unifont/DejaVuSerif-Italic.ttf | Bin 0 -> 345996 bytes includes/tfpdf/font/unifont/DejaVuSerif.ttf | Bin 0 -> 380132 bytes .../unifont/DejaVuSerifCondensed-Bold.ttf | Bin 0 -> 331244 bytes .../DejaVuSerifCondensed-BoldItalic.ttf | Bin 0 -> 346508 bytes .../unifont/DejaVuSerifCondensed-Italic.ttf | Bin 0 -> 345324 bytes .../font/unifont/DejaVuSerifCondensed.ttf | Bin 0 -> 346664 bytes .../tfpdf/font/unifont/DejaVu_LICENSE.txt | 99 + includes/tfpdf/font/unifont/ttfonts.php | 1090 ++++++++ includes/tfpdf/font/zapfdingbats.php | 19 + includes/tfpdf/tfpdf.php | 2371 +++++++++++++++++ order_details.php | 3 +- orders.php | 3 + 61 files changed, 7365 insertions(+), 11 deletions(-) create mode 100644 assets/pasted-20260109-101826-fd5e170e.jpg create mode 100644 assets/pasted-20260109-102314-972f2719.jpg create mode 100644 generate_order_pdf.php create mode 100644 includes/fpdf/font/courier.php create mode 100644 includes/fpdf/font/courierb.php create mode 100644 includes/fpdf/font/courierbi.php create mode 100644 includes/fpdf/font/courieri.php create mode 100644 includes/fpdf/font/helvetica.php create mode 100644 includes/fpdf/font/helveticab.php create mode 100644 includes/fpdf/font/helveticabi.php create mode 100644 includes/fpdf/font/helveticai.php create mode 100644 includes/fpdf/font/symbol.php create mode 100644 includes/fpdf/font/times.php create mode 100644 includes/fpdf/font/timesb.php create mode 100644 includes/fpdf/font/timesbi.php create mode 100644 includes/fpdf/font/timesi.php create mode 100644 includes/fpdf/font/zapfdingbats.php create mode 100644 includes/fpdf/fpdf.php create mode 100644 includes/tfpdf/font/courier.php create mode 100644 includes/tfpdf/font/courierb.php create mode 100644 includes/tfpdf/font/courierbi.php create mode 100644 includes/tfpdf/font/courieri.php create mode 100644 includes/tfpdf/font/helvetica.php create mode 100644 includes/tfpdf/font/helveticab.php create mode 100644 includes/tfpdf/font/helveticabi.php create mode 100644 includes/tfpdf/font/helveticai.php create mode 100644 includes/tfpdf/font/symbol.php create mode 100644 includes/tfpdf/font/times.php create mode 100644 includes/tfpdf/font/timesb.php create mode 100644 includes/tfpdf/font/timesbi.php create mode 100644 includes/tfpdf/font/timesi.php create mode 100644 includes/tfpdf/font/unifont/DejaVuSans-Bold.ttf create mode 100644 includes/tfpdf/font/unifont/DejaVuSans-BoldOblique.ttf create mode 100644 includes/tfpdf/font/unifont/DejaVuSans-ExtraLight.ttf create mode 100644 includes/tfpdf/font/unifont/DejaVuSans-Oblique.ttf create mode 100644 includes/tfpdf/font/unifont/DejaVuSans.ttf create mode 100644 includes/tfpdf/font/unifont/DejaVuSansCondensed-Bold.ttf create mode 100644 includes/tfpdf/font/unifont/DejaVuSansCondensed-BoldOblique.ttf create mode 100644 includes/tfpdf/font/unifont/DejaVuSansCondensed-Oblique.ttf create mode 100644 includes/tfpdf/font/unifont/DejaVuSansCondensed.ttf create mode 100644 includes/tfpdf/font/unifont/DejaVuSansMono-Bold.ttf create mode 100644 includes/tfpdf/font/unifont/DejaVuSansMono-BoldOblique.ttf create mode 100644 includes/tfpdf/font/unifont/DejaVuSansMono-Oblique.ttf create mode 100644 includes/tfpdf/font/unifont/DejaVuSansMono.ttf create mode 100644 includes/tfpdf/font/unifont/DejaVuSerif-Bold.ttf create mode 100644 includes/tfpdf/font/unifont/DejaVuSerif-BoldItalic.ttf create mode 100644 includes/tfpdf/font/unifont/DejaVuSerif-Italic.ttf create mode 100644 includes/tfpdf/font/unifont/DejaVuSerif.ttf create mode 100644 includes/tfpdf/font/unifont/DejaVuSerifCondensed-Bold.ttf create mode 100644 includes/tfpdf/font/unifont/DejaVuSerifCondensed-BoldItalic.ttf create mode 100644 includes/tfpdf/font/unifont/DejaVuSerifCondensed-Italic.ttf create mode 100644 includes/tfpdf/font/unifont/DejaVuSerifCondensed.ttf create mode 100644 includes/tfpdf/font/unifont/DejaVu_LICENSE.txt create mode 100644 includes/tfpdf/font/unifont/ttfonts.php create mode 100644 includes/tfpdf/font/zapfdingbats.php create mode 100644 includes/tfpdf/tfpdf.php diff --git a/assets/pasted-20260109-101826-fd5e170e.jpg b/assets/pasted-20260109-101826-fd5e170e.jpg new file mode 100644 index 0000000000000000000000000000000000000000..644375b4156dc3ad8bda9d2ef3702fdb33d54f53 GIT binary patch literal 57698 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

UZBq>B0IqXQO$h5Vppjx9cZ6$qfL|oXLI?!}Y=$ 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 Q26XU{KZih`?VpbS1HJ`3@Bjb+ literal 0 HcmV?d00001 diff --git a/assets/pasted-20260109-102314-972f2719.jpg b/assets/pasted-20260109-102314-972f2719.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1feb606de28f340c23cb0e7f8016cfbcbec46341 GIT binary patch literal 45435 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"SELECT o.*, c.name as client_name, c.email as client_email FROM orders o JOIN clients c ON o.client_id = c.id WHERE o.id = ?"); +$stmt->execute([$order_id]); +$order = $stmt->fetch(PDO::FETCH_ASSOC); + +if (!$order) { + die('Order not found.'); +} + +$stmt = db()->prepare("SELECT oi.*, p.name as product_name FROM order_items oi JOIN products p ON oi.product_id = p.id WHERE oi.order_id = ?"); +$stmt->execute([$order_id]); +$order_items = $stmt->fetchAll(PDO::FETCH_ASSOC); + +class PDF extends tFPDF +{ + function Header() + { + $this->Image('assets/pasted-20260109-102314-972f2719.jpg', 10, 6, 60); + $this->SetFont('DejaVu', 'B', 15); + $this->SetY(30); + $this->Cell(80); + $this->Cell(30, 10, t('pdf_order_details_title'), 0, 0, 'C'); + $this->Ln(20); + } + + function Footer() + { + $this->SetY(-15); + $this->SetFont('DejaVu', 'I', 8); + $this->Cell(0, 10, 'Page ' . $this->PageNo() . '/{nb}', 0, 0, 'C'); + } +} + +$pdf = new PDF(); +$pdf->AliasNbPages(); +$pdf->AddFont('DejaVu','','DejaVuSansCondensed.ttf',true); +$pdf->AddFont('DejaVu','B','DejaVuSansCondensed-Bold.ttf',true); +$pdf->AddFont('DejaVu','I','DejaVuSansCondensed-Oblique.ttf',true); +$pdf->AddFont('DejaVu','BI','DejaVuSansCondensed-BoldOblique.ttf',true); +$pdf->AddPage(); +$pdf->SetFont('DejaVu', '', 12); + +$pdf->Cell(0, 10, t('pdf_order_id') . ': ' . $order['id'], 0, 1); +$pdf->Cell(0, 10, t('pdf_client') . ': ' . $order['client_name'], 0, 1); +$pdf->Cell(0, 10, t('pdf_email') . ': ' . $order['client_email'], 0, 1); +$pdf->Cell(0, 10, t('status') . ': ' . t_status($order['status']), 0, 1); +$pdf->Cell(0, 10, t('payment_method') . ': ' . t_status($order['payment_method']), 0, 1); +$pdf->Cell(0, 10, t('total_gross') . ': ' . format_money($order['total_amount'], $_SESSION['lang'] ?? 'pl', db()), 0, 1); +$pdf->MultiCell(0, 10, t('notes') . ': ' . $order['notes'], 0, 1); +$pdf->Cell(0, 10, t('pdf_created_at') . ': ' . $order['created_at'], 0, 1); + +$pdf->Ln(10); + +$pdf->SetFont('DejaVu', 'B', 12); +$lineHeight = 5; + +// Headers +$headers = [ + ['width' => 70, 'text' => t('product')], + ['width' => 30, 'text' => t('quantity')], + ['width' => 30, 'text' => t('unit_price_net')], + ['width' => 30, 'text' => t('unit_price_gross')], + ['width' => 30, 'text' => t('total_gross')], +]; + +$padding = 2; + +// Calculate maximum header height without drawing text (by using a temporary white text color) +$pdf->SetTextColor(255, 255, 255); +$maxHeight = 0; +$x = $pdf->GetX(); +$y = $pdf->GetY(); + +$cellHeights = []; +foreach ($headers as $header) { + $startY = $y; + // We need to clone the object to avoid moving the cursor on the main object + $tempPdf = clone $pdf; + $tempPdf->SetXY($x + $padding, $y); + $tempPdf->MultiCell($header['width'] - $padding * 2, $lineHeight, $header['text'], 0, 'L'); + $cellHeight = $tempPdf->GetY() - $startY; + $cellHeights[] = $cellHeight; + $x += $header['width']; +} +$headerContentHeight = max($cellHeights); +$headerRowHeight = $headerContentHeight + $padding * 2; + + +// Restore text color and position +$pdf->SetTextColor(0, 0, 0); +$pdf->SetXY($pdf->GetX(), $y); + + +// Draw headers with calculated height +$x = $pdf->GetX(); +$y = $pdf->GetY(); +foreach ($headers as $header) { + $pdf->Rect($x, $y, $header['width'], $headerRowHeight); + $pdf->SetXY($x + $padding, $y + $padding); + $pdf->MultiCell($header['width'] - $padding * 2, $lineHeight, $header['text'], 0, 'L'); + $x += $header['width']; + $pdf->SetXY($x, $y); +} +$pdf->Ln($headerRowHeight); + + +$pdf->SetFont('DejaVu', '', 12); +$vatRate = 1.23; +foreach ($order_items as $item) { + $unit_price_gross = (float)$item['unit_price']; + $unit_price_net = $unit_price_gross / $vatRate; + + // --- Cell data --- + $widths = [70, 30, 30, 30, 30]; + $data = [ + $item['product_name'], + $item['quantity'], + format_money($unit_price_net, $_SESSION['lang'] ?? 'pl', db()), + format_money($unit_price_gross, $_SESSION['lang'] ?? 'pl', db()), + format_money($item['line_total'], $_SESSION['lang'] ?? 'pl', db()), + ]; + + // --- Calculate Row Height --- + $y1 = $pdf->GetY(); + $x1 = $pdf->GetX(); + $tempPdf = clone $pdf; + $tempPdf->SetXY($x1 + $padding, $y1); + $tempPdf->MultiCell($widths[0] - $padding*2, $lineHeight, $data[0], 0, 'L'); + $contentHeight = $tempPdf->GetY() - $y1; + if ($contentHeight < $lineHeight) { + $contentHeight = $lineHeight; + } + $rowHeight = $contentHeight + $padding * 2; + + // --- Draw Row --- + $current_x = $x1; + for ($i = 0; $i < count($data); $i++) { + // Draw border + $pdf->Rect($current_x, $y1, $widths[$i], $rowHeight); + // Set text position + $pdf->SetXY($current_x + $padding, $y1 + $padding); + + // Draw text + if ($i === 0) { // MultiCell for product name + $pdf->MultiCell($widths[0] - $padding*2, $lineHeight, $data[0], 0, 'L'); + } else { // Cell for others + $pdf->Cell($widths[$i] - $padding*2, $lineHeight, $data[$i], 0, 0, 'L'); + } + + // Move to next cell start + $current_x += $widths[$i]; + $pdf->SetXY($current_x, $y1); + } + + $pdf->Ln($rowHeight); +} + +$pdf->Output('D', 'order_' . $order['id'] . '.pdf'); \ No newline at end of file diff --git a/includes/fpdf/font/courier.php b/includes/fpdf/font/courier.php new file mode 100644 index 0000000..bc8478e --- /dev/null +++ b/includes/fpdf/font/courier.php @@ -0,0 +1,10 @@ +array(0,128),128=>8364,130=>8218,131=>402,132=>8222,133=>8230,134=>array(8224,2),136=>710,137=>8240,138=>352,139=>8249,140=>338,142=>381,145=>array(8216,2),147=>array(8220,2),149=>8226,150=>array(8211,2),152=>732,153=>8482,154=>353,155=>8250,156=>339,158=>382,159=>376,160=>array(160,96)); +?> diff --git a/includes/fpdf/font/courierb.php b/includes/fpdf/font/courierb.php new file mode 100644 index 0000000..97ecd70 --- /dev/null +++ b/includes/fpdf/font/courierb.php @@ -0,0 +1,10 @@ +array(0,128),128=>8364,130=>8218,131=>402,132=>8222,133=>8230,134=>array(8224,2),136=>710,137=>8240,138=>352,139=>8249,140=>338,142=>381,145=>array(8216,2),147=>array(8220,2),149=>8226,150=>array(8211,2),152=>732,153=>8482,154=>353,155=>8250,156=>339,158=>382,159=>376,160=>array(160,96)); +?> diff --git a/includes/fpdf/font/courierbi.php b/includes/fpdf/font/courierbi.php new file mode 100644 index 0000000..c4bfff8 --- /dev/null +++ b/includes/fpdf/font/courierbi.php @@ -0,0 +1,10 @@ +array(0,128),128=>8364,130=>8218,131=>402,132=>8222,133=>8230,134=>array(8224,2),136=>710,137=>8240,138=>352,139=>8249,140=>338,142=>381,145=>array(8216,2),147=>array(8220,2),149=>8226,150=>array(8211,2),152=>732,153=>8482,154=>353,155=>8250,156=>339,158=>382,159=>376,160=>array(160,96)); +?> diff --git a/includes/fpdf/font/courieri.php b/includes/fpdf/font/courieri.php new file mode 100644 index 0000000..015a15a --- /dev/null +++ b/includes/fpdf/font/courieri.php @@ -0,0 +1,10 @@ +array(0,128),128=>8364,130=>8218,131=>402,132=>8222,133=>8230,134=>array(8224,2),136=>710,137=>8240,138=>352,139=>8249,140=>338,142=>381,145=>array(8216,2),147=>array(8220,2),149=>8226,150=>array(8211,2),152=>732,153=>8482,154=>353,155=>8250,156=>339,158=>382,159=>376,160=>array(160,96)); +?> diff --git a/includes/fpdf/font/helvetica.php b/includes/fpdf/font/helvetica.php new file mode 100644 index 0000000..927759b --- /dev/null +++ b/includes/fpdf/font/helvetica.php @@ -0,0 +1,21 @@ +278,chr(1)=>278,chr(2)=>278,chr(3)=>278,chr(4)=>278,chr(5)=>278,chr(6)=>278,chr(7)=>278,chr(8)=>278,chr(9)=>278,chr(10)=>278,chr(11)=>278,chr(12)=>278,chr(13)=>278,chr(14)=>278,chr(15)=>278,chr(16)=>278,chr(17)=>278,chr(18)=>278,chr(19)=>278,chr(20)=>278,chr(21)=>278, + chr(22)=>278,chr(23)=>278,chr(24)=>278,chr(25)=>278,chr(26)=>278,chr(27)=>278,chr(28)=>278,chr(29)=>278,chr(30)=>278,chr(31)=>278,' '=>278,'!'=>278,'"'=>355,'#'=>556,'$'=>556,'%'=>889,'&'=>667,'\''=>191,'('=>333,')'=>333,'*'=>389,'+'=>584, + ','=>278,'-'=>333,'.'=>278,'/'=>278,'0'=>556,'1'=>556,'2'=>556,'3'=>556,'4'=>556,'5'=>556,'6'=>556,'7'=>556,'8'=>556,'9'=>556,':'=>278,';'=>278,'<'=>584,'='=>584,'>'=>584,'?'=>556,'@'=>1015,'A'=>667, + 'B'=>667,'C'=>722,'D'=>722,'E'=>667,'F'=>611,'G'=>778,'H'=>722,'I'=>278,'J'=>500,'K'=>667,'L'=>556,'M'=>833,'N'=>722,'O'=>778,'P'=>667,'Q'=>778,'R'=>722,'S'=>667,'T'=>611,'U'=>722,'V'=>667,'W'=>944, + 'X'=>667,'Y'=>667,'Z'=>611,'['=>278,'\\'=>278,']'=>278,'^'=>469,'_'=>556,'`'=>333,'a'=>556,'b'=>556,'c'=>500,'d'=>556,'e'=>556,'f'=>278,'g'=>556,'h'=>556,'i'=>222,'j'=>222,'k'=>500,'l'=>222,'m'=>833, + 'n'=>556,'o'=>556,'p'=>556,'q'=>556,'r'=>333,'s'=>500,'t'=>278,'u'=>556,'v'=>500,'w'=>722,'x'=>500,'y'=>500,'z'=>500,'{'=>334,'|'=>260,'}'=>334,'~'=>584,chr(127)=>350,chr(128)=>556,chr(129)=>350,chr(130)=>222,chr(131)=>556, + chr(132)=>333,chr(133)=>1000,chr(134)=>556,chr(135)=>556,chr(136)=>333,chr(137)=>1000,chr(138)=>667,chr(139)=>333,chr(140)=>1000,chr(141)=>350,chr(142)=>611,chr(143)=>350,chr(144)=>350,chr(145)=>222,chr(146)=>222,chr(147)=>333,chr(148)=>333,chr(149)=>350,chr(150)=>556,chr(151)=>1000,chr(152)=>333,chr(153)=>1000, + chr(154)=>500,chr(155)=>333,chr(156)=>944,chr(157)=>350,chr(158)=>500,chr(159)=>667,chr(160)=>278,chr(161)=>333,chr(162)=>556,chr(163)=>556,chr(164)=>556,chr(165)=>556,chr(166)=>260,chr(167)=>556,chr(168)=>333,chr(169)=>737,chr(170)=>370,chr(171)=>556,chr(172)=>584,chr(173)=>333,chr(174)=>737,chr(175)=>333, + chr(176)=>400,chr(177)=>584,chr(178)=>333,chr(179)=>333,chr(180)=>333,chr(181)=>556,chr(182)=>537,chr(183)=>278,chr(184)=>333,chr(185)=>333,chr(186)=>365,chr(187)=>556,chr(188)=>834,chr(189)=>834,chr(190)=>834,chr(191)=>611,chr(192)=>667,chr(193)=>667,chr(194)=>667,chr(195)=>667,chr(196)=>667,chr(197)=>667, + chr(198)=>1000,chr(199)=>722,chr(200)=>667,chr(201)=>667,chr(202)=>667,chr(203)=>667,chr(204)=>278,chr(205)=>278,chr(206)=>278,chr(207)=>278,chr(208)=>722,chr(209)=>722,chr(210)=>778,chr(211)=>778,chr(212)=>778,chr(213)=>778,chr(214)=>778,chr(215)=>584,chr(216)=>778,chr(217)=>722,chr(218)=>722,chr(219)=>722, + chr(220)=>722,chr(221)=>667,chr(222)=>667,chr(223)=>611,chr(224)=>556,chr(225)=>556,chr(226)=>556,chr(227)=>556,chr(228)=>556,chr(229)=>556,chr(230)=>889,chr(231)=>500,chr(232)=>556,chr(233)=>556,chr(234)=>556,chr(235)=>556,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>556,chr(241)=>556, + chr(242)=>556,chr(243)=>556,chr(244)=>556,chr(245)=>556,chr(246)=>556,chr(247)=>584,chr(248)=>611,chr(249)=>556,chr(250)=>556,chr(251)=>556,chr(252)=>556,chr(253)=>500,chr(254)=>556,chr(255)=>500); +$enc = 'cp1252'; +$uv = array(0=>array(0,128),128=>8364,130=>8218,131=>402,132=>8222,133=>8230,134=>array(8224,2),136=>710,137=>8240,138=>352,139=>8249,140=>338,142=>381,145=>array(8216,2),147=>array(8220,2),149=>8226,150=>array(8211,2),152=>732,153=>8482,154=>353,155=>8250,156=>339,158=>382,159=>376,160=>array(160,96)); +?> diff --git a/includes/fpdf/font/helveticab.php b/includes/fpdf/font/helveticab.php new file mode 100644 index 0000000..bcd7367 --- /dev/null +++ b/includes/fpdf/font/helveticab.php @@ -0,0 +1,21 @@ +278,chr(1)=>278,chr(2)=>278,chr(3)=>278,chr(4)=>278,chr(5)=>278,chr(6)=>278,chr(7)=>278,chr(8)=>278,chr(9)=>278,chr(10)=>278,chr(11)=>278,chr(12)=>278,chr(13)=>278,chr(14)=>278,chr(15)=>278,chr(16)=>278,chr(17)=>278,chr(18)=>278,chr(19)=>278,chr(20)=>278,chr(21)=>278, + chr(22)=>278,chr(23)=>278,chr(24)=>278,chr(25)=>278,chr(26)=>278,chr(27)=>278,chr(28)=>278,chr(29)=>278,chr(30)=>278,chr(31)=>278,' '=>278,'!'=>333,'"'=>474,'#'=>556,'$'=>556,'%'=>889,'&'=>722,'\''=>238,'('=>333,')'=>333,'*'=>389,'+'=>584, + ','=>278,'-'=>333,'.'=>278,'/'=>278,'0'=>556,'1'=>556,'2'=>556,'3'=>556,'4'=>556,'5'=>556,'6'=>556,'7'=>556,'8'=>556,'9'=>556,':'=>333,';'=>333,'<'=>584,'='=>584,'>'=>584,'?'=>611,'@'=>975,'A'=>722, + 'B'=>722,'C'=>722,'D'=>722,'E'=>667,'F'=>611,'G'=>778,'H'=>722,'I'=>278,'J'=>556,'K'=>722,'L'=>611,'M'=>833,'N'=>722,'O'=>778,'P'=>667,'Q'=>778,'R'=>722,'S'=>667,'T'=>611,'U'=>722,'V'=>667,'W'=>944, + 'X'=>667,'Y'=>667,'Z'=>611,'['=>333,'\\'=>278,']'=>333,'^'=>584,'_'=>556,'`'=>333,'a'=>556,'b'=>611,'c'=>556,'d'=>611,'e'=>556,'f'=>333,'g'=>611,'h'=>611,'i'=>278,'j'=>278,'k'=>556,'l'=>278,'m'=>889, + 'n'=>611,'o'=>611,'p'=>611,'q'=>611,'r'=>389,'s'=>556,'t'=>333,'u'=>611,'v'=>556,'w'=>778,'x'=>556,'y'=>556,'z'=>500,'{'=>389,'|'=>280,'}'=>389,'~'=>584,chr(127)=>350,chr(128)=>556,chr(129)=>350,chr(130)=>278,chr(131)=>556, + chr(132)=>500,chr(133)=>1000,chr(134)=>556,chr(135)=>556,chr(136)=>333,chr(137)=>1000,chr(138)=>667,chr(139)=>333,chr(140)=>1000,chr(141)=>350,chr(142)=>611,chr(143)=>350,chr(144)=>350,chr(145)=>278,chr(146)=>278,chr(147)=>500,chr(148)=>500,chr(149)=>350,chr(150)=>556,chr(151)=>1000,chr(152)=>333,chr(153)=>1000, + chr(154)=>556,chr(155)=>333,chr(156)=>944,chr(157)=>350,chr(158)=>500,chr(159)=>667,chr(160)=>278,chr(161)=>333,chr(162)=>556,chr(163)=>556,chr(164)=>556,chr(165)=>556,chr(166)=>280,chr(167)=>556,chr(168)=>333,chr(169)=>737,chr(170)=>370,chr(171)=>556,chr(172)=>584,chr(173)=>333,chr(174)=>737,chr(175)=>333, + chr(176)=>400,chr(177)=>584,chr(178)=>333,chr(179)=>333,chr(180)=>333,chr(181)=>611,chr(182)=>556,chr(183)=>278,chr(184)=>333,chr(185)=>333,chr(186)=>365,chr(187)=>556,chr(188)=>834,chr(189)=>834,chr(190)=>834,chr(191)=>611,chr(192)=>722,chr(193)=>722,chr(194)=>722,chr(195)=>722,chr(196)=>722,chr(197)=>722, + chr(198)=>1000,chr(199)=>722,chr(200)=>667,chr(201)=>667,chr(202)=>667,chr(203)=>667,chr(204)=>278,chr(205)=>278,chr(206)=>278,chr(207)=>278,chr(208)=>722,chr(209)=>722,chr(210)=>778,chr(211)=>778,chr(212)=>778,chr(213)=>778,chr(214)=>778,chr(215)=>584,chr(216)=>778,chr(217)=>722,chr(218)=>722,chr(219)=>722, + chr(220)=>722,chr(221)=>667,chr(222)=>667,chr(223)=>611,chr(224)=>556,chr(225)=>556,chr(226)=>556,chr(227)=>556,chr(228)=>556,chr(229)=>556,chr(230)=>889,chr(231)=>556,chr(232)=>556,chr(233)=>556,chr(234)=>556,chr(235)=>556,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>611,chr(241)=>611, + chr(242)=>611,chr(243)=>611,chr(244)=>611,chr(245)=>611,chr(246)=>611,chr(247)=>584,chr(248)=>611,chr(249)=>611,chr(250)=>611,chr(251)=>611,chr(252)=>611,chr(253)=>556,chr(254)=>611,chr(255)=>556); +$enc = 'cp1252'; +$uv = array(0=>array(0,128),128=>8364,130=>8218,131=>402,132=>8222,133=>8230,134=>array(8224,2),136=>710,137=>8240,138=>352,139=>8249,140=>338,142=>381,145=>array(8216,2),147=>array(8220,2),149=>8226,150=>array(8211,2),152=>732,153=>8482,154=>353,155=>8250,156=>339,158=>382,159=>376,160=>array(160,96)); +?> diff --git a/includes/fpdf/font/helveticabi.php b/includes/fpdf/font/helveticabi.php new file mode 100644 index 0000000..0243cde --- /dev/null +++ b/includes/fpdf/font/helveticabi.php @@ -0,0 +1,21 @@ +278,chr(1)=>278,chr(2)=>278,chr(3)=>278,chr(4)=>278,chr(5)=>278,chr(6)=>278,chr(7)=>278,chr(8)=>278,chr(9)=>278,chr(10)=>278,chr(11)=>278,chr(12)=>278,chr(13)=>278,chr(14)=>278,chr(15)=>278,chr(16)=>278,chr(17)=>278,chr(18)=>278,chr(19)=>278,chr(20)=>278,chr(21)=>278, + chr(22)=>278,chr(23)=>278,chr(24)=>278,chr(25)=>278,chr(26)=>278,chr(27)=>278,chr(28)=>278,chr(29)=>278,chr(30)=>278,chr(31)=>278,' '=>278,'!'=>333,'"'=>474,'#'=>556,'$'=>556,'%'=>889,'&'=>722,'\''=>238,'('=>333,')'=>333,'*'=>389,'+'=>584, + ','=>278,'-'=>333,'.'=>278,'/'=>278,'0'=>556,'1'=>556,'2'=>556,'3'=>556,'4'=>556,'5'=>556,'6'=>556,'7'=>556,'8'=>556,'9'=>556,':'=>333,';'=>333,'<'=>584,'='=>584,'>'=>584,'?'=>611,'@'=>975,'A'=>722, + 'B'=>722,'C'=>722,'D'=>722,'E'=>667,'F'=>611,'G'=>778,'H'=>722,'I'=>278,'J'=>556,'K'=>722,'L'=>611,'M'=>833,'N'=>722,'O'=>778,'P'=>667,'Q'=>778,'R'=>722,'S'=>667,'T'=>611,'U'=>722,'V'=>667,'W'=>944, + 'X'=>667,'Y'=>667,'Z'=>611,'['=>333,'\\'=>278,']'=>333,'^'=>584,'_'=>556,'`'=>333,'a'=>556,'b'=>611,'c'=>556,'d'=>611,'e'=>556,'f'=>333,'g'=>611,'h'=>611,'i'=>278,'j'=>278,'k'=>556,'l'=>278,'m'=>889, + 'n'=>611,'o'=>611,'p'=>611,'q'=>611,'r'=>389,'s'=>556,'t'=>333,'u'=>611,'v'=>556,'w'=>778,'x'=>556,'y'=>556,'z'=>500,'{'=>389,'|'=>280,'}'=>389,'~'=>584,chr(127)=>350,chr(128)=>556,chr(129)=>350,chr(130)=>278,chr(131)=>556, + chr(132)=>500,chr(133)=>1000,chr(134)=>556,chr(135)=>556,chr(136)=>333,chr(137)=>1000,chr(138)=>667,chr(139)=>333,chr(140)=>1000,chr(141)=>350,chr(142)=>611,chr(143)=>350,chr(144)=>350,chr(145)=>278,chr(146)=>278,chr(147)=>500,chr(148)=>500,chr(149)=>350,chr(150)=>556,chr(151)=>1000,chr(152)=>333,chr(153)=>1000, + chr(154)=>556,chr(155)=>333,chr(156)=>944,chr(157)=>350,chr(158)=>500,chr(159)=>667,chr(160)=>278,chr(161)=>333,chr(162)=>556,chr(163)=>556,chr(164)=>556,chr(165)=>556,chr(166)=>280,chr(167)=>556,chr(168)=>333,chr(169)=>737,chr(170)=>370,chr(171)=>556,chr(172)=>584,chr(173)=>333,chr(174)=>737,chr(175)=>333, + chr(176)=>400,chr(177)=>584,chr(178)=>333,chr(179)=>333,chr(180)=>333,chr(181)=>611,chr(182)=>556,chr(183)=>278,chr(184)=>333,chr(185)=>333,chr(186)=>365,chr(187)=>556,chr(188)=>834,chr(189)=>834,chr(190)=>834,chr(191)=>611,chr(192)=>722,chr(193)=>722,chr(194)=>722,chr(195)=>722,chr(196)=>722,chr(197)=>722, + chr(198)=>1000,chr(199)=>722,chr(200)=>667,chr(201)=>667,chr(202)=>667,chr(203)=>667,chr(204)=>278,chr(205)=>278,chr(206)=>278,chr(207)=>278,chr(208)=>722,chr(209)=>722,chr(210)=>778,chr(211)=>778,chr(212)=>778,chr(213)=>778,chr(214)=>778,chr(215)=>584,chr(216)=>778,chr(217)=>722,chr(218)=>722,chr(219)=>722, + chr(220)=>722,chr(221)=>667,chr(222)=>667,chr(223)=>611,chr(224)=>556,chr(225)=>556,chr(226)=>556,chr(227)=>556,chr(228)=>556,chr(229)=>556,chr(230)=>889,chr(231)=>556,chr(232)=>556,chr(233)=>556,chr(234)=>556,chr(235)=>556,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>611,chr(241)=>611, + chr(242)=>611,chr(243)=>611,chr(244)=>611,chr(245)=>611,chr(246)=>611,chr(247)=>584,chr(248)=>611,chr(249)=>611,chr(250)=>611,chr(251)=>611,chr(252)=>611,chr(253)=>556,chr(254)=>611,chr(255)=>556); +$enc = 'cp1252'; +$uv = array(0=>array(0,128),128=>8364,130=>8218,131=>402,132=>8222,133=>8230,134=>array(8224,2),136=>710,137=>8240,138=>352,139=>8249,140=>338,142=>381,145=>array(8216,2),147=>array(8220,2),149=>8226,150=>array(8211,2),152=>732,153=>8482,154=>353,155=>8250,156=>339,158=>382,159=>376,160=>array(160,96)); +?> diff --git a/includes/fpdf/font/helveticai.php b/includes/fpdf/font/helveticai.php new file mode 100644 index 0000000..06ec735 --- /dev/null +++ b/includes/fpdf/font/helveticai.php @@ -0,0 +1,21 @@ +278,chr(1)=>278,chr(2)=>278,chr(3)=>278,chr(4)=>278,chr(5)=>278,chr(6)=>278,chr(7)=>278,chr(8)=>278,chr(9)=>278,chr(10)=>278,chr(11)=>278,chr(12)=>278,chr(13)=>278,chr(14)=>278,chr(15)=>278,chr(16)=>278,chr(17)=>278,chr(18)=>278,chr(19)=>278,chr(20)=>278,chr(21)=>278, + chr(22)=>278,chr(23)=>278,chr(24)=>278,chr(25)=>278,chr(26)=>278,chr(27)=>278,chr(28)=>278,chr(29)=>278,chr(30)=>278,chr(31)=>278,' '=>278,'!'=>278,'"'=>355,'#'=>556,'$'=>556,'%'=>889,'&'=>667,'\''=>191,'('=>333,')'=>333,'*'=>389,'+'=>584, + ','=>278,'-'=>333,'.'=>278,'/'=>278,'0'=>556,'1'=>556,'2'=>556,'3'=>556,'4'=>556,'5'=>556,'6'=>556,'7'=>556,'8'=>556,'9'=>556,':'=>278,';'=>278,'<'=>584,'='=>584,'>'=>584,'?'=>556,'@'=>1015,'A'=>667, + 'B'=>667,'C'=>722,'D'=>722,'E'=>667,'F'=>611,'G'=>778,'H'=>722,'I'=>278,'J'=>500,'K'=>667,'L'=>556,'M'=>833,'N'=>722,'O'=>778,'P'=>667,'Q'=>778,'R'=>722,'S'=>667,'T'=>611,'U'=>722,'V'=>667,'W'=>944, + 'X'=>667,'Y'=>667,'Z'=>611,'['=>278,'\\'=>278,']'=>278,'^'=>469,'_'=>556,'`'=>333,'a'=>556,'b'=>556,'c'=>500,'d'=>556,'e'=>556,'f'=>278,'g'=>556,'h'=>556,'i'=>222,'j'=>222,'k'=>500,'l'=>222,'m'=>833, + 'n'=>556,'o'=>556,'p'=>556,'q'=>556,'r'=>333,'s'=>500,'t'=>278,'u'=>556,'v'=>500,'w'=>722,'x'=>500,'y'=>500,'z'=>500,'{'=>334,'|'=>260,'}'=>334,'~'=>584,chr(127)=>350,chr(128)=>556,chr(129)=>350,chr(130)=>222,chr(131)=>556, + chr(132)=>333,chr(133)=>1000,chr(134)=>556,chr(135)=>556,chr(136)=>333,chr(137)=>1000,chr(138)=>667,chr(139)=>333,chr(140)=>1000,chr(141)=>350,chr(142)=>611,chr(143)=>350,chr(144)=>350,chr(145)=>222,chr(146)=>222,chr(147)=>333,chr(148)=>333,chr(149)=>350,chr(150)=>556,chr(151)=>1000,chr(152)=>333,chr(153)=>1000, + chr(154)=>500,chr(155)=>333,chr(156)=>944,chr(157)=>350,chr(158)=>500,chr(159)=>667,chr(160)=>278,chr(161)=>333,chr(162)=>556,chr(163)=>556,chr(164)=>556,chr(165)=>556,chr(166)=>260,chr(167)=>556,chr(168)=>333,chr(169)=>737,chr(170)=>370,chr(171)=>556,chr(172)=>584,chr(173)=>333,chr(174)=>737,chr(175)=>333, + chr(176)=>400,chr(177)=>584,chr(178)=>333,chr(179)=>333,chr(180)=>333,chr(181)=>556,chr(182)=>537,chr(183)=>278,chr(184)=>333,chr(185)=>333,chr(186)=>365,chr(187)=>556,chr(188)=>834,chr(189)=>834,chr(190)=>834,chr(191)=>611,chr(192)=>667,chr(193)=>667,chr(194)=>667,chr(195)=>667,chr(196)=>667,chr(197)=>667, + chr(198)=>1000,chr(199)=>722,chr(200)=>667,chr(201)=>667,chr(202)=>667,chr(203)=>667,chr(204)=>278,chr(205)=>278,chr(206)=>278,chr(207)=>278,chr(208)=>722,chr(209)=>722,chr(210)=>778,chr(211)=>778,chr(212)=>778,chr(213)=>778,chr(214)=>778,chr(215)=>584,chr(216)=>778,chr(217)=>722,chr(218)=>722,chr(219)=>722, + chr(220)=>722,chr(221)=>667,chr(222)=>667,chr(223)=>611,chr(224)=>556,chr(225)=>556,chr(226)=>556,chr(227)=>556,chr(228)=>556,chr(229)=>556,chr(230)=>889,chr(231)=>500,chr(232)=>556,chr(233)=>556,chr(234)=>556,chr(235)=>556,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>556,chr(241)=>556, + chr(242)=>556,chr(243)=>556,chr(244)=>556,chr(245)=>556,chr(246)=>556,chr(247)=>584,chr(248)=>611,chr(249)=>556,chr(250)=>556,chr(251)=>556,chr(252)=>556,chr(253)=>500,chr(254)=>556,chr(255)=>500); +$enc = 'cp1252'; +$uv = array(0=>array(0,128),128=>8364,130=>8218,131=>402,132=>8222,133=>8230,134=>array(8224,2),136=>710,137=>8240,138=>352,139=>8249,140=>338,142=>381,145=>array(8216,2),147=>array(8220,2),149=>8226,150=>array(8211,2),152=>732,153=>8482,154=>353,155=>8250,156=>339,158=>382,159=>376,160=>array(160,96)); +?> diff --git a/includes/fpdf/font/symbol.php b/includes/fpdf/font/symbol.php new file mode 100644 index 0000000..f8f0c33 --- /dev/null +++ b/includes/fpdf/font/symbol.php @@ -0,0 +1,20 @@ +250,chr(1)=>250,chr(2)=>250,chr(3)=>250,chr(4)=>250,chr(5)=>250,chr(6)=>250,chr(7)=>250,chr(8)=>250,chr(9)=>250,chr(10)=>250,chr(11)=>250,chr(12)=>250,chr(13)=>250,chr(14)=>250,chr(15)=>250,chr(16)=>250,chr(17)=>250,chr(18)=>250,chr(19)=>250,chr(20)=>250,chr(21)=>250, + chr(22)=>250,chr(23)=>250,chr(24)=>250,chr(25)=>250,chr(26)=>250,chr(27)=>250,chr(28)=>250,chr(29)=>250,chr(30)=>250,chr(31)=>250,' '=>250,'!'=>333,'"'=>713,'#'=>500,'$'=>549,'%'=>833,'&'=>778,'\''=>439,'('=>333,')'=>333,'*'=>500,'+'=>549, + ','=>250,'-'=>549,'.'=>250,'/'=>278,'0'=>500,'1'=>500,'2'=>500,'3'=>500,'4'=>500,'5'=>500,'6'=>500,'7'=>500,'8'=>500,'9'=>500,':'=>278,';'=>278,'<'=>549,'='=>549,'>'=>549,'?'=>444,'@'=>549,'A'=>722, + 'B'=>667,'C'=>722,'D'=>612,'E'=>611,'F'=>763,'G'=>603,'H'=>722,'I'=>333,'J'=>631,'K'=>722,'L'=>686,'M'=>889,'N'=>722,'O'=>722,'P'=>768,'Q'=>741,'R'=>556,'S'=>592,'T'=>611,'U'=>690,'V'=>439,'W'=>768, + 'X'=>645,'Y'=>795,'Z'=>611,'['=>333,'\\'=>863,']'=>333,'^'=>658,'_'=>500,'`'=>500,'a'=>631,'b'=>549,'c'=>549,'d'=>494,'e'=>439,'f'=>521,'g'=>411,'h'=>603,'i'=>329,'j'=>603,'k'=>549,'l'=>549,'m'=>576, + 'n'=>521,'o'=>549,'p'=>549,'q'=>521,'r'=>549,'s'=>603,'t'=>439,'u'=>576,'v'=>713,'w'=>686,'x'=>493,'y'=>686,'z'=>494,'{'=>480,'|'=>200,'}'=>480,'~'=>549,chr(127)=>0,chr(128)=>0,chr(129)=>0,chr(130)=>0,chr(131)=>0, + chr(132)=>0,chr(133)=>0,chr(134)=>0,chr(135)=>0,chr(136)=>0,chr(137)=>0,chr(138)=>0,chr(139)=>0,chr(140)=>0,chr(141)=>0,chr(142)=>0,chr(143)=>0,chr(144)=>0,chr(145)=>0,chr(146)=>0,chr(147)=>0,chr(148)=>0,chr(149)=>0,chr(150)=>0,chr(151)=>0,chr(152)=>0,chr(153)=>0, + chr(154)=>0,chr(155)=>0,chr(156)=>0,chr(157)=>0,chr(158)=>0,chr(159)=>0,chr(160)=>750,chr(161)=>620,chr(162)=>247,chr(163)=>549,chr(164)=>167,chr(165)=>713,chr(166)=>500,chr(167)=>753,chr(168)=>753,chr(169)=>753,chr(170)=>753,chr(171)=>1042,chr(172)=>987,chr(173)=>603,chr(174)=>987,chr(175)=>603, + chr(176)=>400,chr(177)=>549,chr(178)=>411,chr(179)=>549,chr(180)=>549,chr(181)=>713,chr(182)=>494,chr(183)=>460,chr(184)=>549,chr(185)=>549,chr(186)=>549,chr(187)=>549,chr(188)=>1000,chr(189)=>603,chr(190)=>1000,chr(191)=>658,chr(192)=>823,chr(193)=>686,chr(194)=>795,chr(195)=>987,chr(196)=>768,chr(197)=>768, + chr(198)=>823,chr(199)=>768,chr(200)=>768,chr(201)=>713,chr(202)=>713,chr(203)=>713,chr(204)=>713,chr(205)=>713,chr(206)=>713,chr(207)=>713,chr(208)=>768,chr(209)=>713,chr(210)=>790,chr(211)=>790,chr(212)=>890,chr(213)=>823,chr(214)=>549,chr(215)=>250,chr(216)=>713,chr(217)=>603,chr(218)=>603,chr(219)=>1042, + chr(220)=>987,chr(221)=>603,chr(222)=>987,chr(223)=>603,chr(224)=>494,chr(225)=>329,chr(226)=>790,chr(227)=>790,chr(228)=>786,chr(229)=>713,chr(230)=>384,chr(231)=>384,chr(232)=>384,chr(233)=>384,chr(234)=>384,chr(235)=>384,chr(236)=>494,chr(237)=>494,chr(238)=>494,chr(239)=>494,chr(240)=>0,chr(241)=>329, + chr(242)=>274,chr(243)=>686,chr(244)=>686,chr(245)=>686,chr(246)=>384,chr(247)=>384,chr(248)=>384,chr(249)=>384,chr(250)=>384,chr(251)=>384,chr(252)=>494,chr(253)=>494,chr(254)=>494,chr(255)=>0); +$uv = array(32=>160,33=>33,34=>8704,35=>35,36=>8707,37=>array(37,2),39=>8715,40=>array(40,2),42=>8727,43=>array(43,2),45=>8722,46=>array(46,18),64=>8773,65=>array(913,2),67=>935,68=>array(916,2),70=>934,71=>915,72=>919,73=>921,74=>977,75=>array(922,4),79=>array(927,2),81=>920,82=>929,83=>array(931,3),86=>962,87=>937,88=>926,89=>936,90=>918,91=>91,92=>8756,93=>93,94=>8869,95=>95,96=>63717,97=>array(945,2),99=>967,100=>array(948,2),102=>966,103=>947,104=>951,105=>953,106=>981,107=>array(954,4),111=>array(959,2),113=>952,114=>961,115=>array(963,3),118=>982,119=>969,120=>958,121=>968,122=>950,123=>array(123,3),126=>8764,160=>8364,161=>978,162=>8242,163=>8804,164=>8725,165=>8734,166=>402,167=>9827,168=>9830,169=>9829,170=>9824,171=>8596,172=>array(8592,4),176=>array(176,2),178=>8243,179=>8805,180=>215,181=>8733,182=>8706,183=>8226,184=>247,185=>array(8800,2),187=>8776,188=>8230,189=>array(63718,2),191=>8629,192=>8501,193=>8465,194=>8476,195=>8472,196=>8855,197=>8853,198=>8709,199=>array(8745,2),201=>8835,202=>8839,203=>8836,204=>8834,205=>8838,206=>array(8712,2),208=>8736,209=>8711,210=>63194,211=>63193,212=>63195,213=>8719,214=>8730,215=>8901,216=>172,217=>array(8743,2),219=>8660,220=>array(8656,4),224=>9674,225=>9001,226=>array(63720,3),229=>8721,230=>array(63723,10),241=>9002,242=>8747,243=>8992,244=>63733,245=>8993,246=>array(63734,9)); +?> diff --git a/includes/fpdf/font/times.php b/includes/fpdf/font/times.php new file mode 100644 index 0000000..81f2a8b --- /dev/null +++ b/includes/fpdf/font/times.php @@ -0,0 +1,21 @@ +250,chr(1)=>250,chr(2)=>250,chr(3)=>250,chr(4)=>250,chr(5)=>250,chr(6)=>250,chr(7)=>250,chr(8)=>250,chr(9)=>250,chr(10)=>250,chr(11)=>250,chr(12)=>250,chr(13)=>250,chr(14)=>250,chr(15)=>250,chr(16)=>250,chr(17)=>250,chr(18)=>250,chr(19)=>250,chr(20)=>250,chr(21)=>250, + chr(22)=>250,chr(23)=>250,chr(24)=>250,chr(25)=>250,chr(26)=>250,chr(27)=>250,chr(28)=>250,chr(29)=>250,chr(30)=>250,chr(31)=>250,' '=>250,'!'=>333,'"'=>408,'#'=>500,'$'=>500,'%'=>833,'&'=>778,'\''=>180,'('=>333,')'=>333,'*'=>500,'+'=>564, + ','=>250,'-'=>333,'.'=>250,'/'=>278,'0'=>500,'1'=>500,'2'=>500,'3'=>500,'4'=>500,'5'=>500,'6'=>500,'7'=>500,'8'=>500,'9'=>500,':'=>278,';'=>278,'<'=>564,'='=>564,'>'=>564,'?'=>444,'@'=>921,'A'=>722, + 'B'=>667,'C'=>667,'D'=>722,'E'=>611,'F'=>556,'G'=>722,'H'=>722,'I'=>333,'J'=>389,'K'=>722,'L'=>611,'M'=>889,'N'=>722,'O'=>722,'P'=>556,'Q'=>722,'R'=>667,'S'=>556,'T'=>611,'U'=>722,'V'=>722,'W'=>944, + 'X'=>722,'Y'=>722,'Z'=>611,'['=>333,'\\'=>278,']'=>333,'^'=>469,'_'=>500,'`'=>333,'a'=>444,'b'=>500,'c'=>444,'d'=>500,'e'=>444,'f'=>333,'g'=>500,'h'=>500,'i'=>278,'j'=>278,'k'=>500,'l'=>278,'m'=>778, + 'n'=>500,'o'=>500,'p'=>500,'q'=>500,'r'=>333,'s'=>389,'t'=>278,'u'=>500,'v'=>500,'w'=>722,'x'=>500,'y'=>500,'z'=>444,'{'=>480,'|'=>200,'}'=>480,'~'=>541,chr(127)=>350,chr(128)=>500,chr(129)=>350,chr(130)=>333,chr(131)=>500, + chr(132)=>444,chr(133)=>1000,chr(134)=>500,chr(135)=>500,chr(136)=>333,chr(137)=>1000,chr(138)=>556,chr(139)=>333,chr(140)=>889,chr(141)=>350,chr(142)=>611,chr(143)=>350,chr(144)=>350,chr(145)=>333,chr(146)=>333,chr(147)=>444,chr(148)=>444,chr(149)=>350,chr(150)=>500,chr(151)=>1000,chr(152)=>333,chr(153)=>980, + chr(154)=>389,chr(155)=>333,chr(156)=>722,chr(157)=>350,chr(158)=>444,chr(159)=>722,chr(160)=>250,chr(161)=>333,chr(162)=>500,chr(163)=>500,chr(164)=>500,chr(165)=>500,chr(166)=>200,chr(167)=>500,chr(168)=>333,chr(169)=>760,chr(170)=>276,chr(171)=>500,chr(172)=>564,chr(173)=>333,chr(174)=>760,chr(175)=>333, + chr(176)=>400,chr(177)=>564,chr(178)=>300,chr(179)=>300,chr(180)=>333,chr(181)=>500,chr(182)=>453,chr(183)=>250,chr(184)=>333,chr(185)=>300,chr(186)=>310,chr(187)=>500,chr(188)=>750,chr(189)=>750,chr(190)=>750,chr(191)=>444,chr(192)=>722,chr(193)=>722,chr(194)=>722,chr(195)=>722,chr(196)=>722,chr(197)=>722, + chr(198)=>889,chr(199)=>667,chr(200)=>611,chr(201)=>611,chr(202)=>611,chr(203)=>611,chr(204)=>333,chr(205)=>333,chr(206)=>333,chr(207)=>333,chr(208)=>722,chr(209)=>722,chr(210)=>722,chr(211)=>722,chr(212)=>722,chr(213)=>722,chr(214)=>722,chr(215)=>564,chr(216)=>722,chr(217)=>722,chr(218)=>722,chr(219)=>722, + chr(220)=>722,chr(221)=>722,chr(222)=>556,chr(223)=>500,chr(224)=>444,chr(225)=>444,chr(226)=>444,chr(227)=>444,chr(228)=>444,chr(229)=>444,chr(230)=>667,chr(231)=>444,chr(232)=>444,chr(233)=>444,chr(234)=>444,chr(235)=>444,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>500,chr(241)=>500, + chr(242)=>500,chr(243)=>500,chr(244)=>500,chr(245)=>500,chr(246)=>500,chr(247)=>564,chr(248)=>500,chr(249)=>500,chr(250)=>500,chr(251)=>500,chr(252)=>500,chr(253)=>500,chr(254)=>500,chr(255)=>500); +$enc = 'cp1252'; +$uv = array(0=>array(0,128),128=>8364,130=>8218,131=>402,132=>8222,133=>8230,134=>array(8224,2),136=>710,137=>8240,138=>352,139=>8249,140=>338,142=>381,145=>array(8216,2),147=>array(8220,2),149=>8226,150=>array(8211,2),152=>732,153=>8482,154=>353,155=>8250,156=>339,158=>382,159=>376,160=>array(160,96)); +?> diff --git a/includes/fpdf/font/timesb.php b/includes/fpdf/font/timesb.php new file mode 100644 index 0000000..7db704f --- /dev/null +++ b/includes/fpdf/font/timesb.php @@ -0,0 +1,21 @@ +250,chr(1)=>250,chr(2)=>250,chr(3)=>250,chr(4)=>250,chr(5)=>250,chr(6)=>250,chr(7)=>250,chr(8)=>250,chr(9)=>250,chr(10)=>250,chr(11)=>250,chr(12)=>250,chr(13)=>250,chr(14)=>250,chr(15)=>250,chr(16)=>250,chr(17)=>250,chr(18)=>250,chr(19)=>250,chr(20)=>250,chr(21)=>250, + chr(22)=>250,chr(23)=>250,chr(24)=>250,chr(25)=>250,chr(26)=>250,chr(27)=>250,chr(28)=>250,chr(29)=>250,chr(30)=>250,chr(31)=>250,' '=>250,'!'=>333,'"'=>555,'#'=>500,'$'=>500,'%'=>1000,'&'=>833,'\''=>278,'('=>333,')'=>333,'*'=>500,'+'=>570, + ','=>250,'-'=>333,'.'=>250,'/'=>278,'0'=>500,'1'=>500,'2'=>500,'3'=>500,'4'=>500,'5'=>500,'6'=>500,'7'=>500,'8'=>500,'9'=>500,':'=>333,';'=>333,'<'=>570,'='=>570,'>'=>570,'?'=>500,'@'=>930,'A'=>722, + 'B'=>667,'C'=>722,'D'=>722,'E'=>667,'F'=>611,'G'=>778,'H'=>778,'I'=>389,'J'=>500,'K'=>778,'L'=>667,'M'=>944,'N'=>722,'O'=>778,'P'=>611,'Q'=>778,'R'=>722,'S'=>556,'T'=>667,'U'=>722,'V'=>722,'W'=>1000, + 'X'=>722,'Y'=>722,'Z'=>667,'['=>333,'\\'=>278,']'=>333,'^'=>581,'_'=>500,'`'=>333,'a'=>500,'b'=>556,'c'=>444,'d'=>556,'e'=>444,'f'=>333,'g'=>500,'h'=>556,'i'=>278,'j'=>333,'k'=>556,'l'=>278,'m'=>833, + 'n'=>556,'o'=>500,'p'=>556,'q'=>556,'r'=>444,'s'=>389,'t'=>333,'u'=>556,'v'=>500,'w'=>722,'x'=>500,'y'=>500,'z'=>444,'{'=>394,'|'=>220,'}'=>394,'~'=>520,chr(127)=>350,chr(128)=>500,chr(129)=>350,chr(130)=>333,chr(131)=>500, + chr(132)=>500,chr(133)=>1000,chr(134)=>500,chr(135)=>500,chr(136)=>333,chr(137)=>1000,chr(138)=>556,chr(139)=>333,chr(140)=>1000,chr(141)=>350,chr(142)=>667,chr(143)=>350,chr(144)=>350,chr(145)=>333,chr(146)=>333,chr(147)=>500,chr(148)=>500,chr(149)=>350,chr(150)=>500,chr(151)=>1000,chr(152)=>333,chr(153)=>1000, + chr(154)=>389,chr(155)=>333,chr(156)=>722,chr(157)=>350,chr(158)=>444,chr(159)=>722,chr(160)=>250,chr(161)=>333,chr(162)=>500,chr(163)=>500,chr(164)=>500,chr(165)=>500,chr(166)=>220,chr(167)=>500,chr(168)=>333,chr(169)=>747,chr(170)=>300,chr(171)=>500,chr(172)=>570,chr(173)=>333,chr(174)=>747,chr(175)=>333, + chr(176)=>400,chr(177)=>570,chr(178)=>300,chr(179)=>300,chr(180)=>333,chr(181)=>556,chr(182)=>540,chr(183)=>250,chr(184)=>333,chr(185)=>300,chr(186)=>330,chr(187)=>500,chr(188)=>750,chr(189)=>750,chr(190)=>750,chr(191)=>500,chr(192)=>722,chr(193)=>722,chr(194)=>722,chr(195)=>722,chr(196)=>722,chr(197)=>722, + chr(198)=>1000,chr(199)=>722,chr(200)=>667,chr(201)=>667,chr(202)=>667,chr(203)=>667,chr(204)=>389,chr(205)=>389,chr(206)=>389,chr(207)=>389,chr(208)=>722,chr(209)=>722,chr(210)=>778,chr(211)=>778,chr(212)=>778,chr(213)=>778,chr(214)=>778,chr(215)=>570,chr(216)=>778,chr(217)=>722,chr(218)=>722,chr(219)=>722, + chr(220)=>722,chr(221)=>722,chr(222)=>611,chr(223)=>556,chr(224)=>500,chr(225)=>500,chr(226)=>500,chr(227)=>500,chr(228)=>500,chr(229)=>500,chr(230)=>722,chr(231)=>444,chr(232)=>444,chr(233)=>444,chr(234)=>444,chr(235)=>444,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>500,chr(241)=>556, + chr(242)=>500,chr(243)=>500,chr(244)=>500,chr(245)=>500,chr(246)=>500,chr(247)=>570,chr(248)=>500,chr(249)=>556,chr(250)=>556,chr(251)=>556,chr(252)=>556,chr(253)=>500,chr(254)=>556,chr(255)=>500); +$enc = 'cp1252'; +$uv = array(0=>array(0,128),128=>8364,130=>8218,131=>402,132=>8222,133=>8230,134=>array(8224,2),136=>710,137=>8240,138=>352,139=>8249,140=>338,142=>381,145=>array(8216,2),147=>array(8220,2),149=>8226,150=>array(8211,2),152=>732,153=>8482,154=>353,155=>8250,156=>339,158=>382,159=>376,160=>array(160,96)); +?> diff --git a/includes/fpdf/font/timesbi.php b/includes/fpdf/font/timesbi.php new file mode 100644 index 0000000..089f21a --- /dev/null +++ b/includes/fpdf/font/timesbi.php @@ -0,0 +1,21 @@ +250,chr(1)=>250,chr(2)=>250,chr(3)=>250,chr(4)=>250,chr(5)=>250,chr(6)=>250,chr(7)=>250,chr(8)=>250,chr(9)=>250,chr(10)=>250,chr(11)=>250,chr(12)=>250,chr(13)=>250,chr(14)=>250,chr(15)=>250,chr(16)=>250,chr(17)=>250,chr(18)=>250,chr(19)=>250,chr(20)=>250,chr(21)=>250, + chr(22)=>250,chr(23)=>250,chr(24)=>250,chr(25)=>250,chr(26)=>250,chr(27)=>250,chr(28)=>250,chr(29)=>250,chr(30)=>250,chr(31)=>250,' '=>250,'!'=>389,'"'=>555,'#'=>500,'$'=>500,'%'=>833,'&'=>778,'\''=>278,'('=>333,')'=>333,'*'=>500,'+'=>570, + ','=>250,'-'=>333,'.'=>250,'/'=>278,'0'=>500,'1'=>500,'2'=>500,'3'=>500,'4'=>500,'5'=>500,'6'=>500,'7'=>500,'8'=>500,'9'=>500,':'=>333,';'=>333,'<'=>570,'='=>570,'>'=>570,'?'=>500,'@'=>832,'A'=>667, + 'B'=>667,'C'=>667,'D'=>722,'E'=>667,'F'=>667,'G'=>722,'H'=>778,'I'=>389,'J'=>500,'K'=>667,'L'=>611,'M'=>889,'N'=>722,'O'=>722,'P'=>611,'Q'=>722,'R'=>667,'S'=>556,'T'=>611,'U'=>722,'V'=>667,'W'=>889, + 'X'=>667,'Y'=>611,'Z'=>611,'['=>333,'\\'=>278,']'=>333,'^'=>570,'_'=>500,'`'=>333,'a'=>500,'b'=>500,'c'=>444,'d'=>500,'e'=>444,'f'=>333,'g'=>500,'h'=>556,'i'=>278,'j'=>278,'k'=>500,'l'=>278,'m'=>778, + 'n'=>556,'o'=>500,'p'=>500,'q'=>500,'r'=>389,'s'=>389,'t'=>278,'u'=>556,'v'=>444,'w'=>667,'x'=>500,'y'=>444,'z'=>389,'{'=>348,'|'=>220,'}'=>348,'~'=>570,chr(127)=>350,chr(128)=>500,chr(129)=>350,chr(130)=>333,chr(131)=>500, + chr(132)=>500,chr(133)=>1000,chr(134)=>500,chr(135)=>500,chr(136)=>333,chr(137)=>1000,chr(138)=>556,chr(139)=>333,chr(140)=>944,chr(141)=>350,chr(142)=>611,chr(143)=>350,chr(144)=>350,chr(145)=>333,chr(146)=>333,chr(147)=>500,chr(148)=>500,chr(149)=>350,chr(150)=>500,chr(151)=>1000,chr(152)=>333,chr(153)=>1000, + chr(154)=>389,chr(155)=>333,chr(156)=>722,chr(157)=>350,chr(158)=>389,chr(159)=>611,chr(160)=>250,chr(161)=>389,chr(162)=>500,chr(163)=>500,chr(164)=>500,chr(165)=>500,chr(166)=>220,chr(167)=>500,chr(168)=>333,chr(169)=>747,chr(170)=>266,chr(171)=>500,chr(172)=>606,chr(173)=>333,chr(174)=>747,chr(175)=>333, + chr(176)=>400,chr(177)=>570,chr(178)=>300,chr(179)=>300,chr(180)=>333,chr(181)=>576,chr(182)=>500,chr(183)=>250,chr(184)=>333,chr(185)=>300,chr(186)=>300,chr(187)=>500,chr(188)=>750,chr(189)=>750,chr(190)=>750,chr(191)=>500,chr(192)=>667,chr(193)=>667,chr(194)=>667,chr(195)=>667,chr(196)=>667,chr(197)=>667, + chr(198)=>944,chr(199)=>667,chr(200)=>667,chr(201)=>667,chr(202)=>667,chr(203)=>667,chr(204)=>389,chr(205)=>389,chr(206)=>389,chr(207)=>389,chr(208)=>722,chr(209)=>722,chr(210)=>722,chr(211)=>722,chr(212)=>722,chr(213)=>722,chr(214)=>722,chr(215)=>570,chr(216)=>722,chr(217)=>722,chr(218)=>722,chr(219)=>722, + chr(220)=>722,chr(221)=>611,chr(222)=>611,chr(223)=>500,chr(224)=>500,chr(225)=>500,chr(226)=>500,chr(227)=>500,chr(228)=>500,chr(229)=>500,chr(230)=>722,chr(231)=>444,chr(232)=>444,chr(233)=>444,chr(234)=>444,chr(235)=>444,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>500,chr(241)=>556, + chr(242)=>500,chr(243)=>500,chr(244)=>500,chr(245)=>500,chr(246)=>500,chr(247)=>570,chr(248)=>500,chr(249)=>556,chr(250)=>556,chr(251)=>556,chr(252)=>556,chr(253)=>444,chr(254)=>500,chr(255)=>444); +$enc = 'cp1252'; +$uv = array(0=>array(0,128),128=>8364,130=>8218,131=>402,132=>8222,133=>8230,134=>array(8224,2),136=>710,137=>8240,138=>352,139=>8249,140=>338,142=>381,145=>array(8216,2),147=>array(8220,2),149=>8226,150=>array(8211,2),152=>732,153=>8482,154=>353,155=>8250,156=>339,158=>382,159=>376,160=>array(160,96)); +?> diff --git a/includes/fpdf/font/timesi.php b/includes/fpdf/font/timesi.php new file mode 100644 index 0000000..f958b5b --- /dev/null +++ b/includes/fpdf/font/timesi.php @@ -0,0 +1,21 @@ +250,chr(1)=>250,chr(2)=>250,chr(3)=>250,chr(4)=>250,chr(5)=>250,chr(6)=>250,chr(7)=>250,chr(8)=>250,chr(9)=>250,chr(10)=>250,chr(11)=>250,chr(12)=>250,chr(13)=>250,chr(14)=>250,chr(15)=>250,chr(16)=>250,chr(17)=>250,chr(18)=>250,chr(19)=>250,chr(20)=>250,chr(21)=>250, + chr(22)=>250,chr(23)=>250,chr(24)=>250,chr(25)=>250,chr(26)=>250,chr(27)=>250,chr(28)=>250,chr(29)=>250,chr(30)=>250,chr(31)=>250,' '=>250,'!'=>333,'"'=>420,'#'=>500,'$'=>500,'%'=>833,'&'=>778,'\''=>214,'('=>333,')'=>333,'*'=>500,'+'=>675, + ','=>250,'-'=>333,'.'=>250,'/'=>278,'0'=>500,'1'=>500,'2'=>500,'3'=>500,'4'=>500,'5'=>500,'6'=>500,'7'=>500,'8'=>500,'9'=>500,':'=>333,';'=>333,'<'=>675,'='=>675,'>'=>675,'?'=>500,'@'=>920,'A'=>611, + 'B'=>611,'C'=>667,'D'=>722,'E'=>611,'F'=>611,'G'=>722,'H'=>722,'I'=>333,'J'=>444,'K'=>667,'L'=>556,'M'=>833,'N'=>667,'O'=>722,'P'=>611,'Q'=>722,'R'=>611,'S'=>500,'T'=>556,'U'=>722,'V'=>611,'W'=>833, + 'X'=>611,'Y'=>556,'Z'=>556,'['=>389,'\\'=>278,']'=>389,'^'=>422,'_'=>500,'`'=>333,'a'=>500,'b'=>500,'c'=>444,'d'=>500,'e'=>444,'f'=>278,'g'=>500,'h'=>500,'i'=>278,'j'=>278,'k'=>444,'l'=>278,'m'=>722, + 'n'=>500,'o'=>500,'p'=>500,'q'=>500,'r'=>389,'s'=>389,'t'=>278,'u'=>500,'v'=>444,'w'=>667,'x'=>444,'y'=>444,'z'=>389,'{'=>400,'|'=>275,'}'=>400,'~'=>541,chr(127)=>350,chr(128)=>500,chr(129)=>350,chr(130)=>333,chr(131)=>500, + chr(132)=>556,chr(133)=>889,chr(134)=>500,chr(135)=>500,chr(136)=>333,chr(137)=>1000,chr(138)=>500,chr(139)=>333,chr(140)=>944,chr(141)=>350,chr(142)=>556,chr(143)=>350,chr(144)=>350,chr(145)=>333,chr(146)=>333,chr(147)=>556,chr(148)=>556,chr(149)=>350,chr(150)=>500,chr(151)=>889,chr(152)=>333,chr(153)=>980, + chr(154)=>389,chr(155)=>333,chr(156)=>667,chr(157)=>350,chr(158)=>389,chr(159)=>556,chr(160)=>250,chr(161)=>389,chr(162)=>500,chr(163)=>500,chr(164)=>500,chr(165)=>500,chr(166)=>275,chr(167)=>500,chr(168)=>333,chr(169)=>760,chr(170)=>276,chr(171)=>500,chr(172)=>675,chr(173)=>333,chr(174)=>760,chr(175)=>333, + chr(176)=>400,chr(177)=>675,chr(178)=>300,chr(179)=>300,chr(180)=>333,chr(181)=>500,chr(182)=>523,chr(183)=>250,chr(184)=>333,chr(185)=>300,chr(186)=>310,chr(187)=>500,chr(188)=>750,chr(189)=>750,chr(190)=>750,chr(191)=>500,chr(192)=>611,chr(193)=>611,chr(194)=>611,chr(195)=>611,chr(196)=>611,chr(197)=>611, + chr(198)=>889,chr(199)=>667,chr(200)=>611,chr(201)=>611,chr(202)=>611,chr(203)=>611,chr(204)=>333,chr(205)=>333,chr(206)=>333,chr(207)=>333,chr(208)=>722,chr(209)=>667,chr(210)=>722,chr(211)=>722,chr(212)=>722,chr(213)=>722,chr(214)=>722,chr(215)=>675,chr(216)=>722,chr(217)=>722,chr(218)=>722,chr(219)=>722, + chr(220)=>722,chr(221)=>556,chr(222)=>611,chr(223)=>500,chr(224)=>500,chr(225)=>500,chr(226)=>500,chr(227)=>500,chr(228)=>500,chr(229)=>500,chr(230)=>667,chr(231)=>444,chr(232)=>444,chr(233)=>444,chr(234)=>444,chr(235)=>444,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>500,chr(241)=>500, + chr(242)=>500,chr(243)=>500,chr(244)=>500,chr(245)=>500,chr(246)=>500,chr(247)=>675,chr(248)=>500,chr(249)=>500,chr(250)=>500,chr(251)=>500,chr(252)=>500,chr(253)=>444,chr(254)=>500,chr(255)=>444); +$enc = 'cp1252'; +$uv = array(0=>array(0,128),128=>8364,130=>8218,131=>402,132=>8222,133=>8230,134=>array(8224,2),136=>710,137=>8240,138=>352,139=>8249,140=>338,142=>381,145=>array(8216,2),147=>array(8220,2),149=>8226,150=>array(8211,2),152=>732,153=>8482,154=>353,155=>8250,156=>339,158=>382,159=>376,160=>array(160,96)); +?> diff --git a/includes/fpdf/font/zapfdingbats.php b/includes/fpdf/font/zapfdingbats.php new file mode 100644 index 0000000..7c2cb5e --- /dev/null +++ b/includes/fpdf/font/zapfdingbats.php @@ -0,0 +1,20 @@ +0,chr(1)=>0,chr(2)=>0,chr(3)=>0,chr(4)=>0,chr(5)=>0,chr(6)=>0,chr(7)=>0,chr(8)=>0,chr(9)=>0,chr(10)=>0,chr(11)=>0,chr(12)=>0,chr(13)=>0,chr(14)=>0,chr(15)=>0,chr(16)=>0,chr(17)=>0,chr(18)=>0,chr(19)=>0,chr(20)=>0,chr(21)=>0, + chr(22)=>0,chr(23)=>0,chr(24)=>0,chr(25)=>0,chr(26)=>0,chr(27)=>0,chr(28)=>0,chr(29)=>0,chr(30)=>0,chr(31)=>0,' '=>278,'!'=>974,'"'=>961,'#'=>974,'$'=>980,'%'=>719,'&'=>789,'\''=>790,'('=>791,')'=>690,'*'=>960,'+'=>939, + ','=>549,'-'=>855,'.'=>911,'/'=>933,'0'=>911,'1'=>945,'2'=>974,'3'=>755,'4'=>846,'5'=>762,'6'=>761,'7'=>571,'8'=>677,'9'=>763,':'=>760,';'=>759,'<'=>754,'='=>494,'>'=>552,'?'=>537,'@'=>577,'A'=>692, + 'B'=>786,'C'=>788,'D'=>788,'E'=>790,'F'=>793,'G'=>794,'H'=>816,'I'=>823,'J'=>789,'K'=>841,'L'=>823,'M'=>833,'N'=>816,'O'=>831,'P'=>923,'Q'=>744,'R'=>723,'S'=>749,'T'=>790,'U'=>792,'V'=>695,'W'=>776, + 'X'=>768,'Y'=>792,'Z'=>759,'['=>707,'\\'=>708,']'=>682,'^'=>701,'_'=>826,'`'=>815,'a'=>789,'b'=>789,'c'=>707,'d'=>687,'e'=>696,'f'=>689,'g'=>786,'h'=>787,'i'=>713,'j'=>791,'k'=>785,'l'=>791,'m'=>873, + 'n'=>761,'o'=>762,'p'=>762,'q'=>759,'r'=>759,'s'=>892,'t'=>892,'u'=>788,'v'=>784,'w'=>438,'x'=>138,'y'=>277,'z'=>415,'{'=>392,'|'=>392,'}'=>668,'~'=>668,chr(127)=>0,chr(128)=>390,chr(129)=>390,chr(130)=>317,chr(131)=>317, + chr(132)=>276,chr(133)=>276,chr(134)=>509,chr(135)=>509,chr(136)=>410,chr(137)=>410,chr(138)=>234,chr(139)=>234,chr(140)=>334,chr(141)=>334,chr(142)=>0,chr(143)=>0,chr(144)=>0,chr(145)=>0,chr(146)=>0,chr(147)=>0,chr(148)=>0,chr(149)=>0,chr(150)=>0,chr(151)=>0,chr(152)=>0,chr(153)=>0, + chr(154)=>0,chr(155)=>0,chr(156)=>0,chr(157)=>0,chr(158)=>0,chr(159)=>0,chr(160)=>0,chr(161)=>732,chr(162)=>544,chr(163)=>544,chr(164)=>910,chr(165)=>667,chr(166)=>760,chr(167)=>760,chr(168)=>776,chr(169)=>595,chr(170)=>694,chr(171)=>626,chr(172)=>788,chr(173)=>788,chr(174)=>788,chr(175)=>788, + chr(176)=>788,chr(177)=>788,chr(178)=>788,chr(179)=>788,chr(180)=>788,chr(181)=>788,chr(182)=>788,chr(183)=>788,chr(184)=>788,chr(185)=>788,chr(186)=>788,chr(187)=>788,chr(188)=>788,chr(189)=>788,chr(190)=>788,chr(191)=>788,chr(192)=>788,chr(193)=>788,chr(194)=>788,chr(195)=>788,chr(196)=>788,chr(197)=>788, + chr(198)=>788,chr(199)=>788,chr(200)=>788,chr(201)=>788,chr(202)=>788,chr(203)=>788,chr(204)=>788,chr(205)=>788,chr(206)=>788,chr(207)=>788,chr(208)=>788,chr(209)=>788,chr(210)=>788,chr(211)=>788,chr(212)=>894,chr(213)=>838,chr(214)=>1016,chr(215)=>458,chr(216)=>748,chr(217)=>924,chr(218)=>748,chr(219)=>918, + chr(220)=>927,chr(221)=>928,chr(222)=>928,chr(223)=>834,chr(224)=>873,chr(225)=>828,chr(226)=>924,chr(227)=>924,chr(228)=>917,chr(229)=>930,chr(230)=>931,chr(231)=>463,chr(232)=>883,chr(233)=>836,chr(234)=>836,chr(235)=>867,chr(236)=>867,chr(237)=>696,chr(238)=>696,chr(239)=>874,chr(240)=>0,chr(241)=>874, + chr(242)=>760,chr(243)=>946,chr(244)=>771,chr(245)=>865,chr(246)=>771,chr(247)=>888,chr(248)=>967,chr(249)=>888,chr(250)=>831,chr(251)=>873,chr(252)=>927,chr(253)=>970,chr(254)=>918,chr(255)=>0); +$uv = array(32=>32,33=>array(9985,4),37=>9742,38=>array(9990,4),42=>9755,43=>9758,44=>array(9996,28),72=>9733,73=>array(10025,35),108=>9679,109=>10061,110=>9632,111=>array(10063,4),115=>9650,116=>9660,117=>9670,118=>10070,119=>9687,120=>array(10072,7),128=>array(10088,14),161=>array(10081,7),168=>9827,169=>9830,170=>9829,171=>9824,172=>array(9312,10),182=>array(10102,31),213=>8594,214=>array(8596,2),216=>array(10136,24),241=>array(10161,14)); +?> diff --git a/includes/fpdf/fpdf.php b/includes/fpdf/fpdf.php new file mode 100644 index 0000000..05b3f1b --- /dev/null +++ b/includes/fpdf/fpdf.php @@ -0,0 +1,1934 @@ +state = 0; + $this->page = 0; + $this->n = 2; + $this->buffer = ''; + $this->pages = array(); + $this->PageInfo = array(); + $this->fonts = array(); + $this->FontFiles = array(); + $this->encodings = array(); + $this->cmaps = array(); + $this->images = array(); + $this->links = array(); + $this->InHeader = false; + $this->InFooter = false; + $this->lasth = 0; + $this->FontFamily = ''; + $this->FontStyle = ''; + $this->FontSizePt = 12; + $this->underline = false; + $this->DrawColor = '0 G'; + $this->FillColor = '0 g'; + $this->TextColor = '0 g'; + $this->ColorFlag = false; + $this->WithAlpha = false; + $this->ws = 0; + $this->iconv = function_exists('iconv'); + // Font path + if(defined('FPDF_FONTPATH')) + $this->fontpath = FPDF_FONTPATH; + else + $this->fontpath = dirname(__FILE__).'/font/'; + // Core fonts + $this->CoreFonts = array('courier', 'helvetica', 'times', 'symbol', 'zapfdingbats'); + // Scale factor + if($unit=='pt') + $this->k = 1; + elseif($unit=='mm') + $this->k = 72/25.4; + elseif($unit=='cm') + $this->k = 72/2.54; + elseif($unit=='in') + $this->k = 72; + else + $this->Error('Incorrect unit: '.$unit); + // Page sizes + $this->StdPageSizes = array('a3'=>array(841.89,1190.55), 'a4'=>array(595.28,841.89), 'a5'=>array(420.94,595.28), + 'letter'=>array(612,792), 'legal'=>array(612,1008)); + $size = $this->_getpagesize($size); + $this->DefPageSize = $size; + $this->CurPageSize = $size; + // Page orientation + $orientation = strtolower($orientation); + if($orientation=='p' || $orientation=='portrait') + { + $this->DefOrientation = 'P'; + $this->w = $size[0]; + $this->h = $size[1]; + } + elseif($orientation=='l' || $orientation=='landscape') + { + $this->DefOrientation = 'L'; + $this->w = $size[1]; + $this->h = $size[0]; + } + else + $this->Error('Incorrect orientation: '.$orientation); + $this->CurOrientation = $this->DefOrientation; + $this->wPt = $this->w*$this->k; + $this->hPt = $this->h*$this->k; + // Page rotation + $this->CurRotation = 0; + // Page margins (1 cm) + $margin = 28.35/$this->k; + $this->SetMargins($margin,$margin); + // Interior cell margin (1 mm) + $this->cMargin = $margin/10; + // Line width (0.2 mm) + $this->LineWidth = .567/$this->k; + // Automatic page break + $this->SetAutoPageBreak(true,2*$margin); + // Default display mode + $this->SetDisplayMode('default'); + // Enable compression + $this->SetCompression(true); + // Metadata + $this->metadata = array('Producer'=>'FPDF '.self::VERSION); + // Set default PDF version number + $this->PDFVersion = '1.3'; +} + +function SetMargins($left, $top, $right=null) +{ + // Set left, top and right margins + $this->lMargin = $left; + $this->tMargin = $top; + if($right===null) + $right = $left; + $this->rMargin = $right; +} + +function SetLeftMargin($margin) +{ + // Set left margin + $this->lMargin = $margin; + if($this->page>0 && $this->x<$margin) + $this->x = $margin; +} + +function SetTopMargin($margin) +{ + // Set top margin + $this->tMargin = $margin; +} + +function SetRightMargin($margin) +{ + // Set right margin + $this->rMargin = $margin; +} + +function SetAutoPageBreak($auto, $margin=0) +{ + // Set auto page break mode and triggering margin + $this->AutoPageBreak = $auto; + $this->bMargin = $margin; + $this->PageBreakTrigger = $this->h-$margin; +} + +function SetDisplayMode($zoom, $layout='default') +{ + // Set display mode in viewer + if($zoom=='fullpage' || $zoom=='fullwidth' || $zoom=='real' || $zoom=='default' || !is_string($zoom)) + $this->ZoomMode = $zoom; + else + $this->Error('Incorrect zoom display mode: '.$zoom); + if($layout=='single' || $layout=='continuous' || $layout=='two' || $layout=='default') + $this->LayoutMode = $layout; + else + $this->Error('Incorrect layout display mode: '.$layout); +} + +function SetCompression($compress) +{ + // Set page compression + if(function_exists('gzcompress')) + $this->compress = $compress; + else + $this->compress = false; +} + +function SetTitle($title, $isUTF8=false) +{ + // Title of document + $this->metadata['Title'] = $isUTF8 ? $title : $this->_UTF8encode($title); +} + +function SetAuthor($author, $isUTF8=false) +{ + // Author of document + $this->metadata['Author'] = $isUTF8 ? $author : $this->_UTF8encode($author); +} + +function SetSubject($subject, $isUTF8=false) +{ + // Subject of document + $this->metadata['Subject'] = $isUTF8 ? $subject : $this->_UTF8encode($subject); +} + +function SetKeywords($keywords, $isUTF8=false) +{ + // Keywords of document + $this->metadata['Keywords'] = $isUTF8 ? $keywords : $this->_UTF8encode($keywords); +} + +function SetCreator($creator, $isUTF8=false) +{ + // Creator of document + $this->metadata['Creator'] = $isUTF8 ? $creator : $this->_UTF8encode($creator); +} + +function AliasNbPages($alias='{nb}') +{ + // Define an alias for total number of pages + $this->AliasNbPages = $alias; +} + +function Error($msg) +{ + // Fatal error + throw new Exception('FPDF error: '.$msg); +} + +function Close() +{ + // Terminate document + if($this->state==3) + return; + if($this->page==0) + $this->AddPage(); + // Page footer + $this->InFooter = true; + $this->Footer(); + $this->InFooter = false; + // Close page + $this->_endpage(); + // Close document + $this->_enddoc(); +} + +function AddPage($orientation='', $size='', $rotation=0) +{ + // Start a new page + if($this->state==3) + $this->Error('The document is closed'); + $family = $this->FontFamily; + $style = $this->FontStyle.($this->underline ? 'U' : ''); + $fontsize = $this->FontSizePt; + $lw = $this->LineWidth; + $dc = $this->DrawColor; + $fc = $this->FillColor; + $tc = $this->TextColor; + $cf = $this->ColorFlag; + if($this->page>0) + { + // Page footer + $this->InFooter = true; + $this->Footer(); + $this->InFooter = false; + // Close page + $this->_endpage(); + } + // Start new page + $this->_beginpage($orientation,$size,$rotation); + // Set line cap style to square + $this->_out('2 J'); + // Set line width + $this->LineWidth = $lw; + $this->_out(sprintf('%.2F w',$lw*$this->k)); + // Set font + if($family) + $this->SetFont($family,$style,$fontsize); + // Set colors + $this->DrawColor = $dc; + if($dc!='0 G') + $this->_out($dc); + $this->FillColor = $fc; + if($fc!='0 g') + $this->_out($fc); + $this->TextColor = $tc; + $this->ColorFlag = $cf; + // Page header + $this->InHeader = true; + $this->Header(); + $this->InHeader = false; + // Restore line width + if($this->LineWidth!=$lw) + { + $this->LineWidth = $lw; + $this->_out(sprintf('%.2F w',$lw*$this->k)); + } + // Restore font + if($family) + $this->SetFont($family,$style,$fontsize); + // Restore colors + if($this->DrawColor!=$dc) + { + $this->DrawColor = $dc; + $this->_out($dc); + } + if($this->FillColor!=$fc) + { + $this->FillColor = $fc; + $this->_out($fc); + } + $this->TextColor = $tc; + $this->ColorFlag = $cf; +} + +function Header() +{ + // To be implemented in your own inherited class +} + +function Footer() +{ + // To be implemented in your own inherited class +} + +function PageNo() +{ + // Get current page number + return $this->page; +} + +function SetDrawColor($r, $g=null, $b=null) +{ + // Set color for all stroking operations + if(($r==0 && $g==0 && $b==0) || $g===null) + $this->DrawColor = sprintf('%.3F G',$r/255); + else + $this->DrawColor = sprintf('%.3F %.3F %.3F RG',$r/255,$g/255,$b/255); + if($this->page>0) + $this->_out($this->DrawColor); +} + +function SetFillColor($r, $g=null, $b=null) +{ + // Set color for all filling operations + if(($r==0 && $g==0 && $b==0) || $g===null) + $this->FillColor = sprintf('%.3F g',$r/255); + else + $this->FillColor = sprintf('%.3F %.3F %.3F rg',$r/255,$g/255,$b/255); + $this->ColorFlag = ($this->FillColor!=$this->TextColor); + if($this->page>0) + $this->_out($this->FillColor); +} + +function SetTextColor($r, $g=null, $b=null) +{ + // Set color for text + if(($r==0 && $g==0 && $b==0) || $g===null) + $this->TextColor = sprintf('%.3F g',$r/255); + else + $this->TextColor = sprintf('%.3F %.3F %.3F rg',$r/255,$g/255,$b/255); + $this->ColorFlag = ($this->FillColor!=$this->TextColor); +} + +function GetStringWidth($s) +{ + // Get width of a string in the current font + $cw = $this->CurrentFont['cw']; + $w = 0; + $s = (string)$s; + $l = strlen($s); + for($i=0;$i<$l;$i++) + $w += $cw[$s[$i]]; + return $w*$this->FontSize/1000; +} + +function SetLineWidth($width) +{ + // Set line width + $this->LineWidth = $width; + if($this->page>0) + $this->_out(sprintf('%.2F w',$width*$this->k)); +} + +function Line($x1, $y1, $x2, $y2) +{ + // Draw a line + $this->_out(sprintf('%.2F %.2F m %.2F %.2F l S',$x1*$this->k,($this->h-$y1)*$this->k,$x2*$this->k,($this->h-$y2)*$this->k)); +} + +function Rect($x, $y, $w, $h, $style='') +{ + // Draw a rectangle + if($style=='F') + $op = 'f'; + elseif($style=='FD' || $style=='DF') + $op = 'B'; + else + $op = 'S'; + $this->_out(sprintf('%.2F %.2F %.2F %.2F re %s',$x*$this->k,($this->h-$y)*$this->k,$w*$this->k,-$h*$this->k,$op)); +} + +function AddFont($family, $style='', $file='', $dir='') +{ + // Add a TrueType, OpenType or Type1 font + $family = strtolower($family); + if($file=='') + $file = str_replace(' ','',$family).strtolower($style).'.php'; + $style = strtoupper($style); + if($style=='IB') + $style = 'BI'; + $fontkey = $family.$style; + if(isset($this->fonts[$fontkey])) + return; + if(strpos($file,'/')!==false || strpos($file,"\\")!==false) + $this->Error('Incorrect font definition file name: '.$file); + if($dir=='') + $dir = $this->fontpath; + if(substr($dir,-1)!='/' && substr($dir,-1)!='\\') + $dir .= '/'; + $info = $this->_loadfont($dir.$file); + $info['i'] = count($this->fonts)+1; + if(!empty($info['file'])) + { + // Embedded font + $info['file'] = $dir.$info['file']; + if($info['type']=='TrueType') + $this->FontFiles[$info['file']] = array('length1'=>$info['originalsize']); + else + $this->FontFiles[$info['file']] = array('length1'=>$info['size1'], 'length2'=>$info['size2']); + } + $this->fonts[$fontkey] = $info; +} + +function SetFont($family, $style='', $size=0) +{ + // Select a font; size given in points + if($family=='') + $family = $this->FontFamily; + else + $family = strtolower($family); + $style = strtoupper($style); + if(strpos($style,'U')!==false) + { + $this->underline = true; + $style = str_replace('U','',$style); + } + else + $this->underline = false; + if($style=='IB') + $style = 'BI'; + if($size==0) + $size = $this->FontSizePt; + // Test if font is already selected + if($this->FontFamily==$family && $this->FontStyle==$style && $this->FontSizePt==$size) + return; + // Test if font is already loaded + $fontkey = $family.$style; + if(!isset($this->fonts[$fontkey])) + { + // Test if one of the core fonts + if($family=='arial') + $family = 'helvetica'; + if(in_array($family,$this->CoreFonts)) + { + if($family=='symbol' || $family=='zapfdingbats') + $style = ''; + $fontkey = $family.$style; + if(!isset($this->fonts[$fontkey])) + $this->AddFont($family,$style); + } + else + $this->Error('Undefined font: '.$family.' '.$style); + } + // Select it + $this->FontFamily = $family; + $this->FontStyle = $style; + $this->FontSizePt = $size; + $this->FontSize = $size/$this->k; + $this->CurrentFont = $this->fonts[$fontkey]; + if($this->page>0) + $this->_out(sprintf('BT /F%d %.2F Tf ET',$this->CurrentFont['i'],$this->FontSizePt)); +} + +function SetFontSize($size) +{ + // Set font size in points + if($this->FontSizePt==$size) + return; + $this->FontSizePt = $size; + $this->FontSize = $size/$this->k; + if($this->page>0 && isset($this->CurrentFont)) + $this->_out(sprintf('BT /F%d %.2F Tf ET',$this->CurrentFont['i'],$this->FontSizePt)); +} + +function AddLink() +{ + // Create a new internal link + $n = count($this->links)+1; + $this->links[$n] = array(0, 0); + return $n; +} + +function SetLink($link, $y=0, $page=-1) +{ + // Set destination of internal link + if($y==-1) + $y = $this->y; + if($page==-1) + $page = $this->page; + $this->links[$link] = array($page, $y); +} + +function Link($x, $y, $w, $h, $link) +{ + // Put a link on the page + $this->PageLinks[$this->page][] = array($x*$this->k, $this->hPt-$y*$this->k, $w*$this->k, $h*$this->k, $link); +} + +function Text($x, $y, $txt) +{ + // Output a string + if(!isset($this->CurrentFont)) + $this->Error('No font has been set'); + $txt = (string)$txt; + $s = sprintf('BT %.2F %.2F Td (%s) Tj ET',$x*$this->k,($this->h-$y)*$this->k,$this->_escape($txt)); + if($this->underline && $txt!=='') + $s .= ' '.$this->_dounderline($x,$y,$txt); + if($this->ColorFlag) + $s = 'q '.$this->TextColor.' '.$s.' Q'; + $this->_out($s); +} + +function AcceptPageBreak() +{ + // Accept automatic page break or not + return $this->AutoPageBreak; +} + +function Cell($w, $h=0, $txt='', $border=0, $ln=0, $align='', $fill=false, $link='') +{ + // Output a cell + $k = $this->k; + if($this->y+$h>$this->PageBreakTrigger && !$this->InHeader && !$this->InFooter && $this->AcceptPageBreak()) + { + // Automatic page break + $x = $this->x; + $ws = $this->ws; + if($ws>0) + { + $this->ws = 0; + $this->_out('0 Tw'); + } + $this->AddPage($this->CurOrientation,$this->CurPageSize,$this->CurRotation); + $this->x = $x; + if($ws>0) + { + $this->ws = $ws; + $this->_out(sprintf('%.3F Tw',$ws*$k)); + } + } + if($w==0) + $w = $this->w-$this->rMargin-$this->x; + $s = ''; + if($fill || $border==1) + { + if($fill) + $op = ($border==1) ? 'B' : 'f'; + else + $op = 'S'; + $s = sprintf('%.2F %.2F %.2F %.2F re %s ',$this->x*$k,($this->h-$this->y)*$k,$w*$k,-$h*$k,$op); + } + if(is_string($border)) + { + $x = $this->x; + $y = $this->y; + if(strpos($border,'L')!==false) + $s .= sprintf('%.2F %.2F m %.2F %.2F l S ',$x*$k,($this->h-$y)*$k,$x*$k,($this->h-($y+$h))*$k); + if(strpos($border,'T')!==false) + $s .= sprintf('%.2F %.2F m %.2F %.2F l S ',$x*$k,($this->h-$y)*$k,($x+$w)*$k,($this->h-$y)*$k); + if(strpos($border,'R')!==false) + $s .= sprintf('%.2F %.2F m %.2F %.2F l S ',($x+$w)*$k,($this->h-$y)*$k,($x+$w)*$k,($this->h-($y+$h))*$k); + if(strpos($border,'B')!==false) + $s .= sprintf('%.2F %.2F m %.2F %.2F l S ',$x*$k,($this->h-($y+$h))*$k,($x+$w)*$k,($this->h-($y+$h))*$k); + } + $txt = (string)$txt; + if($txt!=='') + { + if(!isset($this->CurrentFont)) + $this->Error('No font has been set'); + if($align=='R') + $dx = $w-$this->cMargin-$this->GetStringWidth($txt); + elseif($align=='C') + $dx = ($w-$this->GetStringWidth($txt))/2; + else + $dx = $this->cMargin; + if($this->ColorFlag) + $s .= 'q '.$this->TextColor.' '; + $s .= sprintf('BT %.2F %.2F Td (%s) Tj ET',($this->x+$dx)*$k,($this->h-($this->y+.5*$h+.3*$this->FontSize))*$k,$this->_escape($txt)); + if($this->underline) + $s .= ' '.$this->_dounderline($this->x+$dx,$this->y+.5*$h+.3*$this->FontSize,$txt); + if($this->ColorFlag) + $s .= ' Q'; + if($link) + $this->Link($this->x+$dx,$this->y+.5*$h-.5*$this->FontSize,$this->GetStringWidth($txt),$this->FontSize,$link); + } + if($s) + $this->_out($s); + $this->lasth = $h; + if($ln>0) + { + // Go to next line + $this->y += $h; + if($ln==1) + $this->x = $this->lMargin; + } + else + $this->x += $w; +} + +function MultiCell($w, $h, $txt, $border=0, $align='J', $fill=false) +{ + // Output text with automatic or explicit line breaks + if(!isset($this->CurrentFont)) + $this->Error('No font has been set'); + $cw = $this->CurrentFont['cw']; + if($w==0) + $w = $this->w-$this->rMargin-$this->x; + $wmax = ($w-2*$this->cMargin)*1000/$this->FontSize; + $s = str_replace("\r",'',(string)$txt); + $nb = strlen($s); + if($nb>0 && $s[$nb-1]=="\n") + $nb--; + $b = 0; + if($border) + { + if($border==1) + { + $border = 'LTRB'; + $b = 'LRT'; + $b2 = 'LR'; + } + else + { + $b2 = ''; + if(strpos($border,'L')!==false) + $b2 .= 'L'; + if(strpos($border,'R')!==false) + $b2 .= 'R'; + $b = (strpos($border,'T')!==false) ? $b2.'T' : $b2; + } + } + $sep = -1; + $i = 0; + $j = 0; + $l = 0; + $ns = 0; + $nl = 1; + while($i<$nb) + { + // Get next character + $c = $s[$i]; + if($c=="\n") + { + // Explicit line break + if($this->ws>0) + { + $this->ws = 0; + $this->_out('0 Tw'); + } + $this->Cell($w,$h,substr($s,$j,$i-$j),$b,2,$align,$fill); + $i++; + $sep = -1; + $j = $i; + $l = 0; + $ns = 0; + $nl++; + if($border && $nl==2) + $b = $b2; + continue; + } + if($c==' ') + { + $sep = $i; + $ls = $l; + $ns++; + } + $l += $cw[$c]; + if($l>$wmax) + { + // Automatic line break + if($sep==-1) + { + if($i==$j) + $i++; + if($this->ws>0) + { + $this->ws = 0; + $this->_out('0 Tw'); + } + $this->Cell($w,$h,substr($s,$j,$i-$j),$b,2,$align,$fill); + } + else + { + if($align=='J') + { + $this->ws = ($ns>1) ? ($wmax-$ls)/1000*$this->FontSize/($ns-1) : 0; + $this->_out(sprintf('%.3F Tw',$this->ws*$this->k)); + } + $this->Cell($w,$h,substr($s,$j,$sep-$j),$b,2,$align,$fill); + $i = $sep+1; + } + $sep = -1; + $j = $i; + $l = 0; + $ns = 0; + $nl++; + if($border && $nl==2) + $b = $b2; + } + else + $i++; + } + // Last chunk + if($this->ws>0) + { + $this->ws = 0; + $this->_out('0 Tw'); + } + if($border && strpos($border,'B')!==false) + $b .= 'B'; + $this->Cell($w,$h,substr($s,$j,$i-$j),$b,2,$align,$fill); + $this->x = $this->lMargin; +} + +function Write($h, $txt, $link='') +{ + // Output text in flowing mode + if(!isset($this->CurrentFont)) + $this->Error('No font has been set'); + $cw = $this->CurrentFont['cw']; + $w = $this->w-$this->rMargin-$this->x; + $wmax = ($w-2*$this->cMargin)*1000/$this->FontSize; + $s = str_replace("\r",'',(string)$txt); + $nb = strlen($s); + $sep = -1; + $i = 0; + $j = 0; + $l = 0; + $nl = 1; + while($i<$nb) + { + // Get next character + $c = $s[$i]; + if($c=="\n") + { + // Explicit line break + $this->Cell($w,$h,substr($s,$j,$i-$j),0,2,'',false,$link); + $i++; + $sep = -1; + $j = $i; + $l = 0; + if($nl==1) + { + $this->x = $this->lMargin; + $w = $this->w-$this->rMargin-$this->x; + $wmax = ($w-2*$this->cMargin)*1000/$this->FontSize; + } + $nl++; + continue; + } + if($c==' ') + $sep = $i; + $l += $cw[$c]; + if($l>$wmax) + { + // Automatic line break + if($sep==-1) + { + if($this->x>$this->lMargin) + { + // Move to next line + $this->x = $this->lMargin; + $this->y += $h; + $w = $this->w-$this->rMargin-$this->x; + $wmax = ($w-2*$this->cMargin)*1000/$this->FontSize; + $i++; + $nl++; + continue; + } + if($i==$j) + $i++; + $this->Cell($w,$h,substr($s,$j,$i-$j),0,2,'',false,$link); + } + else + { + $this->Cell($w,$h,substr($s,$j,$sep-$j),0,2,'',false,$link); + $i = $sep+1; + } + $sep = -1; + $j = $i; + $l = 0; + if($nl==1) + { + $this->x = $this->lMargin; + $w = $this->w-$this->rMargin-$this->x; + $wmax = ($w-2*$this->cMargin)*1000/$this->FontSize; + } + $nl++; + } + else + $i++; + } + // Last chunk + if($i!=$j) + $this->Cell($l/1000*$this->FontSize,$h,substr($s,$j),0,0,'',false,$link); +} + +function Ln($h=null) +{ + // Line feed; default value is the last cell height + $this->x = $this->lMargin; + if($h===null) + $this->y += $this->lasth; + else + $this->y += $h; +} + +function Image($file, $x=null, $y=null, $w=0, $h=0, $type='', $link='') +{ + // Put an image on the page + if($file=='') + $this->Error('Image file name is empty'); + if(!isset($this->images[$file])) + { + // First use of this image, get info + if($type=='') + { + $pos = strrpos($file,'.'); + if(!$pos) + $this->Error('Image file has no extension and no type was specified: '.$file); + $type = substr($file,$pos+1); + } + $type = strtolower($type); + if($type=='jpeg') + $type = 'jpg'; + $mtd = '_parse'.$type; + if(!method_exists($this,$mtd)) + $this->Error('Unsupported image type: '.$type); + $info = $this->$mtd($file); + $info['i'] = count($this->images)+1; + $this->images[$file] = $info; + } + else + $info = $this->images[$file]; + + // Automatic width and height calculation if needed + if($w==0 && $h==0) + { + // Put image at 96 dpi + $w = -96; + $h = -96; + } + if($w<0) + $w = -$info['w']*72/$w/$this->k; + if($h<0) + $h = -$info['h']*72/$h/$this->k; + if($w==0) + $w = $h*$info['w']/$info['h']; + if($h==0) + $h = $w*$info['h']/$info['w']; + + // Flowing mode + if($y===null) + { + if($this->y+$h>$this->PageBreakTrigger && !$this->InHeader && !$this->InFooter && $this->AcceptPageBreak()) + { + // Automatic page break + $x2 = $this->x; + $this->AddPage($this->CurOrientation,$this->CurPageSize,$this->CurRotation); + $this->x = $x2; + } + $y = $this->y; + $this->y += $h; + } + + if($x===null) + $x = $this->x; + $this->_out(sprintf('q %.2F 0 0 %.2F %.2F %.2F cm /I%d Do Q',$w*$this->k,$h*$this->k,$x*$this->k,($this->h-($y+$h))*$this->k,$info['i'])); + if($link) + $this->Link($x,$y,$w,$h,$link); +} + +function GetPageWidth() +{ + // Get current page width + return $this->w; +} + +function GetPageHeight() +{ + // Get current page height + return $this->h; +} + +function GetX() +{ + // Get x position + return $this->x; +} + +function SetX($x) +{ + // Set x position + if($x>=0) + $this->x = $x; + else + $this->x = $this->w+$x; +} + +function GetY() +{ + // Get y position + return $this->y; +} + +function SetY($y, $resetX=true) +{ + // Set y position and optionally reset x + if($y>=0) + $this->y = $y; + else + $this->y = $this->h+$y; + if($resetX) + $this->x = $this->lMargin; +} + +function SetXY($x, $y) +{ + // Set x and y positions + $this->SetX($x); + $this->SetY($y,false); +} + +function Output($dest='', $name='', $isUTF8=false) +{ + // Output PDF to some destination + $this->Close(); + if(strlen($name)==1 && strlen($dest)!=1) + { + // Fix parameter order + $tmp = $dest; + $dest = $name; + $name = $tmp; + } + if($dest=='') + $dest = 'I'; + if($name=='') + $name = 'doc.pdf'; + switch(strtoupper($dest)) + { + case 'I': + // Send to standard output + $this->_checkoutput(); + if(PHP_SAPI!='cli') + { + // We send to a browser + header('Content-Type: application/pdf'); + header('Content-Disposition: inline; '.$this->_httpencode('filename',$name,$isUTF8)); + header('Cache-Control: private, max-age=0, must-revalidate'); + header('Pragma: public'); + } + echo $this->buffer; + break; + case 'D': + // Download file + $this->_checkoutput(); + header('Content-Type: application/pdf'); + header('Content-Disposition: attachment; '.$this->_httpencode('filename',$name,$isUTF8)); + header('Cache-Control: private, max-age=0, must-revalidate'); + header('Pragma: public'); + echo $this->buffer; + break; + case 'F': + // Save to local file + if(!file_put_contents($name,$this->buffer)) + $this->Error('Unable to create output file: '.$name); + break; + case 'S': + // Return as a string + return $this->buffer; + default: + $this->Error('Incorrect output destination: '.$dest); + } + return ''; +} + +/******************************************************************************* +* Protected methods * +*******************************************************************************/ + +protected function _checkoutput() +{ + if(PHP_SAPI!='cli') + { + if(headers_sent($file,$line)) + $this->Error("Some data has already been output, can't send PDF file (output started at $file:$line)"); + } + if(ob_get_length()) + { + // The output buffer is not empty + if(preg_match('/^(\xEF\xBB\xBF)?\s*$/',ob_get_contents())) + { + // It contains only a UTF-8 BOM and/or whitespace, let's clean it + ob_clean(); + } + else + $this->Error("Some data has already been output, can't send PDF file"); + } +} + +protected function _getpagesize($size) +{ + if(is_string($size)) + { + $size = strtolower($size); + if(!isset($this->StdPageSizes[$size])) + $this->Error('Unknown page size: '.$size); + $a = $this->StdPageSizes[$size]; + return array($a[0]/$this->k, $a[1]/$this->k); + } + else + { + if($size[0]>$size[1]) + return array($size[1], $size[0]); + else + return $size; + } +} + +protected function _beginpage($orientation, $size, $rotation) +{ + $this->page++; + $this->pages[$this->page] = ''; + $this->PageLinks[$this->page] = array(); + $this->state = 2; + $this->x = $this->lMargin; + $this->y = $this->tMargin; + $this->FontFamily = ''; + // Check page size and orientation + if($orientation=='') + $orientation = $this->DefOrientation; + else + $orientation = strtoupper($orientation[0]); + if($size=='') + $size = $this->DefPageSize; + else + $size = $this->_getpagesize($size); + if($orientation!=$this->CurOrientation || $size[0]!=$this->CurPageSize[0] || $size[1]!=$this->CurPageSize[1]) + { + // New size or orientation + if($orientation=='P') + { + $this->w = $size[0]; + $this->h = $size[1]; + } + else + { + $this->w = $size[1]; + $this->h = $size[0]; + } + $this->wPt = $this->w*$this->k; + $this->hPt = $this->h*$this->k; + $this->PageBreakTrigger = $this->h-$this->bMargin; + $this->CurOrientation = $orientation; + $this->CurPageSize = $size; + } + if($orientation!=$this->DefOrientation || $size[0]!=$this->DefPageSize[0] || $size[1]!=$this->DefPageSize[1]) + $this->PageInfo[$this->page]['size'] = array($this->wPt, $this->hPt); + if($rotation!=0) + { + if($rotation%90!=0) + $this->Error('Incorrect rotation value: '.$rotation); + $this->PageInfo[$this->page]['rotation'] = $rotation; + } + $this->CurRotation = $rotation; +} + +protected function _endpage() +{ + $this->state = 1; +} + +protected function _loadfont($path) +{ + // Load a font definition file + include($path); + if(!isset($name)) + $this->Error('Could not include font definition file: '.$path); + if(isset($enc)) + $enc = strtolower($enc); + if(!isset($subsetted)) + $subsetted = false; + return get_defined_vars(); +} + +protected function _isascii($s) +{ + // Test if string is ASCII + $nb = strlen($s); + for($i=0;$i<$nb;$i++) + { + if(ord($s[$i])>127) + return false; + } + return true; +} + +protected function _httpencode($param, $value, $isUTF8) +{ + // Encode HTTP header field parameter + if($this->_isascii($value)) + return $param.'="'.$value.'"'; + if(!$isUTF8) + $value = $this->_UTF8encode($value); + return $param."*=UTF-8''".rawurlencode($value); +} + +protected function _UTF8encode($s) +{ + // Convert ISO-8859-1 to UTF-8 + if($this->iconv) + return iconv('ISO-8859-1','UTF-8',$s); + $res = ''; + $nb = strlen($s); + for($i=0;$i<$nb;$i++) + { + $c = $s[$i]; + $v = ord($c); + if($v>=128) + { + $res .= chr(0xC0 | ($v >> 6)); + $res .= chr(0x80 | ($v & 0x3F)); + } + else + $res .= $c; + } + return $res; +} + +protected function _UTF8toUTF16($s) +{ + // Convert UTF-8 to UTF-16BE with BOM + $res = "\xFE\xFF"; + if($this->iconv) + return $res.iconv('UTF-8','UTF-16BE',$s); + $nb = strlen($s); + $i = 0; + while($i<$nb) + { + $c1 = ord($s[$i++]); + if($c1>=224) + { + // 3-byte character + $c2 = ord($s[$i++]); + $c3 = ord($s[$i++]); + $res .= chr((($c1 & 0x0F)<<4) + (($c2 & 0x3C)>>2)); + $res .= chr((($c2 & 0x03)<<6) + ($c3 & 0x3F)); + } + elseif($c1>=192) + { + // 2-byte character + $c2 = ord($s[$i++]); + $res .= chr(($c1 & 0x1C)>>2); + $res .= chr((($c1 & 0x03)<<6) + ($c2 & 0x3F)); + } + else + { + // Single-byte character + $res .= "\0".chr($c1); + } + } + return $res; +} + +protected function _escape($s) +{ + // Escape special characters + if(strpos($s,'(')!==false || strpos($s,')')!==false || strpos($s,'\\')!==false || strpos($s,"\r")!==false) + return str_replace(array('\\','(',')',"\r"), array('\\\\','\\(','\\)','\\r'), $s); + else + return $s; +} + +protected function _textstring($s) +{ + // Format a text string + if(!$this->_isascii($s)) + $s = $this->_UTF8toUTF16($s); + return '('.$this->_escape($s).')'; +} + +protected function _dounderline($x, $y, $txt) +{ + // Underline text + $up = $this->CurrentFont['up']; + $ut = $this->CurrentFont['ut']; + $w = $this->GetStringWidth($txt)+$this->ws*substr_count($txt,' '); + return sprintf('%.2F %.2F %.2F %.2F re f',$x*$this->k,($this->h-($y-$up/1000*$this->FontSize))*$this->k,$w*$this->k,-$ut/1000*$this->FontSizePt); +} + +protected function _parsejpg($file) +{ + // Extract info from a JPEG file + $a = getimagesize($file); + if(!$a) + $this->Error('Missing or incorrect image file: '.$file); + if($a[2]!=2) + $this->Error('Not a JPEG file: '.$file); + if(!isset($a['channels']) || $a['channels']==3) + $colspace = 'DeviceRGB'; + elseif($a['channels']==4) + $colspace = 'DeviceCMYK'; + else + $colspace = 'DeviceGray'; + $bpc = isset($a['bits']) ? $a['bits'] : 8; + $data = file_get_contents($file); + return array('w'=>$a[0], 'h'=>$a[1], 'cs'=>$colspace, 'bpc'=>$bpc, 'f'=>'DCTDecode', 'data'=>$data); +} + +protected function _parsepng($file) +{ + // Extract info from a PNG file + $f = fopen($file,'rb'); + if(!$f) + $this->Error('Can\'t open image file: '.$file); + $info = $this->_parsepngstream($f,$file); + fclose($f); + return $info; +} + +protected function _parsepngstream($f, $file) +{ + // Check signature + if($this->_readstream($f,8)!=chr(137).'PNG'.chr(13).chr(10).chr(26).chr(10)) + $this->Error('Not a PNG file: '.$file); + + // Read header chunk + $this->_readstream($f,4); + if($this->_readstream($f,4)!='IHDR') + $this->Error('Incorrect PNG file: '.$file); + $w = $this->_readint($f); + $h = $this->_readint($f); + $bpc = ord($this->_readstream($f,1)); + if($bpc>8) + $this->Error('16-bit depth not supported: '.$file); + $ct = ord($this->_readstream($f,1)); + if($ct==0 || $ct==4) + $colspace = 'DeviceGray'; + elseif($ct==2 || $ct==6) + $colspace = 'DeviceRGB'; + elseif($ct==3) + $colspace = 'Indexed'; + else + $this->Error('Unknown color type: '.$file); + if(ord($this->_readstream($f,1))!=0) + $this->Error('Unknown compression method: '.$file); + if(ord($this->_readstream($f,1))!=0) + $this->Error('Unknown filter method: '.$file); + if(ord($this->_readstream($f,1))!=0) + $this->Error('Interlacing not supported: '.$file); + $this->_readstream($f,4); + $dp = '/Predictor 15 /Colors '.($colspace=='DeviceRGB' ? 3 : 1).' /BitsPerComponent '.$bpc.' /Columns '.$w; + + // Scan chunks looking for palette, transparency and image data + $pal = ''; + $trns = ''; + $data = ''; + do + { + $n = $this->_readint($f); + $type = $this->_readstream($f,4); + if($type=='PLTE') + { + // Read palette + $pal = $this->_readstream($f,$n); + $this->_readstream($f,4); + } + elseif($type=='tRNS') + { + // Read transparency info + $t = $this->_readstream($f,$n); + if($ct==0) + $trns = array(ord(substr($t,1,1))); + elseif($ct==2) + $trns = array(ord(substr($t,1,1)), ord(substr($t,3,1)), ord(substr($t,5,1))); + else + { + $pos = strpos($t,chr(0)); + if($pos!==false) + $trns = array($pos); + } + $this->_readstream($f,4); + } + elseif($type=='IDAT') + { + // Read image data block + $data .= $this->_readstream($f,$n); + $this->_readstream($f,4); + } + elseif($type=='IEND') + break; + else + $this->_readstream($f,$n+4); + } + while($n); + + if($colspace=='Indexed' && empty($pal)) + $this->Error('Missing palette in '.$file); + $info = array('w'=>$w, 'h'=>$h, 'cs'=>$colspace, 'bpc'=>$bpc, 'f'=>'FlateDecode', 'dp'=>$dp, 'pal'=>$pal, 'trns'=>$trns); + if($ct>=4) + { + // Extract alpha channel + if(!function_exists('gzuncompress')) + $this->Error('Zlib not available, can\'t handle alpha channel: '.$file); + $data = gzuncompress($data); + $color = ''; + $alpha = ''; + if($ct==4) + { + // Gray image + $len = 2*$w; + for($i=0;$i<$h;$i++) + { + $pos = (1+$len)*$i; + $color .= $data[$pos]; + $alpha .= $data[$pos]; + $line = substr($data,$pos+1,$len); + $color .= preg_replace('/(.)./s','$1',$line); + $alpha .= preg_replace('/.(.)/s','$1',$line); + } + } + else + { + // RGB image + $len = 4*$w; + for($i=0;$i<$h;$i++) + { + $pos = (1+$len)*$i; + $color .= $data[$pos]; + $alpha .= $data[$pos]; + $line = substr($data,$pos+1,$len); + $color .= preg_replace('/(.{3})./s','$1',$line); + $alpha .= preg_replace('/.{3}(.)/s','$1',$line); + } + } + unset($data); + $data = gzcompress($color); + $info['smask'] = gzcompress($alpha); + $this->WithAlpha = true; + if($this->PDFVersion<'1.4') + $this->PDFVersion = '1.4'; + } + $info['data'] = $data; + return $info; +} + +protected function _readstream($f, $n) +{ + // Read n bytes from stream + $res = ''; + while($n>0 && !feof($f)) + { + $s = fread($f,$n); + if($s===false) + $this->Error('Error while reading stream'); + $n -= strlen($s); + $res .= $s; + } + if($n>0) + $this->Error('Unexpected end of stream'); + return $res; +} + +protected function _readint($f) +{ + // Read a 4-byte integer from stream + $a = unpack('Ni',$this->_readstream($f,4)); + return $a['i']; +} + +protected function _parsegif($file) +{ + // Extract info from a GIF file (via PNG conversion) + if(!function_exists('imagepng')) + $this->Error('GD extension is required for GIF support'); + if(!function_exists('imagecreatefromgif')) + $this->Error('GD has no GIF read support'); + $im = imagecreatefromgif($file); + if(!$im) + $this->Error('Missing or incorrect image file: '.$file); + imageinterlace($im,0); + ob_start(); + imagepng($im); + $data = ob_get_clean(); + imagedestroy($im); + $f = fopen('php://temp','rb+'); + if(!$f) + $this->Error('Unable to create memory stream'); + fwrite($f,$data); + rewind($f); + $info = $this->_parsepngstream($f,$file); + fclose($f); + return $info; +} + +protected function _out($s) +{ + // Add a line to the current page + if($this->state==2) + $this->pages[$this->page] .= $s."\n"; + elseif($this->state==0) + $this->Error('No page has been added yet'); + elseif($this->state==1) + $this->Error('Invalid call'); + elseif($this->state==3) + $this->Error('The document is closed'); +} + +protected function _put($s) +{ + // Add a line to the document + $this->buffer .= $s."\n"; +} + +protected function _getoffset() +{ + return strlen($this->buffer); +} + +protected function _newobj($n=null) +{ + // Begin a new object + if($n===null) + $n = ++$this->n; + $this->offsets[$n] = $this->_getoffset(); + $this->_put($n.' 0 obj'); +} + +protected function _putstream($data) +{ + $this->_put('stream'); + $this->_put($data); + $this->_put('endstream'); +} + +protected function _putstreamobject($data) +{ + if($this->compress) + { + $entries = '/Filter /FlateDecode '; + $data = gzcompress($data); + } + else + $entries = ''; + $entries .= '/Length '.strlen($data); + $this->_newobj(); + $this->_put('<<'.$entries.'>>'); + $this->_putstream($data); + $this->_put('endobj'); +} + +protected function _putlinks($n) +{ + foreach($this->PageLinks[$n] as $pl) + { + $this->_newobj(); + $rect = sprintf('%.2F %.2F %.2F %.2F',$pl[0],$pl[1],$pl[0]+$pl[2],$pl[1]-$pl[3]); + $s = '<_textstring($pl[4]).'>>>>'; + else + { + $l = $this->links[$pl[4]]; + if(isset($this->PageInfo[$l[0]]['size'])) + $h = $this->PageInfo[$l[0]]['size'][1]; + else + $h = ($this->DefOrientation=='P') ? $this->DefPageSize[1]*$this->k : $this->DefPageSize[0]*$this->k; + $s .= sprintf('/Dest [%d 0 R /XYZ 0 %.2F null]>>',$this->PageInfo[$l[0]]['n'],$h-$l[1]*$this->k); + } + $this->_put($s); + $this->_put('endobj'); + } +} + +protected function _putpage($n) +{ + $this->_newobj(); + $this->_put('<_put('/Parent 1 0 R'); + if(isset($this->PageInfo[$n]['size'])) + $this->_put(sprintf('/MediaBox [0 0 %.2F %.2F]',$this->PageInfo[$n]['size'][0],$this->PageInfo[$n]['size'][1])); + if(isset($this->PageInfo[$n]['rotation'])) + $this->_put('/Rotate '.$this->PageInfo[$n]['rotation']); + $this->_put('/Resources 2 0 R'); + if(!empty($this->PageLinks[$n])) + { + $s = '/Annots ['; + foreach($this->PageLinks[$n] as $pl) + $s .= $pl[5].' 0 R '; + $s .= ']'; + $this->_put($s); + } + if($this->WithAlpha) + $this->_put('/Group <>'); + $this->_put('/Contents '.($this->n+1).' 0 R>>'); + $this->_put('endobj'); + // Page content + if(!empty($this->AliasNbPages)) + $this->pages[$n] = str_replace($this->AliasNbPages,$this->page,$this->pages[$n]); + $this->_putstreamobject($this->pages[$n]); + // Link annotations + $this->_putlinks($n); +} + +protected function _putpages() +{ + $nb = $this->page; + $n = $this->n; + for($i=1;$i<=$nb;$i++) + { + $this->PageInfo[$i]['n'] = ++$n; + $n++; + foreach($this->PageLinks[$i] as &$pl) + $pl[5] = ++$n; + unset($pl); + } + for($i=1;$i<=$nb;$i++) + $this->_putpage($i); + // Pages root + $this->_newobj(1); + $this->_put('<PageInfo[$i]['n'].' 0 R '; + $kids .= ']'; + $this->_put($kids); + $this->_put('/Count '.$nb); + if($this->DefOrientation=='P') + { + $w = $this->DefPageSize[0]; + $h = $this->DefPageSize[1]; + } + else + { + $w = $this->DefPageSize[1]; + $h = $this->DefPageSize[0]; + } + $this->_put(sprintf('/MediaBox [0 0 %.2F %.2F]',$w*$this->k,$h*$this->k)); + $this->_put('>>'); + $this->_put('endobj'); +} + +protected function _putfonts() +{ + foreach($this->FontFiles as $file=>$info) + { + // Font file embedding + $this->_newobj(); + $this->FontFiles[$file]['n'] = $this->n; + $font = file_get_contents($file); + if(!$font) + $this->Error('Font file not found: '.$file); + $compressed = (substr($file,-2)=='.z'); + if(!$compressed && isset($info['length2'])) + $font = substr($font,6,$info['length1']).substr($font,6+$info['length1']+6,$info['length2']); + $this->_put('<_put('/Filter /FlateDecode'); + $this->_put('/Length1 '.$info['length1']); + if(isset($info['length2'])) + $this->_put('/Length2 '.$info['length2'].' /Length3 0'); + $this->_put('>>'); + $this->_putstream($font); + $this->_put('endobj'); + } + foreach($this->fonts as $k=>$font) + { + // Encoding + if(isset($font['diff'])) + { + if(!isset($this->encodings[$font['enc']])) + { + $this->_newobj(); + $this->_put('<>'); + $this->_put('endobj'); + $this->encodings[$font['enc']] = $this->n; + } + } + // ToUnicode CMap + if(isset($font['uv'])) + { + if(isset($font['enc'])) + $cmapkey = $font['enc']; + else + $cmapkey = $font['name']; + if(!isset($this->cmaps[$cmapkey])) + { + $cmap = $this->_tounicodecmap($font['uv']); + $this->_putstreamobject($cmap); + $this->cmaps[$cmapkey] = $this->n; + } + } + // Font object + $this->fonts[$k]['n'] = $this->n+1; + $type = $font['type']; + $name = $font['name']; + if($font['subsetted']) + $name = 'AAAAAA+'.$name; + if($type=='Core') + { + // Core font + $this->_newobj(); + $this->_put('<_put('/BaseFont /'.$name); + $this->_put('/Subtype /Type1'); + if($name!='Symbol' && $name!='ZapfDingbats') + $this->_put('/Encoding /WinAnsiEncoding'); + if(isset($font['uv'])) + $this->_put('/ToUnicode '.$this->cmaps[$cmapkey].' 0 R'); + $this->_put('>>'); + $this->_put('endobj'); + } + elseif($type=='Type1' || $type=='TrueType') + { + // Additional Type1 or TrueType/OpenType font + $this->_newobj(); + $this->_put('<_put('/BaseFont /'.$name); + $this->_put('/Subtype /'.$type); + $this->_put('/FirstChar 32 /LastChar 255'); + $this->_put('/Widths '.($this->n+1).' 0 R'); + $this->_put('/FontDescriptor '.($this->n+2).' 0 R'); + if(isset($font['diff'])) + $this->_put('/Encoding '.$this->encodings[$font['enc']].' 0 R'); + else + $this->_put('/Encoding /WinAnsiEncoding'); + if(isset($font['uv'])) + $this->_put('/ToUnicode '.$this->cmaps[$cmapkey].' 0 R'); + $this->_put('>>'); + $this->_put('endobj'); + // Widths + $this->_newobj(); + $cw = $font['cw']; + $s = '['; + for($i=32;$i<=255;$i++) + $s .= $cw[chr($i)].' '; + $this->_put($s.']'); + $this->_put('endobj'); + // Descriptor + $this->_newobj(); + $s = '<$v) + $s .= ' /'.$k.' '.$v; + if(!empty($font['file'])) + $s .= ' /FontFile'.($type=='Type1' ? '' : '2').' '.$this->FontFiles[$font['file']]['n'].' 0 R'; + $this->_put($s.'>>'); + $this->_put('endobj'); + } + else + { + // Allow for additional types + $mtd = '_put'.strtolower($type); + if(!method_exists($this,$mtd)) + $this->Error('Unsupported font type: '.$type); + $this->$mtd($font); + } + } +} + +protected function _tounicodecmap($uv) +{ + $ranges = ''; + $nbr = 0; + $chars = ''; + $nbc = 0; + foreach($uv as $c=>$v) + { + if(is_array($v)) + { + $ranges .= sprintf("<%02X> <%02X> <%04X>\n",$c,$c+$v[1]-1,$v[0]); + $nbr++; + } + else + { + $chars .= sprintf("<%02X> <%04X>\n",$c,$v); + $nbc++; + } + } + $s = "/CIDInit /ProcSet findresource begin\n"; + $s .= "12 dict begin\n"; + $s .= "begincmap\n"; + $s .= "/CIDSystemInfo\n"; + $s .= "<0) + { + $s .= "$nbr beginbfrange\n"; + $s .= $ranges; + $s .= "endbfrange\n"; + } + if($nbc>0) + { + $s .= "$nbc beginbfchar\n"; + $s .= $chars; + $s .= "endbfchar\n"; + } + $s .= "endcmap\n"; + $s .= "CMapName currentdict /CMap defineresource pop\n"; + $s .= "end\n"; + $s .= "end"; + return $s; +} + +protected function _putimages() +{ + foreach(array_keys($this->images) as $file) + { + $this->_putimage($this->images[$file]); + unset($this->images[$file]['data']); + unset($this->images[$file]['smask']); + } +} + +protected function _putimage(&$info) +{ + $this->_newobj(); + $info['n'] = $this->n; + $this->_put('<_put('/Subtype /Image'); + $this->_put('/Width '.$info['w']); + $this->_put('/Height '.$info['h']); + if($info['cs']=='Indexed') + $this->_put('/ColorSpace [/Indexed /DeviceRGB '.(strlen($info['pal'])/3-1).' '.($this->n+1).' 0 R]'); + else + { + $this->_put('/ColorSpace /'.$info['cs']); + if($info['cs']=='DeviceCMYK') + $this->_put('/Decode [1 0 1 0 1 0 1 0]'); + } + $this->_put('/BitsPerComponent '.$info['bpc']); + if(isset($info['f'])) + $this->_put('/Filter /'.$info['f']); + if(isset($info['dp'])) + $this->_put('/DecodeParms <<'.$info['dp'].'>>'); + if(isset($info['trns']) && is_array($info['trns'])) + { + $trns = ''; + for($i=0;$i_put('/Mask ['.$trns.']'); + } + if(isset($info['smask'])) + $this->_put('/SMask '.($this->n+1).' 0 R'); + $this->_put('/Length '.strlen($info['data']).'>>'); + $this->_putstream($info['data']); + $this->_put('endobj'); + // Soft mask + if(isset($info['smask'])) + { + $dp = '/Predictor 15 /Colors 1 /BitsPerComponent 8 /Columns '.$info['w']; + $smask = array('w'=>$info['w'], 'h'=>$info['h'], 'cs'=>'DeviceGray', 'bpc'=>8, 'f'=>$info['f'], 'dp'=>$dp, 'data'=>$info['smask']); + $this->_putimage($smask); + } + // Palette + if($info['cs']=='Indexed') + $this->_putstreamobject($info['pal']); +} + +protected function _putxobjectdict() +{ + foreach($this->images as $image) + $this->_put('/I'.$image['i'].' '.$image['n'].' 0 R'); +} + +protected function _putresourcedict() +{ + $this->_put('/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]'); + $this->_put('/Font <<'); + foreach($this->fonts as $font) + $this->_put('/F'.$font['i'].' '.$font['n'].' 0 R'); + $this->_put('>>'); + $this->_put('/XObject <<'); + $this->_putxobjectdict(); + $this->_put('>>'); +} + +protected function _putresources() +{ + $this->_putfonts(); + $this->_putimages(); + // Resource dictionary + $this->_newobj(2); + $this->_put('<<'); + $this->_putresourcedict(); + $this->_put('>>'); + $this->_put('endobj'); +} + +protected function _putinfo() +{ + $date = @date('YmdHisO',$this->CreationDate); + $this->metadata['CreationDate'] = 'D:'.substr($date,0,-2)."'".substr($date,-2)."'"; + foreach($this->metadata as $key=>$value) + $this->_put('/'.$key.' '.$this->_textstring($value)); +} + +protected function _putcatalog() +{ + $n = $this->PageInfo[1]['n']; + $this->_put('/Type /Catalog'); + $this->_put('/Pages 1 0 R'); + if($this->ZoomMode=='fullpage') + $this->_put('/OpenAction ['.$n.' 0 R /Fit]'); + elseif($this->ZoomMode=='fullwidth') + $this->_put('/OpenAction ['.$n.' 0 R /FitH null]'); + elseif($this->ZoomMode=='real') + $this->_put('/OpenAction ['.$n.' 0 R /XYZ null null 1]'); + elseif(!is_string($this->ZoomMode)) + $this->_put('/OpenAction ['.$n.' 0 R /XYZ null null '.sprintf('%.2F',$this->ZoomMode/100).']'); + if($this->LayoutMode=='single') + $this->_put('/PageLayout /SinglePage'); + elseif($this->LayoutMode=='continuous') + $this->_put('/PageLayout /OneColumn'); + elseif($this->LayoutMode=='two') + $this->_put('/PageLayout /TwoColumnLeft'); +} + +protected function _putheader() +{ + $this->_put('%PDF-'.$this->PDFVersion); +} + +protected function _puttrailer() +{ + $this->_put('/Size '.($this->n+1)); + $this->_put('/Root '.$this->n.' 0 R'); + $this->_put('/Info '.($this->n-1).' 0 R'); +} + +protected function _enddoc() +{ + $this->CreationDate = time(); + $this->_putheader(); + $this->_putpages(); + $this->_putresources(); + // Info + $this->_newobj(); + $this->_put('<<'); + $this->_putinfo(); + $this->_put('>>'); + $this->_put('endobj'); + // Catalog + $this->_newobj(); + $this->_put('<<'); + $this->_putcatalog(); + $this->_put('>>'); + $this->_put('endobj'); + // Cross-ref + $offset = $this->_getoffset(); + $this->_put('xref'); + $this->_put('0 '.($this->n+1)); + $this->_put('0000000000 65535 f '); + for($i=1;$i<=$this->n;$i++) + $this->_put(sprintf('%010d 00000 n ',$this->offsets[$i])); + // Trailer + $this->_put('trailer'); + $this->_put('<<'); + $this->_puttrailer(); + $this->_put('>>'); + $this->_put('startxref'); + $this->_put($offset); + $this->_put('%%EOF'); + $this->state = 3; +} +} +?> diff --git a/includes/header.php b/includes/header.php index c750729..7f79d6d 100644 --- a/includes/header.php +++ b/includes/header.php @@ -8,27 +8,33 @@ $current_lang = get_lang();