将当前的tcpdf页面复制到新的tcpdf对象

时间:2018-10-10 12:00:33

标签: php pdf tcpdf

如何将某个tcpdf页面复制到新的tcpdf对象?以下是我的情况。
我有一个PHP脚本,循环50次。在循环之前,我创建了一个tcpdf对象,并在每个循环中继续添加具有新页面内容的新页面。循环结束后,我得到一个包含50页的pdf文件,该文件已下载到服务器中。

现在,除了50页pdf之外,我还希望每页都有单独的pdf。 那么,如何为新的tcpdf对象分配页面并下载呢? 代码

<?
include_once("_includes.php");
$db = new _database_class($GLOBALS["DB_CONNECTION_TYPE"]);
$vw = new _database_view($db);
$utl = new _utility_class($db, $vw);

$__ID = 166;
$INSTITUTE_ID = 2;
$USER_ID = 1;
$PROCESS_ID = 123;

$billingBatchInvoices = $vw->getBillingBatchInvoices($__ID);

$bankInfo = $vw->getBankInfo(1);
$bankBranchInfo = $vw->getBankBranchInfo(1);

class MYPDF extends TCPDF
{

    function SetDash($black = null, $white = null)
    {
        if ($black !== null)
        {
            $s = sprintf('[%.3F %.3F] 0 d', $black * $this->k, $white * $this->k);
        }
        else
        {
            $s = '[] 0 d';
        }
        $this->_out($s);
    }

    public function Header()
    {
    }

    public function Footer()
    {
    }

}

$GLOBALS["style"] = array(
    'border' => 0,
    'vpadding' => 'auto',
    'hpadding' => 'auto',
    'fgcolor' => array(0, 0, 0),
    'bgcolor' => false, //array(255,255,255)
    'module_width' => 1, // width of a single module in points
    'module_height' => 1 // height of a single module in points
);

$pdf = new MYPDF("L", "mm", "A4", true, 'UTF-8', false);
$pdf->SetCreator('XNREL');
$pdf->SetAuthor('XNREL');
$pdf->SetTitle('Invoice');
$pdf->SetSubject('Invoice');
$pdf->SetKeywords('Invoice');
$pdf->SetAutoPageBreak(true, 0);
$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED);
$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO);
$pdf->setLanguageArray($l);

$pdf->setPrintHeader(true);
$pdf->setPrintFooter(true);

//header and footer information
$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE, PDF_HEADER_STRING);
$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN));
$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA));

$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT);
$pdf->SetHeaderMargin(PDF_MARGIN_HEADER);
$pdf->SetFooterMargin(PDF_MARGIN_FOOTER);


$COPY[1] = "Bank Copy";
$COPY[2] = "School's Copy";
$COPY[3] = "Parent's Copy";

$result = $vw->getLookupValue("PS_QUEUED", "PROCESS_STATUS", $INSTITUTE_ID);
$status = $result['LOOKUP_VALUE_ID'];

$bindArray = array(
    ":PROCESS_ID" => $PROCESS_ID,
    ":INSTITUTE_ID" => $INSTITUTE_ID,
    ":COLUMN_VALUE" => $__ID,
    ":COLUMN_REF" => "BILLING_ID",
    ":TABLE_REF" => "BILLING",
    ":PROCESS_STATUS" => $status,
    ":CREATED_BY" => $USER_ID
);
$query = "SELECT PROCESS_ID FROM SYS_PROCESS_LOG WHERE PROCESS_ID=:PROCESS_ID AND INSTITUTE_ID=:INSTITUTE_ID AND COLUMN_VALUE=:COLUMN_VALUE AND COLUMN_REF=:COLUMN_REF AND TABLE_REF=:TABLE_REF AND PROCESS_STATUS=:PROCESS_STATUS AND CREATED_BY=:CREATED_BY";
$found = $db->fetchRS($query, $bindArray);


$bindArray = array(
    ":INSTITUTE_ID" => $INSTITUTE_ID
);
$query = "SELECT DATE_FORMAT FROM CAS_INSTITUTE WHERE INSTITUTE_ID=:INSTITUTE_ID";
$result = $db->fetchRecord($query, $bindArray);
$lookup = $vw->getLookupValueInfo($result['DATE_FORMAT']);
$S_USER_DATE_FORMAT = $lookup['LOOKUP_VALUE_CODE'];

$result = $vw->getLookupValue("PS_IN_PROGRESS", "PROCESS_STATUS", $INSTITUTE_ID);
$status = $result['LOOKUP_VALUE_ID'];
$bindArray = array(
    ":PROCESS_ID" => $PROCESS_ID,
    ":INSTITUTE_ID" => $INSTITUTE_ID,
    ":COLUMN_VALUE" => $__ID,
    ":COLUMN_REF" => "BILLING_ID",
    ":TABLE_REF" => "BILLING",
    ":PROCESS_STATUS" => $status,
    ":STARTED_AT" => date("Y-m-d H:i:s")
);
$query = "UPDATE SYS_PROCESS_LOG SET PROCESS_STATUS=:PROCESS_STATUS, STARTED_AT=TO_DATE(:STARTED_AT,'G_DATEFORMAT_3') WHERE PROCESS_ID=:PROCESS_ID AND INSTITUTE_ID=:INSTITUTE_ID AND COLUMN_VALUE=:COLUMN_VALUE AND COLUMN_REF=:COLUMN_REF AND TABLE_REF=:TABLE_REF";
$db->executeQuery($query, $bindArray);
$looper=1;
foreach ($billingBatchInvoices as $billingBatchInvoice)
{

    $invoiceInfo = $vw->getInvoiceInfo($billingBatchInvoice['CUSTOMER_BILLING_ID']);
    $invoiceItems = $vw->getInvoiceItems($billingBatchInvoice['CUSTOMER_BILLING_ID']);
    $pdf->AddPage('L');

    $GLOBALS["C_X"] = 5;
    for ($i = 1; $i <= 3; $i++)
    {
        $GLOBALS["C_Y"] = 10;

        $fontSize = 35;
        $pdf->Image('../resources/common/img/logo/logo.png', $GLOBALS["C_X"] + 6.5, $GLOBALS["C_Y"] + 0.5, 15);

        $html = '<table style="border:1px solid black; font-size:' . $fontSize . 'px; font:Helvetica,Arial,sans-serif;" border="1" cellpadding="5">';
        $html = $html . '<tr>
                    <td width="95" style="text-align:center"></td>
                    <td width="205"  height="40" style="text-align:center">' .
            $bankInfo['INSTITUTE_DESC']
            . '</td>
                </tr>
            </table>';

        $pdf->writeHTMLCell($w = 0, $h = 0, $GLOBALS["C_X"], $GLOBALS["C_Y"], $html, $border = 0, $ln = 1, $fill = 0, $reseth = true, $align = '', $autopadding = true);
        $fontSize = 30;

        $GLOBALS["C_Y"] = $pdf->GetY() + 1;
        $html = '<table bgcolor="#000000" style="border:1px solid black;  font-size:' . $fontSize . 'px; font:Helvetica,Arial,sans-serif; color:#FFFFFF; " border="1" cellpadding="5">';
        $html = $html . '
                <tr>
                    <td width="300" style="text-align:center">' . $COPY[$i] . '</td>
                </tr>

            </table>';

        $pdf->writeHTMLCell($w = 0, $h = 0, $GLOBALS["C_X"], $GLOBALS["C_Y"], $html, $border = 0, $ln = 1, $fill = 0, $reseth = true, $align = '', $autopadding = true);

        $GLOBALS["C_Y"] = $pdf->GetY() + 1;


//  $GLOBALS["C_Y"] = $pdf->GetY();
//  $pdf->Image('../resources/common/img/Silkbank.jpg', $GLOBALS["C_X"] + 1, $GLOBALS["C_Y"] + 1, 85.5);

        $fontSize = 25;
//  $GLOBALS["C_Y"] = $pdf->GetY() + 10.5;
        $html = '<table style="border:1px solid black; font-size:' . $fontSize . 'px; font:Helvetica,Arial,sans-serif;" border="1" cellpadding="5">';
        $html = $html . '
                <tr>
                    <td width="300" style="text-align:left">Bank: ' . $bankInfo['BANK_DESC'] . '</td>
                </tr>
                <tr>
                    <td width="300" style="text-align:left">Branch: ' . $bankBranchInfo['BRANCH_DESC'] . '</td>
                </tr>
                <tr>
                    <td width="300" style="text-align:left">A/C Title: ' . $bankBranchInfo['ACCOUNT_TITLE'] . '</td>
                </tr>
                <tr>
                    <td width="300" style="text-align:left">A/C No.: ' . $bankBranchInfo['ACCOUNT_NO'] . '</td>
                </tr>
            </table>';

        $pdf->writeHTMLCell($w = 0, $h = 0, $GLOBALS["C_X"], $GLOBALS["C_Y"], $html, $border = 0, $ln = 1, $fill = 0, $reseth = true, $align = '', $autopadding = true);

        $GLOBALS["C_Y"] = $pdf->GetY() + 2;
        $html = '<table style="border:1px solid black; font-size:' . $fontSize . 'px; font:Helvetica,Arial,sans-serif;" border="1" cellpadding="5">';
        $html = $html . '
                <tr>
                    <td width="95" style=""><strong>Invoice #</strong></td>
                    <td width="205" style=""><strong>' . $invoiceInfo['INVOICE_NO'] . '</strong></td>
                </tr>
                <tr>
                    <td width="95" style=""><strong>Name</strong></td>
                    <td width="205" style="">' . $invoiceInfo['PERSON_FIRST_NAME'] . ' ' . $invoiceInfo['PERSON_LAST_NAME'] . ' - ' . $invoiceInfo['PIN'] . '</td>
                </tr>
                <tr>
                    <td width="95" style=""><strong>Class / Campus</strong></td>
                    <td width="205" style="">' . $invoiceInfo['CLASS_DESC'] . ' - ' . $invoiceInfo['CAMPUS_DESC'] . '</td>
                </tr>
                <tr>
                    <td width="95" style=""><strong>Issue Date</strong></td>
                    <td width="205" style="">' . $utl->convertDBDateToUserDate($invoiceInfo['BILL_DATE'], $S_USER_DATE_FORMAT) . '</td>
                </tr>
                <tr>
                    <td width="95" style=""><strong>Due Date</strong></td>
                    <td width="205" style="">' . $utl->convertDBDateToUserDate($invoiceInfo['DUE_DATE'], $S_USER_DATE_FORMAT) . '</td>
                </tr>
            </table>';
        $pdf->writeHTMLCell($w = 0, $h = 0, $GLOBALS["C_X"], $GLOBALS["C_Y"], $html, $border = 0, $ln = 1, $fill = 0, $reseth = true, $align = '', $autopadding = true);

        $GLOBALS["C_Y"] = $pdf->GetY() + 2;
        $html = '<table style="border:1px solid black; font-size:' . $fontSize . 'px; font:Helvetica,Arial,sans-serif;" border="1" cellpadding="5">';
        $html = $html . '
                <tr bgcolor="#CCCCCC";>
                    <td width="25" style="text-align:center"><strong>No</strong></td>
                    <td width="185" style=""><strong>Processing Fee</strong></td>
                    <td width="90" style="text-align:right"><strong>Amount</strong></td>
                </tr>';

        $C = 1;
        foreach ($invoiceItems as $ROW)
        {
            $html = $html . '
                    <tr>
                        <td width="25" style="text-align:center">' . $C . '</td>
                        <td width="185" style="">' . $ROW['ITEM'] . '</td>
                        <td width="90" style="text-align:right">' . number_format($ROW['ITEM_AMOUNT']) . '/-</td>
                    </tr>';
            $C++;
        }

        $html = $html . '
                        <tr>
                            <td width="210" colspan="1" style="text-align:right"><strong>Total (Rs.)</strong></td>

                            <td width="90" style="text-align:right"><strong>' . number_format($invoiceInfo['AMOUNT']) . '/-</strong></td>
                        </tr>
                        <tr>
                            <td colspan="2" width="300" colspan="1"><strong>Total Amount in Words:</strong> ' . ucwords(strtolower($utl->converNumberToWords($invoiceInfo['AMOUNT']))) . ' Only</td>
                        </tr>';

        $html = $html . '</table>';

        $pdf->writeHTMLCell($w = 0, $h = 0, $GLOBALS["C_X"], $GLOBALS["C_Y"], $html, $border = 0, $ln = 1, $fill = 0, $reseth = true, $align = '', $autopadding = true);

        $GLOBALS["C_Y"] = $pdf->GetY() + 2;
        $html = '<table style="border:1px solid black; font-size:' . $fontSize . 'px; font:Helvetica,Arial,sans-serif;" border="1" cellpadding="5">';
        $html = $html . '<tr>
                    <td width="300" style="">
<strong>Payment Terms:</strong>
                    </td>
                    </tr>
<tr>
                    <td width="300" style="">
1. Deposit fee between 9:00-4:30pm Mon-Fri.
                    </td>
                    </tr>
                    <tr>
                    <td width="300" style="">
2. Deposit payment within 10 days of due date.
                    </td>
                </tr>
                <tr>
                    <td width="300" style="">
<small>This is a computer generated document and does not require signature</small>
                    </td>
                    </tr>
            </table>';


        $pdf->writeHTMLCell($w = 0, $h = 0, $GLOBALS["C_X"], $GLOBALS["C_Y"], $html, $border = 0, $ln = 1, $fill = 0, $reseth = true, $align = '', $autopadding = true);

        $GLOBALS["C_X"] = $GLOBALS["C_X"] + 100;
        if ($i <> 3)
        {
            $pdf->SetDash(2, 2);
            $pdf->Line($GLOBALS["C_X"] - 6, 0, $GLOBALS["C_X"] - 6, 250);
        }
    }
    $pdfnew = new MYPDF("L", "mm", "A4", true, 'UTF-8', false);
    $pdfnew->AddPage('L');
    $pdf->copyPage($pdf->getPage($looper));
    $pdfnew->Output($invoiceInfo['PIN'] . "-Invoice-Voucher.pdf", "F");
$looper++;
}
$result = $vw->getLookupValue("PS_SUCCESS", "PROCESS_STATUS", $INSTITUTE_ID);
$status = $result['LOOKUP_VALUE_ID'];

$bindArray = array(
    ":PROCESS_ID" => $PROCESS_ID,
    ":INSTITUTE_ID" => $INSTITUTE_ID,
    ":COLUMN_VALUE" => $__ID,
    ":COLUMN_REF" => "BILLING_ID",
    ":TABLE_REF" => "BILLING",
    ":PROCESS_STATUS" => $status,
    ":ENDED_AT" => date("Y-m-d H:i:s")
);
$query = "UPDATE SYS_PROCESS_LOG SET PROCESS_STATUS=:PROCESS_STATUS, ENDED_AT=TO_DATE(:ENDED_AT,'G_DATEFORMAT_3') WHERE PROCESS_ID=:PROCESS_ID AND INSTITUTE_ID=:INSTITUTE_ID AND COLUMN_VALUE=:COLUMN_VALUE AND COLUMN_REF=:COLUMN_REF AND TABLE_REF=:TABLE_REF";
$db->executeQuery($query, $bindArray);
$pdf->Output("Batch-Invoice-Voucher.pdf", "F");

?>

1 个答案:

答案 0 :(得分:0)

在循环内创建另一个对象,将页面添加到其中。

可能您也希望将它们放在数组中,因此可以定义$ separatePages = [];。在循环之前,并在循环内部创建单个页面,并将其添加到数组中,以便在循环完成之后就可以使用它。

$pdf = new MYPDF("L", "mm", "A4", true, 'UTF-8', false);
$pagesArray = [];

// existing code

foreach ($billingBatchInvoices as $billingBatchInvoice) {
  // existing code
  // create new pdf
  $page = new MYPDF("L", "mm", "A4", true, 'UTF-8', false);
  // add to page the same way as you did main pdf
  $pagesArray[] = $page; 
}