2016-11-08 24 views
8

Tôi gặp khó khăn khi hiểu cách hiển thị các phần tử html có kích thước chính xác khi in chúng thành khổ giấy A4.Cách lấy kích thước hiển thị chính xác khi in các phần tử html

Để minh họa cho mục đích của tôi, tôi đơn giản hóa mã của tôi đến một trang html với một bảng duy nhất màu đỏ giáp cần được 210mmx297mm (khổ giấy A4):

<!DOCTYPE html> 
 
<html> 
 
    <head> 
 
    <style> 
 
     @page 
 
     { 
 
     size: 210mm 297mm portrait; /* Set paper size to A4 (portrait) */ 
 
     } 
 
\t \t 
 
     html, body 
 
     { 
 
     width: 210mm; 
 
     padding:0; 
 
\t \t \t \t \t \t \t 
 
     margin: 0 auto; /* Left, right are auto for body to appear as centered on screen */ \t \t \t \t     
 
     } 
 
     html 
 
     { 
 
     background: rgb(204,204,204); /* gray client window for screen (so as to emphase the body as looking as A4 paper) */ 
 
     } \t \t \t 
 

 
     table 
 
     { 
 
     width:100%; 
 
     height:297mm; 
 
     -moz-box-sizing: border-box; 
 
\t \t \t 
 
     border: solid 3px red; 
 
     border-spacing:0; 
 
     border-collapse: collapse; 
 
     } 
 
     td 
 
     { 
 
     padding: 0; 
 
     text-align: center; 
 
     box-shadow: inset 0 0 0 1000px white; 
 
     } 
 
    </style> 
 
    </head> 
 
    <body> 
 
    <table><tr><td>Hello world!</td></tr></table>  
 
    </body> 
 
</html>

  • Khi tôi hãy thử in bằng Firefox (49.0.2), và đặt cẩn thận tất cả các lề thành 0 và hiển thị kích thước thành 100%, tôi nhận được một bảng rõ ràng là quá khổ:

FullSize

  • Nếu tôi chọn 'thích ứng với trang' cho rendering kích thước, tôi nhận được một bảng mà rõ ràng là thu nhỏ quy mô:

AdaptSize

  • Tôi không may mắn hơn nếu tôi thử với Chrome (54.0.2840.87 m)

Tôi đã cố gắng để buộc kích thước 210mmx297mm tất cả các cách tròn trong css, nhưng vẫn còn một cái gì đó sai. Tôi không thể tìm ra nó là gì ... hoặc là một lỗi trong công cụ hiển thị hoặc cài đặt bị thiếu trong mã của tôi.

Note

theo ngữ cảnh Tôi đang cố gắng để tạo ra báo cáo tự động tất cả trong html + css + javascript để họ có thể dễ dàng được nhìn nhận và cuối cùng in để pdf hoặc giấy từ một trình duyệt web. Trang bìa phải được điền một số hình ảnh lên các cạnh của giấy A4.

Dưới đây là một số ví dụ hoàn chỉnh hơn:

Example (JSFiddle)

Tôi gần như ở đó, tất cả mọi thứ hiển thị độc đáo trên màn hình (firefox + chrome) nhưng vẫn có những lề khi in (in ấn làm việc với firefox + nomargin + adaptsize chỉ ... chrome bị lỗi khi lặp lại đầu trang/chân trang của bảng khi in).

Trả lời

6

Bạn đang giải quyết một vấn đề khó khăn, đó là nguyên nhân của sự tồn tại của nhiều lập trình viên. In từ HTML và đảm bảo khả năng tương thích với các trình duyệt khác nhau về cơ bản là một con kỳ lân. Bạn không nên tự mình quản lý mối quan tâm đó. Quirks của CSS phong cách và phân mảnh của hệ sinh thái trình duyệt sẽ đảm bảo bạn không thành công.

Lời khuyên của tôi là bạn hãy xem API trình tạo PDF như PDF Kit hoặc iText.

Từ nghiên cứu, in trang và biểu mẫu của tôi đặc biệt có vấn đề trên Firefox. Như bạn đã nhận thấy từ kinh nghiệm tay đầu tiên, bạn không thể quản lý lợi nhuận một cách lành mạnh. Tôi cũng đã thử với Firefox 49.0.2 mà không thành công.

Tôi đã nghĩ đến việc sử dụng @media print{} nhưng Firefox không muốn cộng tác.

Điều đó đang được nói, mã của bạn đã hoạt động tốt với tôi khi chạy Chrome trên phiên bản bạn đã đề cập. Lưu ý rằng tôi đặt lề thành 'không'.

It worked

+0

Cảm ơn câu trả lời của bạn ... tại đây chrome (Phiên bản 54.0.2840.87 m) có một số gliches cho cả trang thử nghiệm nhỏ [xem tại đây] (http://imgur.com/a/PAgy9) và cho ví dụ nhiều trang không sửa đổi đầu trang và chân trang chính xác [xem tại đây] (http://imgur.com/a/DTI42) – CitizenInsane

4

trang bìa nên được lấp đầy với một số hình ảnh lên các cạnh rất giấy A4.

Bạn sẽ không bao giờ thỏa mãn yêu cầu này. Tôi tin tưởng, tôi đã làm các biểu đồ và báo cáo trên web trong một thời gian dài và bạn chỉ đơn giản là không có quyền kiểm soát chi tiết về việc hiển thị như thế này. Web không được thiết kế cho nó.

Bạn vẫn có thể tạo một số báo cáo tuyệt vời nếu bạn sẵn sàng làm việc trong lề và không thử bố cục hoàn hảo pixel. Báo cáo web có thể trông siêu sắc nét và bạn có thể bao gồm nhiều phương tiện với một cơ sở mã.

Nhưng đối với những trường hợp hiển thị hình ảnh hoàn hảo quan trọng, ngoài việc kiểm soát ngắt trang và như vậy, chỉ thư viện PDF mới đủ. Có một số người tốt ngoài kia - Tôi đã thành công với PDFSharp.

Tại sao bạn không hiển thị ảnh bìa không bao trùm toàn bộ trang?

+0

Cảm ơn, tôi thực sự đã từ bỏ trang bìa để điền vào các cạnh rất ngay bây giờ. Tôi không viết trực tiếp lên pdf, đầu tiên vì khó viết mã cho các khái niệm cấp cao từ api thấp (mặc dù [MigraDoc] (http://www.pdfsharp.net/wiki/MigraDocFirstSteps.ashx) có vẻ hấp dẫn hơn bằng cách cung cấp trực tiếp các phần, đoạn văn, bảng, v.v ...). Lý do thứ hai là các tài liệu được sản xuất không thể được làm lại một cách dễ dàng (ví dụ: Người dùng cuối sẵn sàng lừa/ẩn văn bản đôi khi) ... Một sự xấu hổ mà in ấn không được xem xét nhiều vì html + css + javascript rất dễ sản xuất và dễ sửa đổi . – CitizenInsane

0

Bạn có thể sử dụng các phantomj để hiển thị bản pdf của mình (cuối cùng bạn yêu cầu pdf). Trong php tôi đã sử dụng thành công https://github.com/kriansa/h2p để tạo pdf. (cũng với việc hiển thị biểu đồ dựa trên javascript với d3.js). Nó không phải là dễ dàng nhưng với duyệt không đầu bạn có thể làm cho nó hoạt động.

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