简体   繁体   English

将HTML渲染为PDF文件

[英]Render HTML into PDF file

What is the best way to render this kind of code into pdf. 将此类代码呈现为pdf的最佳方法是什么。 I have looked into different libraries but I do not think any of them is useful in my case. 我研究了不同的库,但我认为它们对我而言都不有用。 I have detailed looked into TCPDF library but that one is too complicated in my case as my code involves lots of css, html and php conditions. 我已经详细研究了TCPDF库,但是由于我的代码涉及许多CSS,HTML和PHP条件,因此在我的情况下这太复杂了。 Therefore, I am here to get some hint to know where can I find the something useful in this regard. 因此,我在这里获得一些提示,以了解在哪里可以找到这方面有用的信息。 Following is my code and out of my code: 以下是我的代码和我的代码:

<div class="box-container" id="week<?php print $w; ?>" >
                <div class="roster">
                    <div style="text-align: right;"  class="dontprint">

                        <div style="display:inline;">
                            <label><strong>Dispatch All</strong> <input type="checkbox" name="dispatch-<?php print $w; ?>" value="<?php print $w; ?>"></label>
                        </div>
                        <div style="display:inline;">
                            <a href="#" class="site-roster" rel="week<?php print $w; ?>">
                                <img src="<?php print base_url('images/icon-screenshot.png'); ?>" />
                            </a>
                        </div>
                    </div>

                    <?php $shiftStr = array();  foreach ($schedule['sites'] as $site): ?>
                        <?php if ($site['weekf'] == 'Week '.$w) : ?>

                        <?php $isDispatched[$w][$site["sid"]] = true; ?>

                            <div class="box printr" id="r<?php print $w.'-'.$site["sid"]; ?>">
                                <h4 class="white" align="center"><?php print $site["title"]; ?> - <?php print $site["address"]; ?></h4>
                                <div class="box-container links" style="border:1px solid #CCC">
                                    <table style="width:100%">
                                        <thead>
                                        <tr>
                                            <td style="width:140px;"></td>
                                            <?php
                                            $dateForRoster = ($w == 1) ? $startDate : strtotime("+7 day", $startDate);
                                            ?>
                                            <?php for ($i = 0; $i < 7; $i++) : ?>
                                                <td><?php print date('d-M-y', strtotime("+".$i." day", $dateForRoster)); ?></td>
                                            <?php endfor; ?>
                                            <td colspan="2"></td>
                                        </tr>
                                        <tr>
                                            <td class="col-left"><?php print $site['job_type'] == 1 ? 'CSO' : 'Guard';?></td>
                                            <td>Monday</td>
                                            <td>Tuesday</td>
                                            <td>Wednesday</td>
                                            <td>Thursday</td>
                                            <td>Friday</td>
                                            <td>Saturday</td>
                                            <td>Sunday</td>
                                            <td>Contact</td>
                                            <td>License</td>
                                        </tr>
                                        <tr>
                                            <td colspan="10"><div style="border-bottom:2px solid #ccc; margin:5px 0"></div></td>
                                        </tr>
                                        </thead>
                                        <?php foreach($schedule['guards'] as $guard): ?>
                                            <?php if ($guard['weekf'] == 'Week '.$w && $site['sid'] == $guard['sid']) : ?>
                                                <tr><?php $tot = 0;?>
                                                    <td style="max-width: 140px; overflow: hidden; white-space: nowrap;" class="col-left"><?php print ($guard["guard_name"] != '') ? $guard["guard_name"] : 'Click on each shift to assign guard'; ?></td>

                                                    <?php for ($s = 0; $s < 7; $s++) : ?>
                                                        <td>
                                                            <?php

                                                            if (isset ($schedule['week'][str_replace(' ', '-', $guard['weekf']).'-'.$site['sid'].'-'.$guard['gid']][$s])) {
                                                                $shifts = $schedule['week'][str_replace(' ', '-', $guard['weekf']).'-'.$site['sid'].'-'.$guard['gid']][$s];
                                                                $noOfShifts = count($shifts);

                                                                if ($noOfShifts == 0) { print '-'; }
                                                                else {
                                                                    foreach($shifts as $shift) {

                                                                        $shiftStr[] = array($shift['shift']['shid'], $shift['shift']['dispatched']);
                                                                        $allShifts[] = array($shift['shift']['shid'], $shift['shift']['dispatched']);
                                                                        //print $tot += dateDifference1($shift['shift']['actual_sign_in'], $shift['shift']['actual_sign_out']);
                                                                        $class = $shift['shift']['job_type'];
                                                                        $difference = dateDifference(date('Y-m-d'), $shift['shift']['advised_sign_in']);

                                                                        if ($shift['shift']['gid'] == "") {
                                                                            $class = "unassigned";
                                                                        } else {
                                                                            if ($shift['shift']['training'] == 1)  $class = "training";
                                                                            if ($difference == 0 &&
                                                                                date("Y-m-d", strtotime($shift['shift']['actual_sign_in'])) == "1970-01-01") {
                                                                                $class = "notime";
                                                                            }

                                                                            if (
                                                                                ($shift['shift']['actual_sign_in'] != "" && $shift['shift']['actual_sign_out'] == "") ||
                                                                                ($shift['shift']['actual_sign_in'] == "" && $shift['shift']['actual_sign_out'] != "")
                                                                                ) 
                                                                            {
                                                                                $class = "onlyone";
                                                                            }

                                                                             if (
                                                                                ($shift['shift']['actual_sign_in'] != "" && ($shift['shift']['advised_sign_in'] != $shift['shift']['actual_sign_in'])) ||
                                                                                ($shift['shift']['actual_sign_out'] != "" && ($shift['shift']['advised_sign_out'] != $shift['shift']['actual_sign_out']))
                                                                            ) {
                                                                                $class = "altertime";
                                                                            }
                                                                        }

                                                                        if ($shift['shift']['dispatched'] == "0") $isDispatched[$w][$site["sid"]] = false;

                                                            ?>

                                                                        <a href="#"
                                                                           class = "shift-detail <?php print $class; ?>"
                                                                           shid = "<?php print $shift['shift']['shid'];?>"
                                                                           date = "<?php print date('Y-m-d', strtotime("+".$s." day", $dateForRoster)); ?>"
                                                                           jid = "<?php print $shift['shift']['jid']; ?>"
                                                                           sid = "<?php print $site['sid']; ?>"
                                                                           gid = "<?php print $guard['gid']; ?>">
                                                                            <?php
                                                                                if (/*$difference > 0 &&*/ $shift['shift']['actual_sign_in'] != "" && $shift['shift']['actual_sign_out'] != "" && date("Y-m-d", strtotime($shift['shift']['actual_sign_in'])) != "1970-01-01")
                                                                                    print date('H:i', strtotime($shift['shift']['actual_sign_in'])).' - '.date('H:i', strtotime($shift['shift']['actual_sign_out'])) ;
                                                                                else
                                                                                    print date('H:i', strtotime($shift['shift']['advised_sign_in'])).' - '.date('H:i', strtotime($shift['shift']['advised_sign_out'])) ;
                                                                            ?></a>

                                                                    <?php
                                                                    }
                                                                }
                                                            } else {
                                                                ?>
                                                                <a href="#"
                                                                   class="shift-detail"
                                                                   shid = "0"
                                                                   date = "<?php print date('Y-m-d', strtotime("+".$s." day", $dateForRoster)); ?>"
                                                                   jid = "0"
                                                                   sid = "<?php print $site['sid']; ?>"
                                                                   gid = "<?php print $guard['gid']; ?>">
                                                                    -
                                                                </a>
                                                            <?php
                                                            }
                                                            ?>
                                                        </td>
                                                    <?php endfor; ?>
                                                    <td><a href="#" class="contact"><?php print $guard['mobile_number']; ?></a></td>
                                                    <td><a href="#" class="license"><?php print ($guard['license_number'] != 0) ? $guard['license_number'] : 'N/A'; ?></a></td>
                                                </tr> <?php //print $tot;?>
                                            <?php endif; ?>
                                        <?php endforeach; ?>
                                    </table>

                                    <div style="text-align: right; margin-top:4px; padding-top: 8px; color: #50575A; font-weight:bold; border-top:1px dotted" class="dontprint">

                                        <div style="display:inline; ">
                                            <label>Dispatch <?php print $site["title"]; ?> shifts <input type="checkbox" name="dispatch-<?php print $w.'-'.$site["sid"]; ?>" id="dispatch-<?php print $w.'-'.$site["sid"]; ?>" <?php print ($isDispatched[$w][$site["sid"]]) ? 'checked="checked"' : '' ;?> value='<?php print json_encode($shiftStr);?>'></label>
                                        </div>
                                        <div style="display:inline;">
                                            <a href="#" class="site-roster" rel="r<?php print $w.'-'.$site["sid"]; ?>">
                                                <img src="<?php print base_url('images/icon-screenshot.png'); ?>" />
                                            </a>
                                        </div>
                                    </div>


                                </div>


                                <!-- end of div.box-container -->
                            </div>

                        <?php unset($shiftStr); endif; ?>
                    <?php endforeach; ?>
                </div>
            </div>
            <input type="hidden" name="allshifts-<?php print $w;?>" id="allshifts-<?php print $w;?>" value='<?php print json_encode($allShifts); ?>' /> 
        <?php endfor; ?>
    <?php endif; ?>
</div>

Output 产量

在此处输入图片说明

I am looking to directly render this kind of output into pdf. 我希望将这种输出直接呈现为pdf。 Alternatively, what I am thinking that I should capture the image first then render that image into PDF but that would be double work. 另外,我认为我应该先捕获图像,然后将该图像渲染为PDF,但这是双重工作。

Thus, If you have any idea that could help me in any way please share here. 因此,如果您有任何想法可以以任何方式帮助我,请在此处分享。

Thank you. 谢谢。

您也可以尝试使用此TCPDF ,很容易使用PHP到PDF库。.您也可以在此处查看示例

I have used DOMPDF , as it worked very well. 我使用了DOMPDF ,因为它工作得很好。 Keep the generated HTML code in a variable and pass it to DOMPDF, like this: 将生成的HTML代码保留在变量中,然后将其传递给DOMPDF,如下所示:

$dompdf = new DOMPDF();
$dompdf->load_html($my_pdf_content);
$dompdf->set_paper('a4', 'portrait');
$dompdf->render();

After this, you can either save the file: 之后,您可以保存文件:

file_put_contents('my_pdf.pdf', $dompdf->output());

Or force download into the browser: 或强制下载到浏览器中:

$dompdf->stream("dompdf_out.pdf", array("Attachment" => true));
exit(0);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM