Pencetakan lanskap dari HTML

244

Saya punya laporan HTML, yang perlu dicetak lansekap karena banyak kolom. Apakah ada cara untuk melakukan ini, tanpa pengguna harus mengubah pengaturan dokumen?

Dan apa saja opsi di antara browser.

doekman
sumber

Jawaban:

379

Di CSS Anda, Anda dapat mengatur properti @page seperti yang ditunjukkan di bawah ini.

@media print{@page {size: landscape}}

Halaman @ adalah bagian dari spesifikasi CSS 2.1 namun ini sizetidak disorot oleh jawaban untuk pertanyaan Apakah @ Halaman {size: landscape} usang? :

CSS 2.1 tidak lagi menentukan atribut ukuran. Draf kerja saat ini untuk modul Media P3 CSS3 tidak menentukan itu (tapi ini bukan standar atau diterima)

Sebagaimana dinyatakan opsi ukuran berasal dari Spesifikasi Draft CSS 3 . Secara teori dapat diatur ke ukuran halaman dan orientasi meskipun dalam sampel saya ukurannya dihilangkan.

Dukungan sangat dicampur dengan laporan bug mulai diajukan di firefox , sebagian besar browser tidak mendukungnya.

Ini mungkin terlihat berfungsi di IE7 tetapi ini karena IE7 akan mengingat pilihan terakhir landscape atau portrait pengguna dalam pratinjau cetak (hanya browser yang dimulai kembali).

Artikel ini memang memiliki beberapa karya yang disarankan menggunakan JavaScript atau ActiveX yang mengirim kunci ke browser pengguna meskipun mereka tidak ideal dan bergantung pada mengubah pengaturan keamanan browser.

Bergantian Anda dapat memutar konten daripada orientasi halaman. Hal ini dapat dilakukan dengan membuat gaya dan menerapkannya ke tubuh yang mencakup dua garis ini tetapi ini juga menarik untuk menciptakan banyak masalah pelurusan dan tata letak.

<style type="text/css" media="print">
    .page
    {
     -webkit-transform: rotate(-90deg); 
     -moz-transform:rotate(-90deg);
     filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);
    }
</style>

Alternatif terakhir yang saya temukan adalah membuat versi lanskap dalam PDF. Anda dapat menunjuk ke sana ketika pengguna memilih untuk mencetaknya mencetak PDF. Namun saya tidak bisa mendapatkan ini untuk pekerjaan cetak otomatis di IE7.

<link media="print" rel="Alternate" href="print.pdf">

Kesimpulannya di beberapa browser itu relatif mudah menggunakan opsi ukuran halaman tetapi dalam banyak browser tidak ada cara pasti dan itu akan tergantung pada konten dan lingkungan Anda. Ini mungkin mengapa Google Documents membuat PDF ketika cetak dipilih dan kemudian memungkinkan pengguna untuk membuka dan mencetaknya.

John
sumber
28
anehnya dikatakan 'size' bisa landscape, padahal itu sebenarnya 'orientasi'.
Magnus Smith
1
@page sizeTampaknya tidak berfungsi di semua browser modern, hanya Firefox. Chrome dan Opera sama-sama mengabaikan ini sejauh yang saya lihat.
Justin808
2
size: landscapeadalah TIDAK bagian dari CSS2.1, meskipun @pageaturan. Namun, ini adalah bagian dari CSS3. Untuk konfirmasi, coba gunakan W3C CSS Validator dan masukkan @page {size: landscape}dan bandingkan hasilnya dengan "Profil" yang disetel ke level 2.1 vs level 3.
daiscog
1
Ketika Anda memiliki div yang menempati 100 lebar atau tinggi halaman, rotasi tidak membuat div menempati ruang halaman potret, tetapi lanscape yang diputar. Jadi beberapa bagian div kemudian keluar dari halaman.
Oliver
6
@AbeerSul - Sejujurnya, mengenai CSS, apa yang dilakukannya bekerja di IE;)
Tony
27

Solusi saya:

<style type="text/css" media="print">
    @page { 
        size: landscape;
    }
    body { 
        writing-mode: tb-rl;
    }
</style>

Ini berfungsi IE, FirefoxdanChrome

Eduardo Cuomo
sumber
1
Bagaimana jika saya ingin classdiv tertentu berada di lanskap dan bukan seluruh halaman?
SearchForKnowledge
2
@SearchForKnowledge - yang akan menjadi css3's transform: rotate (90deg).
ToolmakerSteve
Tidak mengerti apa yang saya lakukan salah, tetapi ini memecah seluruh halaman dalam chrome. Ini adalah baris yang saya salin dari kode @media print {@page {size: portrait;} body {writing-mode: tb-rl;}}
X-HuMan
Bagi saya hanya menambahkan halaman ini {size: landscape; } bekerja.
Kumar M
1
Pada tahun 2018 masih berfungsi dengan baik dengan komponen WebBrowers standar. Terima kasih.
Ken Bekov
14

Tidak cukup hanya dengan memutar konten halaman. Berikut ini adalah CSS kanan yang berfungsi di sebagian besar browser (Chrome, Firefox, IE9 +).

Setel tubuh pertama marginke 0, karena jika tidak, margin halaman akan lebih besar daripada yang Anda atur dalam dialog cetak. Juga atur backgroundwarna untuk memvisualisasikan halaman.

body {
  margin: 0;
  background: #CCCCCC;
}

margin, borderdan backgrounddiminta untuk memvisualisasikan halaman.

paddingharus diatur ke margin cetak yang diperlukan. Dalam dialog cetak Anda harus mengatur margin yang sama (10mm dalam contoh ini).

div.portrait, div.landscape {
  margin: 10px auto;
  padding: 10mm;
  border: solid 1px black;
  overflow: hidden;
  page-break-after: always;
  background: white;
}

Ukuran halaman A4 adalah 210mm x 297mm. Anda perlu mengurangi margin cetak dari ukurannya. Dan atur ukuran konten halaman:

div.portrait {
  width: 190mm;
  height: 276mm;
}
div.landscape {
  width: 276mm;
  height: 190mm;
}

Saya menggunakan 276mm bukan 277mm, karena browser yang berbeda skala halamannya sedikit berbeda. Jadi beberapa dari mereka akan mencetak konten setinggi 277mm pada dua halaman. Halaman kedua akan kosong. Lebih aman menggunakan 276mm.

Kami tidak membutuhkan margin, border, padding, backgroundpada halaman yang dicetak, sehingga menghapusnya:

@media print {
  body {
    background: none;
    -ms-zoom: 1.665;
  }
  div.portrait, div.landscape {
    margin: 0;
    padding: 0;
    border: none;
    background: none;
  }
  div.landscape {
    transform: rotate(270deg) translate(-276mm, 0);
    transform-origin: 0 0;
  }
}

Perhatikan bahwa asal mula transformasi adalah 0 0! Juga konten halaman landscape harus dipindahkan 276mm ke bawah!

Juga jika Anda memiliki campuran halaman potret dan lanscape, IE akan memperkecil halaman. Kami memperbaikinya dengan menetapkan -ms-zoomke 1.665. Jika Anda mengaturnya menjadi 1,6666 atau sesuatu seperti ini, batas kanan konten halaman terkadang dapat dipotong.

Jika Anda perlu IE8- atau browser tua lainnya mendukung Anda dapat menggunakan -webkit-transform, -moz-transform, filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3). Tetapi untuk browser yang cukup modern, itu tidak diperlukan.

Ini adalah halaman pengujian:

<!DOCTYPE HTML>
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <style>
      ...Copy all styles here...
    </style>
  </head>
  <body>
    <div class="portrait">A portrait page</div>
    <div class="landscape">A landscape page</div>
  </body>
</html>
Denis
sumber
Terima kasih banyak, bekerja seperti pesona (krom bekas) dengan halaman web yang terdiri dari campuran mode lansekap dan potret.
zcahfg2
Dari mana div.portrait, div.landscape berasal?
zcahfg2
Apakah ini berfungsi di IE 11 untuk siapa pun? Sepertinya semua elemen tidak terkait.
mzonerz
1
@ mzonerz Saya baru saja menguji di IE 11, itu berfungsi dengan baik. Saya menambahkan html pengujian di akhir jawaban. Harap dicatat bahwa Anda harus mengatur margin halaman ke 10mm di pengaturan pencetakan. Jika Anda membutuhkan margin halaman yang berbeda, maka Anda harus memperbarui nilai-nilai berikut: padding: 10mm; lebar: 190mm; tinggi: 190mm;
Denis
@Denis Terima kasih atas upaya Anda .. Sebenarnya ini adalah satu-satunya solusi yang bekerja untuk saya sejauh ini ... bagus !!, Orang yang mengintegrasikan solusi ini di situs Intranet sharepoint mungkin perlu mematikan Pengaturan Tampilan Kompatibilitas.
mzonerz
13

Dikutip dari CSS-Diskusikan Wiki

Aturan @page telah dikurangi cakupannya dari CSS2 ke CSS2.1. Aturan lengkap CSS2 @ halaman dilaporkan hanya diterapkan di Opera (dan bahkan gagal). Pengujian saya sendiri menunjukkan bahwa IE dan Firefox sama sekali tidak mendukung @page. Menurut bagian spec CSS2 yang sekarang sudah usang 13.2.2 adalah mungkin untuk mengesampingkan pengaturan orientasi pengguna dan (misalnya) memaksa pencetakan dalam Landscape tetapi properti "size" yang relevan telah dihapus dari CSS2.1, konsisten dengan fakta bahwa tidak ada browser saat ini yang mendukungnya. Itu telah dipulihkan dalam modul Media Paged CSS3 tetapi perhatikan bahwa ini hanya Draft Kerja (pada Juli 2009).

Kesimpulan: lupakan @ halaman untuk saat ini. Jika Anda merasa dokumen Anda perlu dicetak dalam orientasi Landscape, tanyakan pada diri sendiri apakah Anda dapat membuat desain Anda lebih lancar. Jika Anda benar-benar tidak bisa (mungkin karena dokumen berisi tabel data dengan banyak kolom, misalnya), Anda harus memberi saran kepada pengguna untuk mengatur orientasi ke Lansekap dan mungkin menguraikan cara melakukannya di browser yang paling umum. Tentu saja, beberapa browser memiliki fitur print-to-width (shrink-to-fit) (misalnya Opera, Firefox, IE7) tetapi tidak disarankan untuk bergantung pada pengguna yang memiliki fasilitas ini atau mengaktifkannya.

Ahmad Alfy
sumber
4
Itulah "CSS-Diskusikan Wiki", bukan "Wikipedia".
jball
12

Coba tambahkan ini CSS Anda:

@page {
  size: landscape;
}
alat
sumber
2
Apakah ini cocok untuk Anda dengan salah satu browser? Dengan IE8 dan Firefox3.5 tampaknya tidak ada bedanya dengan pratinjau cetak.
Daniel Ballinger
Sayangnya, pratinjau cetak tidak mengikuti semua properti CSS. Tetapi ini harus bekerja di semua browser saat ini.
gizmo
Terima kasih telah menindaklanjuti ini. Tampaknya tidak berfungsi untuk saya dengan pencetakan yang sebenarnya. Apakah saya melewatkan sesuatu? File pengujian saya adalah sebagai berikut: (Saya harus memotong konten paragraf agar muat di kotak komentar) <html> <head> <title> Halaman pengujian lansekap </title> <style> @Page {size: landscape; } </style> </head> <body> <p> Lorem ipsum dolor sit amet, ... </p> </body> </html>
Daniel Ballinger
Saya telah mencoba setiap kombinasi aturan @Page yang ditampilkan pada halaman ini dan beberapa dari situs lain, serta contoh dalam O'Reilly HTML / XHTML: The Definitive Guide, Fifth Edition. Saya belum bisa menjalankannya di IE8, Firefox 3.6, atau Chrome 7.0.
Paul Keister
Saya tahu ini tahun 2012 ... tapi jawaban ini membantu saya ... untuk mendukung opsi lansekap untuk IE8 ... terima kasih
Vikram
11

The sizeproperti adalah apa yang Anda setelah seperti yang disebutkan. Untuk mengatur orientasi dan ukuran halaman Anda saat mencetak, Anda dapat menggunakan yang berikut ini:

/* ISO Paper Size */
@page {
  size: A4 landscape;
}

/* Size in mm */    
@page {
  size: 100mm 200mm landscape;
}

/* Size in inches */    
@page {
  size: 4in 6in landscape;
}

Berikut tautan ke dokumentasi @page .

robstarbuck
sumber
Ketika digunakan dengan bootstrap, deklarasi ini harus disimpan ke dalam .cssfile terpisah atau jika itu inline, deklarasi boostrap default ( size: a3) akan diutamakan.
caram
5

Anda juga dapat menggunakan mode penulisan atribut - css atribut IE-saja

div.page    { 
   writing-mode: tb-rl;
}
yann.kmm
sumber
1
Ini memang mengorientasikan ulang konten halaman tetapi tidak benar-benar mengubah tata letak halaman menjadi landscape. Yaitu header dan footer masih akan ditambahkan seolah-olah halaman itu potret.
Daniel Ballinger
2
-webkit-transform: rotate(-90deg); -moz-transform:rotate(-90deg);
     filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);

tidak bekerja di Firefox 16.0.2 tetapi berfungsi di Chrome

Satheesh
sumber
2

Saya membuat Dokumen MS kosong dengan pengaturan Lansekap dan kemudian membukanya di notepad. Menyalin dan menempelkan yang berikut ke halaman html saya

<style type="text/css" media="print">
   @page Section1
    {size:11 8.5in;
    margin:.5in 13.6pt 0in 13.6pt;
    mso-header-margin:.5in;
    mso-footer-margin:.5in;
    mso-paper-source:4;}
div.Section1
    {page:Section1;}
</style>



<div class="Section1"> put  text / images / other stuff  </div>

Pratinjau cetak menampilkan halaman dalam ukuran lanskap. Ini tampaknya berfungsi baik pada IE dan Chrome, tidak diuji pada FF.

Shankar
sumber
1

Saya mencoba menyelesaikan masalah ini satu kali, tetapi semua penelitian saya mengarahkan saya ke kontrol / plug-in ActiveX. Tidak ada trik yang diizinkan oleh peramban (3 tahun yang lalu) untuk mengubah pengaturan cetak (jumlah salinan, ukuran kertas).

Saya berupaya keras untuk memperingatkan pengguna dengan hati-hati bahwa mereka perlu memilih "lansekap" ketika dialog cetak browser muncul. Saya juga membuat halaman "print preview", yang bekerja jauh lebih baik daripada IE6! Aplikasi kami memiliki tabel data yang sangat luas dalam beberapa laporan, dan pratinjau cetak membuatnya menjadi jelas bagi pengguna ketika tabel akan menumpahkan sisi kanan kertas (karena IE6 tidak dapat mengatasi pencetakan pada 2 lembar juga).

Dan ya, orang masih menggunakan IE6 bahkan sekarang.

Magnus Smith
sumber
1
<style type="text/css" media="print">
.landscape { 
    width: 100%; 
    height: 100%; 
    margin: 0% 0% 0% 0%; filter: progid:DXImageTransform.Microsoft.BasicImage(Rotation=1); 
} 
</style>

Jika Anda ingin gaya ini diterapkan ke tabel maka buat satu tag div dengan kelas gaya ini dan tambahkan tag tabel dalam tag div ini dan tutup tag div di akhir.

Tabel ini hanya akan mencetak dalam lanskap dan semua halaman lainnya hanya akan mencetak dalam mode potret. Tetapi masalahnya adalah jika ukuran tabel lebih dari lebar halaman maka kita mungkin kehilangan beberapa baris dan terkadang header juga tidak terjawab. Hati-hati.

Semoga harimu menyenangkan.

Terima kasih, Naveen Mettapally.

Naveen Meletus
sumber
1
Ini memutar isi layar sebesar 90 derajat tetapi hasil cetakannya masih keluar dalam format protrait. Yang terburuk dari kedua dunia benar-benar, setidaknya di IE8.
arame3333
1

Saya mencoba jawaban Denis dan mendapatkan beberapa masalah (halaman potret tidak dicetak dengan benar setelah halaman lanskap), jadi inilah solusi saya:

body {
  margin: 0;
  background: #CCCCCC;
}

div.page {
  margin: 10px auto;
  border: solid 1px black;
  display: block;
  page-break-after: always;
  width: 209mm;
  height: 296mm;
  overflow: hidden;
  background: white;
}

div.landscape-parent {
  width: 296mm;
  height: 209mm;
}

div.landscape {
  width: 296mm;
  height: 209mm;
}

div.content {
  padding: 10mm;
}

body,
div,
td {
  font-size: 13px;
  font-family: Verdana;
}

@media print {
  body {
    background: none;
  }
  div.page {
    width: 209mm;
    height: 296mm;
  }
  div.landscape {
    transform: rotate(270deg) translate(-296mm, 0);
    transform-origin: 0 0;
  }
  div.portrait,
  div.landscape,
  div.page {
    margin: 0;
    padding: 0;
    border: none;
    background: none;
  }
}
<div class="page">
  <div class="content">
    First page in Portrait mode
  </div>
</div>
<div class="page landscape-parent">
  <div class="landscape">
    <div class="content">
      Second page in Landscape mode (correctly shows horizontally in browser and prints rotated in printer)
    </div>
  </div>
</div>
<div class="page">
  <div class="content">
    Third page in Portrait mode
  </div>
</div>

Arkadiy Bolotov
sumber
0

Ini juga bekerja untuk saya:

@media print and (orientation:landscape) {  }
Navin Rauniyar
sumber
2
Di browser mana Anda menguji?
Mike Kormendy
0

Jika Anda ingin melihat lansekap di layar sebelum Anda mencetak, serta mencetak, maka di css Anda, Anda dapat mengatur lebarnya menjadi 900px, dan tingginya menjadi 612px.

OP tidak menyebutkan ukuran A4. Saya menganggap itu ukuran Surat di nomor saya di atas.

Air biru
sumber
-1

Anda dapat mencoba yang berikut ini:

@page {
    size: auto
}
sherz
sumber