ฉันสามารถบังคับให้ตัวแบ่งหน้าในการพิมพ์ HTML ได้หรือไม่


188

ฉันกำลังสร้างรายงาน HTML ที่กำลังจะพิมพ์ได้และมี "ส่วน" ที่ควรเริ่มในหน้าใหม่

มีวิธีใดบ้างที่จะใส่บางสิ่งใน HTML / CSS ที่จะส่งสัญญาณไปยังเบราว์เซอร์ที่ต้องการบังคับให้ตัวแบ่งหน้า (เริ่มหน้าใหม่) ณ จุดนั้น

ฉันไม่ต้องการสิ่งนี้ในเบราว์เซอร์ทุกตัวที่นั่นฉันคิดว่าฉันสามารถบอกคนอื่นให้ใช้เบราว์เซอร์ชุดหนึ่งเพื่อพิมพ์

คำตอบ:


336

เพิ่มคลาส CSS ชื่อ "pagebreak" (หรือ "pb") เช่น:

@media print {
    .pagebreak { page-break-before: always; } /* page-break-after works, as well */
}

จากนั้นเพิ่มแท็ก DIV ที่ว่างเปล่า ( หรือองค์ประกอบบล็อกใด ๆ ที่สร้างกล่อง ) ที่คุณต้องการให้ตัวแบ่งหน้า

<div class="pagebreak"> </div>

มันจะไม่ปรากฏบนหน้า แต่จะแยกหน้าเมื่อพิมพ์

PS อาจใช้เฉพาะเมื่อใช้-after(และสิ่งอื่นที่คุณอาจทำกับ<div>s อื่น ๆในหน้า) แต่ฉันพบว่าฉันต้องเพิ่มคลาส CSS ดังนี้

@media print {
    .pagebreak {
        clear: both;
        page-break-after: always;
    }
}

7
แต่เช่นเดียวกับสิ่งที่ดีทั้งหมดใน CSS สิ่งนี้อาจไม่ได้ทำงานอย่างสม่ำเสมอทั่วทั้งกระดานดังนั้นลองทดสอบช่วงเวลาในชีวิตเพื่อมิให้คุณโกรธผู้ใช้ที่สงสัยว่าทำไมเว็บไซต์ของคุณพิมพ์หน้าว่างเปล่าเป็นพิเศษ!
Zoe

13
ตาม MDN page-break-after"ใช้กับองค์ประกอบบล็อกที่สร้างกล่อง" ดังนั้นการใช้<span>องค์ประกอบที่ว่างเปล่าจะไม่ทำงาน เป็นความคิดที่ดีกว่าที่จะนำไปใช้กับเนื้อหาของคุณ ดูdeveloper.mozilla.org/en-US/docs/Web/CSS/page-break-after
nullability

1
@ ความสามารถในการ: จับที่ดี ฉันได้ใช้สิ่งนี้เป็นส่วนใหญ่ในงานเก่าของฉันในการควบคุมเว็บเบราเซอร์ใน WinForms ซึ่งใช้ IE มาตรฐานทองคำตามมาตรฐานดังต่อไปนี้
Chris Doggett

1
สิ่งนี้ไม่ได้ผลสำหรับฉันใน Chrome ... ฉันพยายามทำ pagebreak ภายในหลังจาก <tr> ภายใน <table> มันจะใช้งานได้ในกรณีนี้หรือไม่
delphirules

3
ด้วยเหตุผลบางอย่างเมื่อใช้เคล็ดลับนี้ใน Chrome พิกเซลของหน้าถัดไป 1 แถวจะถูกรั่วไหลไปยังหน้าก่อนหน้านี้ (สังเกตได้ชัดเมื่อใช้สีพื้นหลัง) ฉันแก้ไขโดยใช้.pagebreak { min-height: 1px; page-break-before: always; }
pzmarzly

44

ลองลิงค์นี้

<style>
@media print
{
h1 {page-break-before:always}
}
</style>

ฉันคิดว่านี่เป็นคำตอบที่ดีกว่าเนื่องจากไม่มีส่วนเกี่ยวข้องกับ HTML ในการสร้างเอฟเฟ็กต์ภาพ
FinnNk

ฉันชอบอีกอันหนึ่งที่ดีกว่าเพราะมันทำให้ฉันควบคุมได้มากกว่า ฉันสามารถกำหนด class "pagebreak" ให้กับ H1 เท่านั้นที่ควรทำให้หน้ากระโดด แต่มันก็ยังเป็นทางออกที่ดี +1 สำหรับ @media ถึงแม้ว่าหน้าจอควรละเว้นการแบ่งหน้าก่อนหน้าฉันคิดว่า ขอบคุณ!
Daniel Magliola

h1 เป็นตัวอย่างของสิ่งที่คุณสามารถใช้เป็นแท็กสำหรับตัวแบ่งการพิมพ์ คุณสามารถแทนที่และแท็กชื่อที่คุณต้องการ นอกจากนี้คุณยังสามารถใช้การแบ่งหน้าหลัง: เสมอ
jfarrell

1
h1ไม่ใช่ตัวอย่างที่ดีเนื่องจากมันหมายถึงหัวเรื่องระดับที่ 1 และหน้าควรมีหัวเรื่องดังกล่าวเพียงหนึ่งหัวข้อเท่านั้น
Jukka K. Korpela

6
หากคุณต้องการข้ามส่วนหัวแรกในหน้าแรกลองh1:not(:first-child) { page-break-before:always; }
Jeff Atwood

10

แค่อยากจะอัพเดท page-break-afterเป็นสมบัติดั้งเดิมในขณะนี้

รัฐหน้าอย่างเป็นทางการ

สถานที่ให้บริการนี้ถูกแทนที่ด้วยทรัพย์สินทำลาย


ควรสังเกตว่าคุณสมบัตินี้ได้รับการสนับสนุนโดยเบราว์เซอร์ Microsoft IE และ Edge เท่านั้น caniuse.com/…
Benjamin

7

คุณสามารถใช้คุณสมบัติ CSS page-break-before(หรือpage-break-after) เพียงแค่ตั้งค่าpage-break-before: alwaysในบรรดาองค์ประกอบระดับบล็อก (เช่นหัวdiv, pหรือtableองค์ประกอบ) ที่ควรจะเริ่มต้นในบรรทัดใหม่

ตัวอย่างเช่นในการทำให้เกิดการแบ่งบรรทัดก่อนส่วนหัวระดับ 2 และก่อนองค์ประกอบใด ๆ ในคลาสnewpage(เช่น<div class=newpage>... ) คุณจะต้องใช้

h2, .newpage { page-break-before: always }

5

First page (scroll down to see the second page)
<div style="break-after:page"></div>
Second page
<br>
<br>
<button onclick="window.print();return false;" />Print (to see the result) </button>

เพียงเพิ่มที่นี้ที่คุณต้องการหน้าเพื่อไปที่ถัดไป (ข้อความ "หน้า 1" จะอยู่ในหน้า 1 และข้อความ "หน้า 2" จะอยู่ในหน้าสอง)

Page 1
<div style='page-break-after:always'></div>
Page 2

วิธีนี้ใช้ได้เช่นกัน:

First page (there is a break after this)
<div style="break-after:page"></div>
Second page (This will be printed in the second page)

1

สมมติว่าคุณมีบล็อกที่มีบทความเช่นนี้:

<div class="article"> ... </div>

เพียงแค่เพิ่มสิ่งนี้ลงใน CSS ที่ทำงานให้ฉัน:

@media print {
  .article { page-break-after: always; }
}

(ทดสอบและทำงานกับ Chrome 69 และ Firefox 62)

อ้างอิง:

  • https://www.w3schools.com/cssref/pr_print_pageba.asp

  • https://developer.mozilla.org/en-US/docs/Web/CSS/page-break-after ; หมายเหตุสำคัญ: นี่ก็กล่าวแต่มันก็ไม่ได้ทำงานให้ฉันด้วยThis property has been replaced by the break-after property. break-afterนอกจากนี้ยังมีเอกสารเกี่ยวกับ MDN break-afterดูเหมือนจะไม่เป็นที่เฉพาะเจาะจงสำหรับหน้าแบ่งดังนั้นฉันต้องการรักษา page-break-after: always;(ทำงาน)


0
  • เราสามารถเพิ่มแท็กตัวแบ่งหน้าด้วยสไตล์ " page-break-after: always " ณ จุดที่เราต้องการแนะนำการแบ่งหน้าในหน้า html
  • " การแบ่งหน้าก่อน " ยังใช้งานได้

ตัวอย่าง:

HTML_BLOCK_1
<p style="page-break-after: always"></p>
HTML_BLOCK_2
<p style="page-break-after: always"></p>
HTML_BLOCK_3

ในขณะที่พิมพ์ไฟล์ html ด้วยรหัสด้านบนตัวอย่างก่อนพิมพ์จะแสดงสามหน้า (หนึ่งหน้าสำหรับแต่ละบล็อก html " HTML_BLOCK_n ") โดยที่ในเบราว์เซอร์บล็อกทั้งสามจะปรากฏเรียงตามลำดับกัน


0

ฉันต้องการตัวแบ่งหน้าทุกแถวที่ 3 ในขณะที่เราใช้คำสั่งพิมพ์บนเบราว์เซอร์

ฉันได้เพิ่ม <div style = 'page-break-before: always;'> </div>

หลังจากทุกแถวที่ 3 และ div ของฉันมี display: flex; ดังนั้นฉันจึงลบจอแสดงผล: ดิ้น และมันก็ทำงานได้ตามที่ฉันต้องการ



-7

@ Chris Doggettสมเหตุสมผลดี แม้ว่าฉันจะพบเคล็ดลับตลก ๆ หนึ่งในlvsys.comและใช้งานได้จริงกับ firefox และ chrome เพียงใส่ความคิดเห็นนี้ทุกที่ที่คุณต้องการแทรกตัวแบ่งหน้า นอกจากนี้คุณยังสามารถแทนที่<p>แท็กด้วยองค์ประกอบบล็อกใด ๆ

<p><!-- pagebreak --></p>
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.