QR码不打印

时间:2016-07-28 11:44:20

标签: php jquery qr-code

我使用url生成QR CODE作为数据内容,但是当我尝试打印生成qr的页面时,qr似乎还没有显示其他内容。这是我的代码段

    <?php

require_once("qrcode.php");

//---------------------------------------------------------

$qr = new QRCode();
// ƒGƒ‰[’ù³ƒŒƒxƒ‹‚ðÝ’è
// QR_ERROR_CORRECT_LEVEL_L : 7%
// QR_ERROR_CORRECT_LEVEL_M : 15%
// QR_ERROR_CORRECT_LEVEL_Q : 25%
// QR_ERROR_CORRECT_LEVEL_H : 30%
$qr->setErrorCorrectLevel(QR_ERROR_CORRECT_LEVEL_L);

$qr->setTypeNumber(4);

$qr->addData("http:/".$_SERVER['REQUEST_URI']."");

$qr->make();

//---------------------------------------------------------


?>

及以下是页面上的其他内容

<div class="invoice-box" id="invoice-box">
    <table cellpadding="0" cellspacing="0">
        <tr class="top">
            <td colspan="2">
                <table>
                    <tr>
                        <td class="title">
                            <img src="images/logo.png" style="width:100%; max-width:200px; height:95px;">
                        </td>



                        <td>
                                Invoice #: <?php print $invoice_details->sub_code ?><br>
                                Created: <?php print date('Y/M/d', strtotime($invoice_details->paid_date)) ?><br>
                                Due: February 1, 2015
                            </td>
                        </tr>
                    </table>
                </td>
            </tr>

            <tr class="information">
                <td colspan="2">
                    <table>
                        <tr>
                            <td>
                               <br>
                               <br>

                            </td>

                            <td>
                                <?php print $invoice_details->org ?><br>
                                <?php print $invoice_details->lname ?> <?php print $invoice_details->fname ?><br>
                                <?php print $invoice_details->email ?>

                            </td>
                            <td>
                            <?php $qr->printHTML(); ?>
                            </td>
                        </tr>
                    </table>
                </td>
            </tr>

            <tr class="heading">
                <td>
                    Payment Method
                </td>

                <td>

                </td>
            </tr>

            <tr class="details">
                <td>
                    <?php print $invoice_details->method ?>
                </td>

                <td>

                </td>
            </tr>

            <tr class="heading">
                <td>
                    Item
                </td>

                <td>
                    Price(UGX)
                </td>
            </tr>

            <tr class="item">
                <td>
                   <?php print ucfirst($invoice_details->event) ?> - Summit
                </td>

                <td>
                   <?php print number_format($invoice_details->amount) ?>
                </td>
            </tr>


            <tr class="total">
                <td></td>

                <td>
                   Total:   UGX <?php print number_format($invoice_details->amount) ?>
                </td>
            </tr>
        </table>
    </div>
    <input type="button" value="Print Div" onclick="PrintElem('#invoice-box')" />

和我的打印脚本

<script type="text/javascript">

    function PrintElem(elem)
    {
        Popup($(elem).html());
    }

    function Popup(data) 
    {
        var mywindow = window.open('', 'invoice-box', 'height=400,width=600');
        mywindow.document.write('<html><head><title>my div</title>');
        /*optional stylesheet*/ //mywindow.document.write('<link rel="stylesheet" href="main.css" type="text/css" />');
        mywindow.document.write('</head><body >');
        mywindow.document.write(data);
        mywindow.document.write('</body></html>');

        mywindow.document.close(); // necessary for IE >= 10
        mywindow.focus(); // necessary for IE >= 10

        mywindow.print();
        mywindow.close();

        return true;
    }

</script>

3 个答案:

答案 0 :(得分:2)

假设我找到了正确的库,它有一个image creator。您需要做的是在imagegif(或imagepng)调用周围使用输出缓冲区将图像的二进制数据捕获到字符串中,然后对字符串进行base64编码,并将其作为数据的一部分进行回显URI直接在img标记的src属性中。

$img = $qr->createImage(4, 2);
ob_start();
imagegif($img);
imagedestroy($img);
$img = ob_get_clean();

在您的HTML中

<img src="data:image/gif;base64,<?php echo base64_encode($img);?>">

如果您担心对数据URL的支持,请忽略输出缓冲,添加一个唯一的随机文件名作为imagegif调用的第二个参数来保存它,然后在{{中回显该文件名1}}。

答案 1 :(得分:0)

您似乎正在尝试打印默认情况下从打印中删除的黑色背景颜色。不幸的是,没有办法在Safari和Chrome之外的浏览器中以编程方式强制退回。 您可以通过执行以下操作强制退回Safari和Chrome:

<div class="invoice-box" id="invoice-box">
    <style> 
        .invoice-box table td: {
            -webkit-print-color-adjust: exact !important;
        }
    </style>
    <table cellpadding="0" cellspacing="0">
        <tr class="top">
            <td colspan="2">
                <table>
                    <tr>
                        <td class="title">
                            <img src="images/logo.png" style="width:100%; max-width:200px; height:95px;">
                        </td>



                        <td>
                                Invoice #: <?php print $invoice_details->sub_code ?><br>
                                Created: <?php print date('Y/M/d', strtotime($invoice_details->paid_date)) ?><br>
                                Due: February 1, 2015
                            </td>
                        </tr>
                    </table>
                </td>
            </tr>

            <tr class="information">
                <td colspan="2">
                    <table>
                        <tr>
                            <td>
                               <br>
                               <br>

                            </td>

                            <td>
                                <?php print $invoice_details->org ?><br>
                                <?php print $invoice_details->lname ?> <?php print $invoice_details->fname ?><br>
                                <?php print $invoice_details->email ?>

                            </td>
                            <td>
                            <?php $qr->printHTML(); ?>
                            </td>
                        </tr>
                    </table>
                </td>
            </tr>

            <tr class="heading">
                <td>
                    Payment Method
                </td>

                <td>

                </td>
            </tr>

            <tr class="details">
                <td>
                    <?php print $invoice_details->method ?>
                </td>

                <td>

                </td>
            </tr>

            <tr class="heading">
                <td>
                    Item
                </td>

                <td>
                    Price(UGX)
                </td>
            </tr>

            <tr class="item">
                <td>
                   <?php print ucfirst($invoice_details->event) ?> - Summit
                </td>

                <td>
                   <?php print number_format($invoice_details->amount) ?>
                </td>
            </tr>


            <tr class="total">
                <td></td>

                <td>
                   Total:   UGX <?php print number_format($invoice_details->amount) ?>
                </td>
            </tr>
        </table>
    </div>
    <input type="button" value="Print Div" onclick="PrintElem('#invoice-box')" />

对于像IE和Firefox这样的浏览器,遗憾的是这需要用户交互。有关更多答案,请参阅此问题:Printing background-color in Firefox and IE

答案 2 :(得分:0)

最后,我找到了解决方法,这是我的解决方案

    <?php


require_once("qrcode.php");


$qr = QRCode::getMinimumQRCode("http:/".$_SERVER['REQUEST_URI']."", QR_ERROR_CORRECT_LEVEL_L);


$img = $qr->createImage(4, 2);
ob_start();
imagegif($img);
imagedestroy($img);
$img = ob_get_clean();

?>

然后用此输出qrcode作为图像;

<img src="data:image/gif;base64,<?php echo base64_encode($img);?>">

感谢@walf以某种方式解决他的问题,希望它可以帮助其他人。