2013-06-11 46 views
23

Tôi đang sử dụng PhantomJS để tạo tệp PDF từ html.Cách xử lý phân trang PDF trong PhantomJS

Nó hoạt động tốt, nhưng tôi không thể tìm ra cách làm việc với phân trang; Tôi muốn tạo một trang cho mỗi div trong tài liệu của tôi, nhưng tôi không thể tìm thấy bất cứ điều gì trong tài liệu. về phân trang.

Nếu tài liệu của tôi ngắn, nó chỉ tạo một trang và nếu trang đó lớn hơn, nó sẽ tạo một trang trống thứ hai và nội dung của tôi nằm trong trang đầu tiên rất dài.

Bất kỳ ý tưởng nào? (Tôi đang sử dụng mô-đun phantomJS-nút cho nodeJS)

Trả lời

36

PhantomJS quản lý việc triển khai css của webkit. Để thực hiện thủ công ngắt trang, bạn có thể sử dụng các thuộc tính:

  • page-break-before: auto/luôn luôn/tránh/...
  • page-break-inside: auto/luôn luôn/tránh/...
  • page-break-after: auto/luôn/tránh/...

Ví dụ, một div có thể là:

<div style="page-break-before:always;"><!-- content --></div> 

hoặc

<div style="page-break-after:always;"> <!-- content --></div> 

Kiểm soát ngắt trang khi in trong Webkit đôi khi không dễ dàng, đặc biệt với bảng dài html.

+0

Chia các trang của tôi thành div, áp dụng ngắt sau trang trên mỗi trang, trừ trang cuối cùng. Làm việc như một nét duyên dáng – Rayjax

+1

không sao cả, thưa ngài! – Cybermaxs

+0

tôi cũng phải đối mặt với cùng một vấn đề nhưng khi thêm trang-break-sau trên mỗi trang nó đang tạo ra rất nhiều không gian, bạn có thể giúp tôi? –

4

Rất muộn, nhưng tôi đã gặp sự cố với "đột nhập: tránh" bằng cách sử dụng JsReport đã được sửa bằng cách thay đổi loại hiển thị của thành phần thành chặn nội tuyến. Thông tin thêm tại đây: https://github.com/ariya/phantomjs/issues/10638

2

Bạn sẽ thấy điều này issue với các mẹo khác nhau.

Hãy thử sử dụng display:inline-block trong phần tử mà bạn không muốn phá vỡ do ngắt trang. Lý do đằng sau là webkit đã cố gắng để bảo vệ hình ảnh từ phá vỡ. Và hình ảnh là các khối nội tuyến.

+0

Điều này làm việc cho tôi, thay đổi nó để hiển thị: bảng; cho phép phần tử ngắt trang. –

Các vấn đề liên quan