javascript - 如何使用在样式标签中包含 css 的 javascript 将 html 文件转换为 pdf
问题描述
我如何将html文件转换为pdf任何人请帮助我,该页面包含一个单击按钮的按钮,pdf将保存到客户端计算机,并且在pdf中没有按钮的图像
<!DOCTYPE html>
<html lang="en">
<head>
<script src="https://www.gstatic.com/firebasejs/7.11.0/firebase-app.js"></script>
<script src="https://www.gstatic.com/firebasejs/7.11.0/firebase-auth.js"></script>
<script src="https://www.gstatic.com/firebasejs/7.11.0/firebase-database.js"></script>
<script src="https://www.gstatic.com/firebasejs/7.11.0/firebase-storage.js"></script>
<script src="https://www.gstatic.com/firebasejs/7.11.0/firebase-firestore.js"></script>
<script src="js/invoice.js"></script>
<meta charset="utf-8">
<title>Invoice Premimum Buses</title>
<style>
@font-face {
font-family: SourceSansPro;
src: url('fonts/ElegantIcons.svg#ElegantIcons') format('svg');
}
.clearfix:after {
content: "";
display: table;
clear: both;
}
a {
color: #0087C3;
text-decoration: none;
}
body {
position: relative;
width: 21cm;
height: 29.7cm;
margin: 0 auto;
color: #555555;
background: #FFFFFF;
font-family: Arial, sans-serif;
font-size: 14px;
font-family: SourceSansPro;
}
header {
padding: 10px 0;
margin-bottom: 20px;
border-bottom: 1px solid #AAAAAA;
}
#logo {
float: left;
margin-top: 8px;
}
#logo img {
height: 70px;
}
#company {
float: right;
text-align: right;
}
#details {
margin-bottom: 50px;
}
#client {
padding-left: 6px;
border-left: 6px solid #0087C3;
float: left;
}
#client .to {
color: #777777;
}
h2.name {
font-size: 1.4em;
font-weight: normal;
margin: 0;
}
#invoice {
float: right;
text-align: right;
}
#invoice h1 {
color: #0087C3;
font-size: 2.4em;
line-height: 1em;
font-weight: normal;
margin: 0 0 10px 0;
}
table {
width: 100%;
border-collapse: collapse;
border-spacing: 0;
margin-bottom: 20px;
}
table th,
table td {
padding: 20px;
background: #EEEEEE;
text-align: center;
border-bottom: 1px solid #FFFFFF;
}
table th {
white-space: nowrap;
font-weight: normal;
}
</style>
</head>
<body>
<div class="main-ticket">
<header class="clearfix">
<div id="company">
<h2 class="name">Premimum Buses</h2>
<div>Dr AIT Banglore</div>
<div>(+91) 87099-60796</div>
<div>divprnc@gmail.com</div>
</div>
</div>
</header>
<main>
<div id="details" class="clearfix">
<div id="client">
<div class="to">INVOICE TO:</div>
<h2 class="name" id="cname">John Doe</h2>
<div class="email" id="cemail">kmrprnc@gmail.com</div>
<div class="email" id="cfrom">From</div>
<div class="email" id="ctoo">To</div>
</div>
<div id="invoice">
<h1 id="tour-name">Tour Name</h1>
<div class="date" id="order-id">order-id : sdfjasddfkjasdldfjk</div>
<div class="date" id="boarding-time">Boarding Time: 9:00</div>
<div class="date" id="departure-date">Departure Date: 30/06/2014</div>
</div>
</div>
<table border="0" cellspacing="0" cellpadding="0">
<thead>
<tr>
<th class="no">#</th>
<th class="desc">Name</th>
<th class="unit">Age</th>
<th class="qty">Gender</th>
<th class="qty">Seat Number</th>
<th class="total">Price</th>
</tr>
</thead>
<tbody id="set-data-cust">
<!-- <tr>
<td class="no">01</td>
<td class="desc"><h3>Website Design</h3></td>
<td class="unit">$40.00</td>
<td class="qty">30</td>
<td class="qty">30</td>
<td class="total">$1,200.00</td>
</tr> -->
<!-- <tr>
<td class="no">02</td>
<td class="desc"><h3>Website Development</h3></td>
<td class="unit">$40.00</td>
<td class="qty">80</td>
<td class="qty">80</td>
<td class="total">$3,200.00</td>
</tr>
<tr>
<td class="no">03</td>
<td class="desc"><h3>Search Engines Optimization</h3></td>
<td class="unit">$40.00</td>
<td class="qty">20</td>
<td class="qty">20</td>
<td class="total">$800.00</td>
</tr> -->
</tbody>
<tfoot>
<tr>
<td colspan="2"></td>
<td colspan="2">SUBTOTAL</td>
<td id="sub-price">s</td>
</tr>
<tr>
<td colspan="2"></td>
<td colspan="2">GST 10%</td>
<td id="tax"></td>
</tr>
<tr>
<td colspan="2"></td>
<td colspan="2">GRAND TOTAL</td>
<td id="grand-total"></td>
</tr>
</tfoot>
</table>
<div id="thanks">Thank you!</div>
<div id="notices">
<div>NOTICE:</div>
<div class="notice">Please pay the price at the bus stop</div>
</div>
</main>
</div>
<div>
<button id="down" onclick="download()"> Download Your Ticket</button>
</div>
</body>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jspdf/1.5.3/jspdf.min.js"></script>
<script>
function download() {
var doc = new jsPDF();
var ticket = document.getElementById("main-ticket")
doc.fromHTML(ticket, 15,15);
doc.save("ticket.pdf");
}
</script>
我已经完成了这段代码,它只保存了一张空白表,html 由我添加了一些样式的样式标签组成
解决方案
尝试这个。我已经更新了代码。它应该工作。
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, height=device-height">
<script src="https://code.jquery.com/jquery-3.1.1.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jspdf/1.5.3/jspdf.min.js"></script>
</head>
<body id="main-ticket">
<p>Lorem ipsum, dolor sit amet consectetur adipisicing elit. Accusamus minima minus sint, perspiciatis maiores fugit sit aperiam modi, nihil molestiae natus repellendus odit harum amet veniam. Officia incidunt perferendis vero impedit ullam deleniti facilis dolorum! Incidunt excepturi harum minima eos accusamus, iure aut mollitia commodi, hic culpa blanditiis optio fugiat quia voluptates suscipit placeat recusandae? Perferendis nobis autem ex dolor velit, quo explicabo, reiciendis facere tempora aperiam temporibus laborum dolorum dignissimos in delectus culpa aliquid error vitae suscipit. Accusamus, assumenda dolore voluptatibus officia provident qui dolorem ab fuga. Obcaecati, molestias placeat neque cum perspiciatis repellendus sequi earum. Velit, totam quae.</p>
<p>Lorem ipsum, dolor sit amet consectetur adipisicing elit. Accusamus minima minus sint, perspiciatis maiores fugit sit aperiam modi, nihil molestiae natus repellendus odit harum amet veniam. Officia incidunt perferendis vero impedit ullam deleniti facilis dolorum! Incidunt excepturi harum minima eos accusamus, iure aut mollitia commodi, hic culpa blanditiis optio fugiat quia voluptates suscipit placeat recusandae? Perferendis nobis autem ex dolor velit, quo explicabo, reiciendis facere tempora aperiam temporibus laborum dolorum dignissimos in delectus culpa aliquid error vitae suscipit. Accusamus, assumenda dolore voluptatibus officia provident qui dolorem ab fuga. Obcaecati, molestias placeat neque cum perspiciatis repellendus sequi earum. Velit, totam quae.</p>
<p>Lorem ipsum, dolor sit amet consectetur adipisicing elit. Accusamus minima minus sint, perspiciatis maiores fugit sit aperiam modi, nihil molestiae natus repellendus odit harum amet veniam. Officia incidunt perferendis vero impedit ullam deleniti facilis dolorum! Incidunt excepturi harum minima eos accusamus, iure aut mollitia commodi, hic culpa blanditiis optio fugiat quia voluptates suscipit placeat recusandae? Perferendis nobis autem ex dolor velit, quo explicabo, reiciendis facere tempora aperiam temporibus laborum dolorum dignissimos in delectus culpa aliquid error vitae suscipit. Accusamus, assumenda dolore voluptatibus officia provident qui dolorem ab fuga. Obcaecati, molestias placeat neque cum perspiciatis repellendus sequi earum. Velit, totam quae.</p>
<p>Lorem ipsum, dolor sit amet consectetur adipisicing elit. Accusamus minima minus sint, perspiciatis maiores fugit sit aperiam modi, nihil molestiae natus repellendus odit harum amet veniam. Officia incidunt perferendis vero impedit ullam deleniti facilis dolorum! Incidunt excepturi harum minima eos accusamus, iure aut mollitia commodi, hic culpa blanditiis optio fugiat quia voluptates suscipit placeat recusandae? Perferendis nobis autem ex dolor velit, quo explicabo, reiciendis facere tempora aperiam temporibus laborum dolorum dignissimos in delectus culpa aliquid error vitae suscipit. Accusamus, assumenda dolore voluptatibus officia provident qui dolorem ab fuga. Obcaecati, molestias placeat neque cum perspiciatis repellendus sequi earum. Velit, totam quae.</p>
<p>Lorem ipsum, dolor sit amet consectetur adipisicing elit. Accusamus minima minus sint, perspiciatis maiores fugit sit aperiam modi, nihil molestiae natus repellendus odit harum amet veniam. Officia incidunt perferendis vero impedit ullam deleniti facilis dolorum! Incidunt excepturi harum minima eos accusamus, iure aut mollitia commodi, hic culpa blanditiis optio fugiat quia voluptates suscipit placeat recusandae? Perferendis nobis autem ex dolor velit, quo explicabo, reiciendis facere tempora aperiam temporibus laborum dolorum dignissimos in delectus culpa aliquid error vitae suscipit. Accusamus, assumenda dolore voluptatibus officia provident qui dolorem ab fuga. Obcaecati, molestias placeat neque cum perspiciatis repellendus sequi earum. Velit, totam quae.</p>
<button id="down">Save</button>
<script>
$(document).ready(function() {
var specialElementHandler = {
"#main-ticket":function(element, renderer) {
return true;
}
};
$("#down").click(function() {
var doc = new jsPDF();
doc.fromHTML($("#main-ticket").html(), 15,15,{
"width":170,
"elementHandlers":specialElementHandler
})
doc.save("Ticket.pdf")
})
});
</script>
</body>
</html>
推荐阅读
- arrays - AngularJS 嵌套 ng-repeat 连接来自两个 JSON 数组的 ID
- ios - iOS swift:在旋转动画中间更改imageview图像
- android - 访问 Fragment 中的资产
- sql - 如何在年和年-1 的列中编写查询让值?
- selenium - 测试按钮同时在浏览器的不同选项卡中单击
- android - Long amount of time elapses before onServiceConnected() is called
- c++ - 示例程序崩溃
- azure - 如何在 Microsoft Chatbot 服务中设置问候语
- html - html宽度导致滚动条
- python-3.x - 正方体错误