Apakah mungkin untuk membuat halaman HTML berperilaku, misalnya, seperti halaman berukuran A4 di MS Word?
Pada dasarnya, saya ingin dapat menampilkan halaman HTML di browser, dan menguraikan konten dalam dimensi halaman ukuran A4.
Demi kesederhanaan, saya berasumsi bahwa halaman HTML hanya akan berisi teks (tidak ada gambar dll) dan tidak akan ada <br>
tag misalnya.
Juga, ketika halaman HTML dicetak, itu akan keluar sebagai halaman kertas berukuran A4.
Jawaban:
Berabad-abad yang lalu, pada November 2005, AlistApart.com menerbitkan sebuah artikel tentang bagaimana mereka menerbitkan sebuah buku dengan menggunakan apa-apa selain HTML dan CSS. Lihat: http://alistapart.com/article/boom
Berikut kutipan dari artikel itu:
Bagaimanapun…
Karena Anda ingin mencetak A4, tentu saja Anda membutuhkan dimensi yang berbeda:
Artikel ini beralih ke hal-hal seperti pengaturan istirahat halaman, dll. Jadi Anda mungkin ingin membacanya sepenuhnya.
Dalam kasus Anda, triknya adalah membuat CSS cetak terlebih dahulu. Sebagian besar peramban modern (> 2005) mendukung pembesaran dan sudah dapat menampilkan situs web berdasarkan CSS cetak.
Sekarang, Anda ingin membuat tampilan web terlihat sedikit berbeda dan mengadaptasi seluruh desain agar sesuai dengan sebagian besar browser juga (termasuk yang lama, pra-2005). Untuk itu, Anda harus membuat file CSS web atau mengganti beberapa bagian CSS cetak Anda. Saat membuat CSS untuk tampilan web, ingat bahwa browser dapat memiliki ukuran APAPUN (pikirkan: "seluler" hingga "TV layar lebar"). Artinya: untuk CSS web, lebar halaman dan lebar gambar Anda paling baik diatur menggunakan lebar variabel (%) untuk mendukung sebanyak mungkin perangkat tampilan dan klien penelusuran web.
EDIT (26-02-2015)
Hari ini, saya kebetulan menemukan artikel lain yang lebih baru di SmashingMagazine yang juga beralih ke mendesain untuk dicetak dengan HTML dan CSS ... untuk berjaga-jaga jika Anda masih bisa menggunakan tutorial lain.
EDIT (30-10-2018)
Telah menarik perhatian saya bahwa
size
itu bukan CSS3 yang valid, yang memang benar - saya hanya mengulangi kode yang dikutip dalam artikel yang (seperti disebutkan) adalah CSS2 lama yang baik (yang masuk akal ketika Anda melihat tahun artikel dan jawaban ini pertama kali dipublikasikan). Bagaimanapun, ini kode CSS3 yang valid untuk kenyamanan salin dan tempel Anda:Jika Anda merasa Anda benar-benar membutuhkan piksel ( sebenarnya Anda harus menghindari menggunakan piksel ), Anda harus berhati-hati dalam memilih DPI yang benar untuk dicetak:
Namun, saya akan menghindari kerumitan dan hanya menggunakan
cm
(sentimeter) ataumm
(milimeter) untuk ukuran karena itu menghindari rendering gangguan yang dapat timbul tergantung pada klien yang Anda gunakan.sumber
cm
et al. Saya menyarankan Anda untuk membaca artikel terkait dan / atau setidaknya jawaban saya. Dengan begitu, Anda akan segera menyadari bahwa pertanyaan Anda sebenarnya tidak masuk akal. Juga, Anda mungkin ingin memposting pertanyaan Anda sebagai pertanyaan baru jika semuanya masih belum jelas. Ini adalah situs tanya jawab, bukan forum. \ o /Akan cukup mudah untuk memaksa browser web untuk menampilkan halaman dengan dimensi piksel yang sama dengan A4. Namun, mungkin ada beberapa kebiasaan ketika hal-hal yang diberikan.
Dengan asumsi monitor Anda menampilkan 72 dpi, Anda dapat menambahkan sesuatu seperti ini:
sumber
body { height:297mm; width:210mm; margin-left:auto; margin-right:auto; }
Ukuran A4 adalah 210x297mm
Jadi Anda dapat mengatur halaman HTML agar sesuai dengan ukuran tersebut dengan CSS:
sumber
Buat bagian dengan setiap halaman, dan gunakan kode di bawah ini untuk menyesuaikan margin, tinggi dan lebar.
Jika Anda mencetak ukuran A4.
Lalu pengguna
kemudian buat div dengan semua konten Anda di dalamnya.
atau
sumber
@page Section1
bekerja dengan Chrome 41.0.2272.77. Apakah Anda benar-benar yakin bahwa jawaban Anda berhasil? Coba misalnya untuk mengunjungidata:text/html,<style>@page x{size:100pt 200pt}</style><div style="page:x">x</div>
dan membuka pratinjau cetak. Saya tidak melihat perbedaan antara itu dandata:text/html,x
. Ketika saya ganti@page x
dengan@page
, maka itu berfungsi, tapi itu bukan pemilih halaman-spesifik.Saya telah menggunakan HTML untuk menghasilkan laporan yang dicetak dengan benar pada ukuran sebenarnya di kertas nyata.
Jika Anda menggunakan mm sebagai unit Anda dengan hati-hati dalam file CSS, Anda akan baik-baik saja, setidaknya untuk satu halaman. Orang-orang dapat mengacaukan Anda dengan mengubah zoom cetak di browser mereka.
Sepertinya saya ingat semua yang saya lakukan hanya satu halaman, jadi saya tidak perlu khawatir tentang pagination - itu mungkin jauh lebih sulit.
sumber
Saya melihat solusi ini setelah mencari di google, mencari "template halaman CSS A4" (codepen.io). Ini menunjukkan area berukuran A4 (A3, A5, juga potret) di browser, menggunakan tag <page>. Di dalam tag ini, konten ditampilkan, tetapi posisi absolut masih berkaitan dengan area browser.
Ini berfungsi untuk saya tanpa css / js-library lain untuk dimasukkan. Bekerja untuk browser saat ini (IE, FF, Chrome).
sumber
box-shadow: none;
dan bukan 0Dalam normal Anda
style.css
:Di Anda
print.css
:sumber
PPI dan DPI sama sekali tidak ada bedanya dengan bagaimana dokumen akan mencetak peramban. printer tidak mengambil informasi pada dot pitch layar atau DPI gambar dll. jika Anda mencetak gambar mereka akan mencetak pada ukuran yang serupa dengan proporsi bagaimana mereka ditampilkan di layar. prosesor cetak browser akan meningkatkan DPI gambar dari sesuatu yang agak rendah seperti 72dpi ke DPI apa pun sisa dokumen. katakanlah gambar ditampilkan sebagai setengah halaman lebar, maka secara fisik sekitar 4 "lebar. lebar piksel gambar akan kira-kira 300px untuk ditampilkan dengan benar di browser. Pada saat itu dicetak pada 300DPI nominal, prosesor telah menambahkan piksel dan gambar akan tumbuh sekitar 1200px yang pada 300 DPI adalah 4 ".
ketika datang ke elemen berbasis vektor atau non pixel seperti teks, printer memilih DPI sendiri dari driver yang tidak berhubungan dengan layar dot pitch atau lebar browser dll. jika browser adalah 3000px lebar, prosesor cetak akan membungkus teks yang sesuai.
Inilah yang menyulitkan pembuatan tampilan cetak: setiap browser dan printer akan menginterpretasikan ukuran teks (pt, em, px) dan mengatur jarak dengan caranya sendiri. tergantung pada apa printer, browser dan bahkan mungkin OS yang Anda gunakan, Anda akan mendapatkan jumlah garis dan karakter yang berbeda per halaman. jadi bahkan jika Anda menguji pada komputer Anda menggunakan browser dan printer Anda dan mencari tahu bahwa Anda dapat menampilkan teks dalam kotak di 640x900px dan itu sempurna di cetak, orang berikutnya yang mencoba untuk mencetak mungkin akan membuatnya mencetak dengan cara berbeda. benar-benar tidak ada cara untuk memaksa setiap printer dan browser untuk membuatnya identik setiap kali.
lupakan piksel dan lebih banyak lupakan DPI, satu-satunya hal yang dapat Anda gunakan untuk piksel adalah mengatur lebar tabel yang mensimulasikan lebar area cetak pada printer Anda. dalam hal ini saya menemukan bahwa lebar 640px dekat.
sumber
Mencari masalah serupa yang saya temukan ini - http://www.indigorose.com/forums/archive/index.php/t-13334.html
A4 adalah format dokumen, sebagai gambar layar yang akan tergantung pada resolusi gambar, misalnya dokumen A4 yang diubah ukurannya menjadi:
sumber
Saya tahu bahwa subjek ini sudah cukup tua tetapi saya ingin berbagi pengalaman tentang topik itu. Sebenarnya, saya sedang mencari modul yang dapat membantu saya dengan laporan harian saya. Saya sedang menulis beberapa dokumentasi dan beberapa laporan dalam HTML + CSS (bukan Word, Latex, OO, ...). Tujuannya adalah untuk mencetaknya di kertas A4 untuk dibagikan kepada teman-teman, ... Alih-alih mencari, saya memutuskan untuk memiliki sesi pengkodean lucu kecil untuk mengimplementasikan lib sederhana yang dapat menangani "halaman", nomor halaman, ringkasan, tajuk , footer, .... Akhirnya, saya melakukannya di ~~ 2j dan saya tahu itu bukan alat terbaik yang pernah ada tapi hampir ok untuk tujuan saya. Anda dapat melihat proyek ini di repo saya dan jangan ragu untuk membagikan ide Anda. Mungkin bukan yang Anda cari 100%, tetapi saya pikir modul ini dapat membantu Anda.
Pada dasarnya saya membuat halaman tubuh "width: 200mm;" dan wadah tinggi: 290mm (lebih kecil dari A4). Lalu saya menggunakan page-break-after: always; jadi opsi "cetak" browser tahu kapan harus membagi halaman.
repo: https://github.com/kursion/jsprint
sumber
Secara teknis, Anda bisa, tetapi akan membutuhkan banyak usaha untuk membuat semua browser mencetak halaman persis seperti yang ditampilkan di layar. Juga, sebagian besar browser memaksa URL, tanggal cetak dan penomoran halaman pada hasil cetak, yang tidak selalu diinginkan. Ini tidak dapat diubah atau dinonaktifkan.
Sebagai gantinya, saya akan menyarankan untuk membuat PDF berdasarkan pada konten di layar dan melayani PDF untuk diunduh dan / atau dicetak. Meskipun sebagian besar pustaka PDF berbayar, ada beberapa alternatif gratis yang tersedia untuk membuat PDF dasar.
sumber
Saya telah menggunakan 680px dalam laporan komersial untuk mencetak pada halaman A4 sejak tahun 1998. 700px tidak dapat dengan benar tergantung pada ukuran margin. Browser modern dapat mengecilkan halaman agar sesuai dengan halaman pada printer, tetapi jika Anda menggunakan 680 piksel Anda akan mencetak dengan benar di hampir semua browser.
Itu HTML untuk Anda Jalankan cuplikan kode dan lihat hasil de:
JSFiddle:
https://jsfiddle.net/ajofmm7r/
sumber
Banyak cara untuk dilakukan:
sumber
Sangat mungkin untuk mengatur tata letak Anda untuk mengasumsikan proporsi halaman a4. Anda hanya perlu mengatur lebar dan tinggi sesuai (mungkin memeriksa
window.innerHeight
danwindow.innerWidth
meskipun saya tidak yakin apakah itu dapat diandalkan).Bagian yang sulit adalah dengan mencetak A4. Javascript misalnya hanya mendukung pencetakan halaman secara sementara dengan
window.print
metode ini. Sebagai @Prutswonder menyarankan untuk membuat PDF dari halaman web mungkin adalah cara paling canggih untuk melakukan ini (selain memasok dokumentasi PDF di tempat pertama). Namun, ini tidak sepele seperti yang mungkin dipikirkan orang. Berikut ini tautan yang memiliki deskripsi kelas Java semua sumber terbuka untuk membuat PDF dari HTML: http://www.javaworld.com/javaworld/jw-04-2006/jw-0410-html.html .Jelas sekali Anda telah membuat PDF dengan proporsi cetak A4 itu akan menghasilkan cetak A4 yang bersih dari halaman Anda. Apakah itu sepadan dengan investasi waktu adalah pertanyaan lain.
sumber