我们都知道A4的尺寸是210mm * 297mm,在css中,我们可以直接使用毫米的单位来设置页面的宽高,当然你也可以使用相应的像素进行设置,不过只是通过body或者html来设置宽高的话,可能也会出现问题,而在这里我们需要使用@page来对页面进行定义,@page主要是用于打印的时候定义页面的类型,比如A4,A5,A3等等。下面先来看一下@page的使用方法。
1 | @page{ |
2 | size: A4; |
3 | margin: 0; |
4 | } |
另外在设置好@page后,我们可能还会需要设置分页,分页很简单,直接使用page-break-before:always;或者page-break-after:always;就可以设置分页,在网页中是不会显示任何效果的,不过你可以通过浏览器的打印功能进行PDF预览来查看分页是否符合你的要求。
不过分页的使用必须的写在@media print中,使用如下:
1 | @media print{ |
2 | .page-break{ |
3 | page-break-before:always; |
4 | } |
5 | } |
.page-break是需要分页的class的元素。
必须注意的问题:
table布局
那么page-break-before:always;不能写在td和tr中,也就是说,table是不能被分页的,这是所有浏览器都不支持的。
比如你的代码如下:
1 | <table> |
2 | <tr> |
3 | <td>1</td> |
4 | <td>2</td> |
5 | <td>3</td> |
6 | <td class="page-break"></td> |
7 | <td>4</td> |
8 | <td>5</td> |
9 | <td>6</td> |
10 | <td class="page-break"></td> |
11 | <td>7</td> |
12 | <td>8</td> |
13 | </tr> |
14 | </table> |
这样的代码不论你测试多少次,都是无法进行分页的,经过我的测试,在所有的浏览器中都无法实现分页,并且通过打印机打印后,也是无法分页的!
对于table,我们只能对整个table进行分页,比如下面的代码:
1 | <table class="page-break"> |
2 | <tr> |
3 | <td>1</td> |
4 | <td>2</td> |
5 | <td>3</td> |
6 | <td ></td> |
7 | <td>4</td> |
8 | <td>5</td> |
9 | <td>6</td> |
10 | <td>7</td> |
11 | <td>8</td> |
12 | </tr> |
13 | </table> |
14 | <table class="page-break"> |
15 | <tr> |
16 | <td>1</td> |
17 | <td>2</td> |
18 | <td>3</td> |
19 | <td ></td> |
20 | <td>4</td> |
21 | <td>5</td> |
22 | <td>6</td> |
23 | <td>7</td> |
24 | <td>8</td> |
25 | </tr> |
26 | </table> |
以上两个table就可以实现完美的分页,不过网上有人说使用page-break-inside:avoid;可以实现对td或者tr的分页,不过我没有进行尝试,因此不敢断言是否分页成功。
在div中进行分页
除了table之外,在div中就更加方便使用了,只要你想在任何一个div处进行分页,那就直接使用分页代码即可,比如下面的代码:
1 | <div class="page-break">11111111111111</div> |
2 | <div class="page-break">22222222222222</div> |
3 | <div class="page-break">33333333333333</div> |
你可以尝试在浏览器中预览打印的pdf效果,这个div肯定会分成3页进行显示。
最终页面的效果应该如下:
1 | <style> |
2 | body{ |
3 | width:210mm; |
4 | height:297mm; |
5 | } |
6 | @page{ |
7 | size: A4; |
8 | margin: 0; |
9 | } |
10 | @media print{ |
11 | .page-break{ |
12 | page-break-before:always; |
13 | } |
14 | </style> |
15 | <div class="page-break">11111111111111</div> |
16 | <div class="page-break">22222222222222</div> |
17 | <div class="page-break">33333333333333</div> |
18 | <table class="page-break"> |
19 | <tr> |
20 | <td>1</td> |
21 | <td>2</td> |
22 | <td>3</td> |
23 | <td ></td> |
24 | <td>4</td> |
25 | <td>5</td> |
26 | <td>6</td> |
27 | <td>7</td> |
28 | <td>8</td> |
29 | </tr> |
30 | </table> |
31 | <table class="page-break"> |
32 | <tr> |
33 | <td>9</td> |
34 | <td>10</td> |
35 | <td>11</td> |
36 | <td>12</td> |
37 | <td>13</td> |
38 | <td>14</td> |
39 | <td>15</td> |
40 | <td>16</td> |
41 | <td>17</td> |
42 | </tr> |
43 | </table> |