问题描述
我正在按如下方式创建 PDF:
let contextString = "<p style=\"page-break-after: always;\">hello</p><p>This is a test</p>"
let print = UIMarkupTextPrintFormatter(markupText: contextString)
let render = UIPrintPageRenderer()
render.addPrintFormatter(print,startingAtPageAt: 0)
let page = CGRect(x: 0,y: 0,width: 595.2,height: 841.8)
render.setValue(page,forKey: "paperRect")
render.setValue(page,forKey: "printableRect")
let pdfData = NSMutableData()
UIGraphicsBeginPDFContextToData(pdfData,.zero,nil)
for i in 0..<render.numberOfPages {
UIGraphicsBeginpdfpage();
render.drawPage(at: i,in: UIGraphicsGetPDFContextBounds())
}
UIGraphicsEndPDFContext();
let av = UIActivityViewController(activityItems: [pdfData],applicationActivities: nil)
UIApplication.shared.windows.first?.rootViewController?.present(av,animated: true,completion: nil)
contextString 要复杂得多。分页符似乎有效。但是在第 2 页的顶部,我看到了一个巨大的空白。
如果我将 HTML 代码复制到一个文件并尝试通过 Safari 打印它,它会正常工作。
有人有这方面的经验吗?
HTML 文件:
(第 88 行是分页符)
<!DOCTYPE html>
<html>
<head>
<Meta charset="utf-8">
</head>
<body>
<style>
* {
font-family: arial,sans-serif;
}
p {
font-size: 14px;
}
table {
font-size: 14px;
border-collapse: collapse;
width: 100%;
margin-bottom: 10px;
}
td,th {
border: 1px solid #dddddd;
text-align: left;
padding: 3px;
}
th {
background-color: #dddddd;
}
/*tr:nth-child(even) {background-color:#dddddd;}*/
</style>
<h2 style="position: absolute; right: 50px; margin-top: 0px;">Nr: <span style="margin-left: 50px">#121</span></h2>
<br /><br />
<p style="position: absolute; left: 55%; margin-bottom: 50px;"><b>Billingaddress:</b></p><br />
<div style="position: absolute; left: 55%; margin-bottom: 50px; margin-top: 30px; line-height: 50%"><br />
<p>John Doe</p>
<p>Musterstreet 42</p>
<p>5000 Mustercity</p>
</div>
<h1>Rapport</h1><br />
<div style="position: relative; top: -18px">
<p>Date:</p>
<p>Order Nr:</p>
</div>
<div style="position: relative; top: -78px; left: 200px;">
<p>2021-02-02</p>
<p>121</p>
</div>
<div style="width: 100%; background-color: rgb(133,133,133)">
<p style="padding: 5px; font-size: 15px"><b>Orderinfos</b></p>
</div>
<div>
<div>
<p><b>Customer:</b></p>
<p><b>Contact Person:</b></p>
<p><b>Object:</b></p>
<p><b>Tenant:</b></p>
<p><b>Type of Work:</b></p>
</div>
<div style="position: absolute; top: 335px; left: 220px;">
<p>John Doe</p>
<p>John Doe</p>
<p>House</p>
<p>-</p>
<p>Kitchentable</p>
</div>
</div>
<div style="position: absolute; top: 335px; left: 55%">
<div>
<p><b>Phone:</b></p>
<p><b>E-Mail:</b></p>
<p><b>Place:</b></p>
<p><b>Execution:</b></p>
</div>
<div style="position: relative; top: -120px; left: 220px;">
<p>-</p>
<p>john.doe@hisdomain.com</p>
<p>Mustercity</p>
<p>???</p>
</div>
</div>
<div style="page-break-after: always;">
<div style="width: 100%; background-color: rgb(133,133); margin-top: 50px;">
<p style="padding: 5px; font-size: 15px; margin-bottom: 0px;"><b>Description</b></p>
</div>
<table>
<tr>
<td style="width: 100px;">Pos. 1</td>
<td>Kitchentable</td>
</tr>
</table>
<table style="page-break-inside: avoid">
<tr>
<th>Description</th>
</tr>
<tr>
<td>Lorem ipsum dolor sit amet,consetetur sadipscing elitr,sed diam nonumy eirmod tempor <br />
<br />invidunt ut labore et dolore magna aliquyam erat,sed diam voluptua. At vero eos et accusam et
justo duo dolores et ea rebum.
</td>
</tr>
</table>
<p><b>Material:</b></p>
<table style="page-break-inside: avoid">
<tr>
<th style="width: 10%;">SKU. Nr.</th>
<th style="width: 50%">Desc</th>
<th style="width: 12%">Unit</th>
<th style="width: 8%">Quantity</th>
<th style="width: 10%">Price</th>
<th style="width: 10%">Amount</th>
</tr>
<tr>
<td>SP40</td>
<td>Steelplate 40mm</td>
<td>Stk.</td>
<td>5</td>
<td>0.40</td>
<td>2.00</td>
</tr>
<tr>
<td>SN4000</td>
<td>Stahlnagel 40mm</td>
<td>Stk.</td>
<td>20</td>
<td>0.40</td>
<td>8.00</td>
</tr>
</table>
<p><b>Work:</b></p>
<table style="page-break-inside: avoid">
<tr>
<th style="width: 10%;">Date</th>
<th style="width: 50%">Description</th>
<th style="width: 12%">Unit</th>
<th style="width: 8%">Quantity</th>
<th style="width: 10%">Price</th>
<th style="width: 10%">Amount</th>
</tr>
<tr>
<td>25.02.2021</td>
<td>Building</td>
<td>h</td>
<td>1.75</td>
<td>90</td>
<td>157.50</td>
</tr>
<tr>
<td>06.02.2021</td>
<td>More Building</td>
<td>h</td>
<td>5.25</td>
<td>90</td>
<td>472.50</td>
</tr>
<tr>
<td>12.02.2021</td>
<td>Transport</td>
<td>h</td>
<td>1.50</td>
<td>100</td>
<td>150.00</td>
</tr>
<tr>
<td>09.02.2021</td>
<td>TESTlxkxbf</td>
<td>h</td>
<td>5.00</td>
<td>90</td>
<td>450.00</td>
</tr>
</table>
<p><b>Expenses</b></p>
<table style="page-break-inside: avoid;">
<tr>
<th style="width: 10%;">Date</th>
<th style="width: 50%">Desc</th>
<th style="width: 12%">Driving / miles</th>
<th style="width: 8%">Expenses</th>
<th style="width: 10%">Price</th>
<th style="width: 10%">Amount</th>
</tr>
<tr>
<td>06.02.2021</td>
<td>Cars</td>
<td>50</td>
<td></td>
<td>700.00</td>
<td>???</td>
</tr>
<tr>
<td>03.02.2021</td>
<td>Crane</td>
<td></td>
<td>Kran</td>
<td>50.00</td>
<td>???</td>
</tr>
</table>
</div>
</div>
<div style="page-break-after: always;">
<div style="width: 100%; background-color: rgb(133,133); margin-top: 50px;">
<p style="padding: 5px; font-size: 15px; margin-bottom: 0px;"><b>Description</b></p>
</div>
<table>
<tr>
<td style="width: 100px;">Pos. 2</td>
<td>2nd Positin</td>
</tr>
</table>
<table style="page-break-inside: avoid">
<tr>
<th>Description</th>
</tr>
<tr>
<td>Some more description bla bla<br /><br />g</td>
</tr>
</table>
<p><b>Material:</b></p>
<table style="page-break-inside: avoid">
<tr>
<th style="width: 10%;">SKU. Nr.</th>
<th style="width: 50%">Desc</th>
<th style="width: 12%">Unit</th>
<th style="width: 8%">Quantity</th>
<th style="width: 10%">Price</th>
<th style="width: 10%">Amount</th>
</tr>
<tr>
<td>SN40</td>
<td>Steelplate 40mm</td>
<td>Stk.</td>
<td>20</td>
<td>0.40</td>
<td>8.00</td>
</tr>
</table>
<p><b>Work:</b></p>
<table style="page-break-inside: avoid">
<tr>
<th style="width: 10%;">Date</th>
<th style="width: 50%">Desc</th>
<th style="width: 12%">Unit</th>
<th style="width: 8%">Quantity</th>
<th style="width: 10%">Price</th>
<th style="width: 10%">Amount</th>
</tr>
<tr>
<td>19.02.2021</td>
<td>Analyse Problem</td>
<td>h</td>
<td>1.75</td>
<td>50</td>
<td>87.50</td>
</tr>
</table>
</div>
<div style=" ">
<div style="width: 100%; background-color: rgb(133,133); margin-top: 50px;">
<p style="padding: 5px; font-size: 15px; margin-bottom: 0px;"><b>Description</b></p>
</div>
<table>
<tr>
<td style="width: 100px;">Pos. 3</td>
<td>test</td>
</tr>
</table>
<table style="page-break-inside: avoid">
<tr>
<th>Description</th>
</tr>
<tr>
<td>trst</td>
</tr>
</table>
<p><b>Material:</b></p>
<table style="page-break-inside: avoid">
<tr>
<th style="width: 10%;">AKU. Nr.</th>
<th style="width: 50%">Desc</th>
<th style="width: 12%">Unit</th>
<th style="width: 8%">Quantity</th>
<th style="width: 10%">Price</th>
<th style="width: 10%">Amount</th>
</tr>
<tr>
<td>SN40</td>
<td>Steelplate 40mm</td>
<td>Stk.</td>
<td>50</td>
<td>0.40</td>
<td>20.00</td>
</tr>
</table>
<p><b>Work:</b></p>
<table style="page-break-inside: avoid">
<tr>
<th style="width: 10%;">Date</th>
<th style="width: 50%">Description</th>
<th style="width: 12%">Unit</th>
<th style="width: 8%">Quantity</th>
<th style="width: 10%">Price</th>
<th style="width: 10%">Amount</th>
</tr>
<tr>
<td>12.02.2021</td>
<td>test</td>
<td>h</td>
<td>150.00</td>
<td>20</td>
<td>3000.00</td>
</tr>
<tr>
<td>12.02.2021</td>
<td>th gv jz</td>
<td>h</td>
<td>48.00</td>
<td>50</td>
<td>2400.00</td>
</tr>
<tr>
<td>12.02.2021</td>
<td>jfnd</td>
<td>h</td>
<td>48.00</td>
<td>50</td>
<td>2400.00</td>
</tr>
</table>
<p><b>Expenses</b></p>
<table style="page-break-inside: avoid;">
<tr>
<th style="width: 10%;">Date</th>
<th style="width: 50%">Desc</th>
<th style="width: 12%">Driving / miles</th>
<th style="width: 8%">Expenses</th>
<th style="width: 10%">Price</th>
<th style="width: 10%">Amount</th>
</tr>
<tr>
<td>12.02.2021</td>
<td>blabla</td>
<td>50</td>
<td>50</td>
<td>50.00</td>
<td>???</td>
</tr>
</table>
</div>
<table style="page-break-inside: avoid;">
<tr>
<th colspan="2">Ordertotal</th>
</tr>
<tr>
<td style="width: 90%">Total Price CHF</td>
<td style="width: 10%">9955.5</td>
</tr>
<tr>
<td style="width: 90%">VAT 7.70%</td>
<td style="width: 10%">766.57</td>
</tr>
<tr>
<td style="width: 90%"><b>Order Total:</b></td>
<td style="width: 10%"><b>10722.07</b></td>
</tr>
</table>
</body>
</html>
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)