样式和背景图像不适用于 Django 中的 pdf 生成器

如何解决样式和背景图像不适用于 Django 中的 pdf 生成器

我正在尝试生成带有样式和背景图像的发票。 我正在使用 xhtml2pdf 库来生成它。我在 body 部分写了所有的样式。但不幸的是,原始视图不起作用。我按照 this tutorial 生成 pdf。

这是我的原始invoice.html

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8" />
        <meta http-equiv="X-UA-Compatible" content="IE=edge" />
        <meta name="viewport" content="width=device-width,initial-scale=1.0" />
        <title>Document</title>

        <style>
            .backgroundImage {
                position: absolute;
                opacity: 20%;
                top: 15%;
                left: 10%;
            }
            img {
                height: 80vh;
            }

            .logo {
                height: 70px;
                width: 70px;
                object-fit: contain;
            }
            .header_text {
                font-weight: bold;
            }
            .text_bg {
                background-color: #13465cfb;
                color: white;
                padding-left: 10px;
            }
            .finish {
                font-weight: bold;
                font-size: 1.3rem;
                color: rgba(255,168,7,0.87);
            }
            .com_name {
                font-size: 1.5rem;
            }
            .resize {
                font-size: 0.8rem;
            }
            .sign {
                height: 10px;
                width: 150px;
                border-bottom: 1px solid black;
            }
            .t_name {
                font-size: 1.1rem;
                font-weight: bolder;
            }
            /* bootsrap edit */
            .container-fluid {
                width: 100%;
                padding-right: 15px;
                padding-left: 15px;
                margin-right: auto;
                margin-left: auto;
            }
            .p-5 {
                padding: 3rem !important;
            }
            .mb-5,.my-5 {
                margin-bottom: 3rem !important;
            }
            .mt-5,.my-5 {
                margin-top: 3rem !important;
            }
            .mt-4,.my-4 {
                margin-top: 1.5rem !important;
            }
            * {
                box-sizing: border-box;
            }
            body {
                margin: 0;
                font-family: -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans","Liberation Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";
                font-size: 1rem;
                font-weight: 400;
                line-height: 1.5;
                color: #212529;
                text-align: left;
                background-color: #fff;
            }
            .row {
                display: flex;
                flex-wrap: wrap;
                margin-right: -15px;
                margin-left: -15px;
            }
            .align-items-center {
                align-items: center !important;
            }
            .justify-content-center {
                justify-content: center !important;
            }
            .col,.col-1,.col-10,.col-11,.col-12,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-auto,.col-lg,.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-auto,.col-md,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-auto,.col-sm,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-auto,.col-xl,.col-xl-1,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-auto {
                position: relative;
                width: 100%;
                padding-right: 15px;
                padding-left: 15px;
            }
            .col-lg-1 {
                flex: 0 0 8.333333%;
                max-width: 8.333333%;
            }
            .col-lg-7 {
                flex: 0 0 58.333333%;
                max-width: 58.333333%;
            }
            .col-lg-4 {
                flex: 0 0 33.333333%;
                max-width: 33.333333%;
            }
            .col-lg-6 {
                flex: 0 0 50%;
                max-width: 50%;
            }
            .logo {
                height: 70px;
                width: 70px;
                object-fit: contain;
            }
            img {
                vertical-align: middle;
                border-style: none;
            }
            .text-right {
                text-align: right !important;
            }
            .text-uppercase {
                text-transform: uppercase !important;
            }
            .h5,h5 {
                font-size: 1.25rem;
            }
            .h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6 {
                margin-bottom: 0.5rem;
                font-weight: 500;
                line-height: 1.2;
            }
            .mt-2,.my-2 {
                margin-top: 0.5rem !important;
            }
            .resize {
                font-size: 0.8rem;
            }
            .col-lg-10 {
                flex: 0 0 83.333333%;
                max-width: 83.333333%;
            }
            .col-lg-2 {
                flex: 0 0 16.666667%;
                max-width: 16.666667%;
            }
            .col-lg-5 {
                flex: 0 0 41.666667%;
                max-width: 41.666667%;
            }
            .col-lg-4 {
                -ms-flex: 0 0 33.333333%;
                flex: 0 0 33.333333%;
                max-width: 33.333333%;
            }
            .col-lg-12 {
                flex: 0 0 100%;
                max-width: 100%;
            }
            .col-lg-3 {
                flex: 0 0 25%;
                max-width: 25%;
            }
            .text-center {
                text-align: center !important;
            }
            .table {
                width: 100%;
                margin-bottom: 1rem;
                color: #212529;
                border-collapse: collapse;
            }
            body {
                background-image: url(assets/img/logo-update.png);
                background-repeat: no-repeat;
                background-attachment: fixed;
                background-position: center;
            }
            /* .watermarked {
                position: relative;
            }

            .watermarked:after {
                content: "";
                display: block;
                width: 100%;
                height: 100%;
                position: absolute;
                top: 25%;
                left: 25%;
                background-image: url(assets/img/logo-update.png);
                background-repeat: no-repeat;
                opacity: 0.2;
            } */
            /* table */
            #customers {
                font-family: Arial,Helvetica,sans-serif;
                border-collapse: collapse;
                width: 100%;
                margin-bottom: 30px;
            }

            #customers td,#customers th {
                border: 1px solid #ddd;
                padding: 8px;
            }

            #customers tr:nth-child(even) {
                background-color: #f2f2f2;
            }

            #customers tr:hover {
                background-color: #ddd;
            }

            #customers th {
                padding-top: 12px;
                padding-bottom: 12px;
                text-align: left;
                background-color: #13465cfb;
                color: white;
            }
        </style>
    </head>
    <body>
        <div class="container-fluid " id="test">
            <div class="p-5 mt-5 mb-5 watermarked" style="width: 95vw">
                <div class="row justify-content-center align-items-center">
                    <div class="col-1 col-lg-1">
                        <img src="https://www.kmcargo.com.my/wp-content/uploads/2021/05/logo-removebg.png" class="logo">
                    </div>
                    <div class="col-7 col-lg-7">
                        <div class="com_name">Company Name</div>
                    </div>
                    <div class="col-4 col-lg-4 text-right">
                        <div class="h5 text-uppercase">invoice</div>
                    </div>
                </div>
                <div class="row mt-2 resize">
                    <div class="col-6 col-lg-6">
                        <div class="text">
                            <div>[Street Address]</div>
                            <div>[City,State,ZIP Code]</div>
                            <div>[Phone]</div>
                            <div>[Email Address]</div>
                            <div>[Company Website]</div>
                        </div>
                    </div>
                    <div class="col-6 col-lg-6">
                        <div class="row">
                            <div class="col-12 col-lg-10 header_text text-right">Date</div>
                            <div class="col-12 col-lg-2">2021-06-29</div>
                        </div>
                        <div class="row">
                            <div class="col-10 col-lg-10 header_text text-right">Invoice</div>
                            <div class="col-12 col-lg-2">[######]</div>
                        </div>
                        <div class="row">
                            <div class="col-10 col-lg-10 header_text text-right">
                                Due Date
                            </div>
                            <div class="col-12 col-lg-2">2021-07-01</div>
                        </div>
                    </div>
                </div>
                <div class="row mt-4 resize">
                    <div class="col-5 col-lg-5">
                        <div class="text_bg text-uppercase" style="margin-bottom: 0.5rem">
                            bill to
                        </div>
                        <div>[Receipent Name]</div>
                        <div>[Company Name]</div>
                        <div>[Street Address]</div>
                        <div>[City,zIP Code]</div>
                        <div>[Phone]</div>
                    </div>
                    <div class="col-2 col-lg-2"></div>
                    <div class="col-5 col-lg-5">
                        <div class="text_bg text-uppercase" style="margin-bottom: 0.5rem">
                            ship to
                        </div>
                        <div>[Receipent Name]</div>
                        <div>[Company Name]</div>
                        <div>[Street Address]</div>
                        <div>[City,zIP Code]</div>
                        <div>[Phone]</div>
                    </div>
                </div>
                <div class="col-12 col-lg-12 table-responsive mt-4 resize">
                    <table id="customers">
                        <tr>
                            <th>Description</th>
                            <th>Qty</th>
                            <th>Unit Price</th>
                            <th>Amount</th>
                        </tr>
                        <tr>
                            <td>Product 1</td>
                            <td>2</td>
                            <td>$50.00</td>
                            <td>$100.00</td>
                        </tr>
                        <tr>
                            <td>Product 2</td>
                            <td>4</td>
                            <td>$60.00</td>
                            <td>$240.00</td>
                        </tr>
                        <tr>
                            <td>Labor</td>
                            <td>14</td>
                            <td>$60.00</td>
                            <td>$840.00</td>
                        </tr>
                        <tr>
                            <td></td>
                            <td></td>
                            <td></td>
                            <td></td>
                        </tr>
                        <tr>
                            <td></td>
                            <td></td>
                            <td></td>
                            <td></td>
                        </tr>
                        <tr>
                            <td></td>
                            <td></td>
                            <td></td>
                            <td></td>
                        </tr>
                        <tr>
                            <td></td>
                            <td></td>
                            <td></td>
                            <td></td>
                        </tr>
                        <tr>
                            <td></td>
                            <td></td>
                            <td></td>
                            <td></td>
                        </tr>
                        <tr>
                            <td></td>
                            <td></td>
                            <td></td>
                            <td></td>
                        </tr>
                        <tr>
                            <td></td>
                            <td></td>
                            <td></td>
                            <td></td>
                        </tr>
                        <tr>
                            <td></td>
                            <td></td>
                            <td></td>
                            <td></td>
                        </tr>
                    </table>
                        <thead class="text_bg">
                            <tr style="padding-top: 10px; padding-bottom: 10px">
                                <th class="text-left th-sm">Description</th>
                                <th class="th-sm">Qty</th>
                                <th class="th-sm">Unit Price</th>
                                <th class="th-sm">Amount</th>
                            </tr>
                        </thead>
                        <tbody>
                            <tr>
                                <td>Product 1</td>
                                <td>2</td>
                                <td>$50.00</td>
                                <td>$100.00</td>
                            </tr>
                            <tr>
                                <td>Product 2</td>
                                <td>4</td>
                                <td>$60.00</td>
                                <td>$240.00</td>
                            </tr>
                            <tr>
                                <td>Labor</td>
                                <td>14</td>
                                <td>$60.00</td>
                                <td>$840.00</td>
                            </tr>
                            <tr>
                                <td></td>
                                <td></td>
                                <td></td>
                                <td></td>
                            </tr>
                            <tr>
                                <td></td>
                                <td></td>
                                <td></td>
                                <td></td>
                            </tr>
                            <tr>
                                <td></td>
                                <td></td>
                                <td></td>
                                <td></td>
                            </tr>
                            <tr>
                                <td></td>
                                <td></td>
                                <td></td>
                                <td></td>
                            </tr>
                            <tr>
                                <td></td>
                                <td></td>
                                <td></td>
                                <td></td>
                            </tr>
                            <tr>
                                <td></td>
                                <td></td>
                                <td></td>
                                <td></td>
                            </tr>
                            <tr>
                                <td></td>
                                <td></td>
                                <td></td>
                                <td></td>
                            </tr>
                            <tr>
                                <td></td>
                                <td></td>
                                <td></td>
                                <td></td>
                            </tr>
                        </tbody>
                    </table> -->
                </div>
                <div class="row">
                    <div class="col-5 col-lg-5">
                        <div class="card resize">
                            <div class="text_bg header_text">Comments</div>
                            <div class="pl-2 pb-3 pt-1">
                                <div>1. Payment due in 30 days</div>
                                <div>
                                    2. Please note the invoice number in your payment method
                                </div>
                                <div class="mt-2">
                                    Banking and wire transfer information also be included here
                                </div>
                            </div>
                        </div>

                        <div class="sign mt-4"></div>
                        <div class="resize pl-5 header_text">Signature</div>
                    </div>
                    <div class="col-4 col-lg-4"></div>
                    <div class="col-3 col-lg-3">
                        <div class="d-flex flex-column resize">
                            <div class="row">
                                <div class="col-6 col-lg-6 text-right">Subtotal</div>
                                <div class="col-6 col-lg-6 text-left">$1,180.00</div>
                            </div>
                            <div class="row">
                                <div class="col-6 col-lg-6 text-right">Discounts</div>
                                <div class="col-6 col-lg-6 text-left">$177.00</div>
                            </div>
                            <div class="row">
                                <div class="col-6 col-lg-6 text-right">Taxes</div>
                                <div class="col-6 col-lg-6 text-left">$100.30</div>
                            </div>
                            <div class="row">
                                <div class="col-6 col-lg-6 text-right t_name">Total</div>
                                <div class="col-6 col-lg-6 text-left t_name">$1,163.30</div>
                            </div>
                            <div class="finish mt-2 text-center">
                                Thank you for your business!
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </body>
</html>

我怎样才能获得像

this image

图像一样的 pdf 视图? 谢谢。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-
参考1 参考2 解决方案 # 点击安装源 协议选择 http:// 路径填写 mirrors.aliyun.com/centos/8.3.2011/BaseOS/x86_64/os URL类型 软件库URL 其他路径 # 版本 7 mirrors.aliyun.com/centos/7/os/x86
报错1 [root@slave1 data_mocker]# kafka-console-consumer.sh --bootstrap-server slave1:9092 --topic topic_db [2023-12-19 18:31:12,770] WARN [Consumer clie
错误1 # 重写数据 hive (edu)&gt; insert overwrite table dwd_trade_cart_add_inc &gt; select data.id, &gt; data.user_id, &gt; data.course_id, &gt; date_format(
错误1 hive (edu)&gt; insert into huanhuan values(1,&#39;haoge&#39;); Query ID = root_20240110071417_fe1517ad-3607-41f4-bdcf-d00b98ac443e Total jobs = 1
报错1:执行到如下就不执行了,没有显示Successfully registered new MBean. [root@slave1 bin]# /usr/local/software/flume-1.9.0/bin/flume-ng agent -n a1 -c /usr/local/softwa
虚拟及没有启动任何服务器查看jps会显示jps,如果没有显示任何东西 [root@slave2 ~]# jps 9647 Jps 解决方案 # 进入/tmp查看 [root@slave1 dfs]# cd /tmp [root@slave1 tmp]# ll 总用量 48 drwxr-xr-x. 2
报错1 hive&gt; show databases; OK Failed with exception java.io.IOException:java.lang.RuntimeException: Error in configuring object Time taken: 0.474 se
报错1 [root@localhost ~]# vim -bash: vim: 未找到命令 安装vim yum -y install vim* # 查看是否安装成功 [root@hadoop01 hadoop]# rpm -qa |grep vim vim-X11-7.4.629-8.el7_9.x
修改hadoop配置 vi /usr/local/software/hadoop-2.9.2/etc/hadoop/yarn-site.xml # 添加如下 &lt;configuration&gt; &lt;property&gt; &lt;name&gt;yarn.nodemanager.res