Druk krajobrazowy z HTML

Mam raport HTML, który trzeba wydrukować ze względu na wiele kolumn. Czy istnieje sposób, aby to zrobić, bez konieczności zmiany ustawień dokumentu przez użytkownika?

I jakie są opcje między przeglądarkami.

Author: John, 2008-09-26

13 answers

W CSS możesz ustawić właściwość @ page, Jak pokazano poniżej.

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

@page jest częścią specyfikacji CSS 2.1 jednak to size nie jest tak podkreślone przez odpowiedź na pytanie czy @ Page { size:landscape} jest przestarzałe?:

CSS 2.1 nie określa już atrybutu size. Obecne prace szkic dla CSS3 Paged Media module go określa (ale nie jest to standard lub akceptowane).

Jak podano opcja rozmiar pochodzi z CSS 3 szkic specyfikacji . Teoretycznie można ustawić zarówno rozmiar strony, jak i orientację, chociaż w mojej próbce rozmiar jest pomijany.

Wsparcie jest bardzo mieszane z raport o błędzie begin złożony w Firefoksie , większość przeglądarek go nie obsługuje.

Może się wydawać, że działa w IE7, ale dzieje się tak dlatego, że IE7 zapamięta ostatni wybór użytkownika w podglądzie wydruku (tylko przeglądarka jest ponownie uruchomiona).

Ten artykuł ma jakieś sugerowane obejścia pracy przy użyciu JavaScript lub ActiveX, które wysyłają Klucze do przeglądarki użytkowników, chociaż nie są one idealne i polegają na zmianie ustawień zabezpieczeń przeglądarek.

Na przemian można obracać zawartość, a nie orientację strony. Można to zrobić, tworząc styl i stosując go do ciała, które zawiera te dwie linie, ale to również ma rysować Plecy tworząc wiele problemów wyrównania i układu.

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

Ostatnią alternatywą jaką znalazłem jest stworzenie wersja krajobrazowa w PDF. Możesz wskazać tak, gdy użytkownik wybierze opcję Drukuj, drukuje plik PDF. Jednak nie mogłem dostać tego do pracy automatycznego drukowania w IE7.

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

Podsumowując w niektórych przeglądarkach jest względność łatwa przy użyciu opcji @page size, jednak w wielu przeglądarkach nie ma pewnego sposobu i zależy to od zawartości i środowiska. To może dlatego Google Documents tworzy plik PDF po wybraniu opcji Drukuj, a następnie pozwala użytkownikowi go otworzyć i wydrukować.

 311
Author: John,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-12 08:49:56

Moje rozwiązanie:

<style type="text/css" media="print">
    @page { 
        size: landscape;
    }
    body { 
        writing-mode: tb-rl;
    }
</style>
To działa w IE, Firefox i Chrome
 21
Author: Eduardo Cuomo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-02 18:33:53

Cytowane z CSS-Discuss Wiki

Reguła @ page została wycięta w zakres od CSS2 do CSS2.1. Pełna CSS2 @ reguła strony była podobno zaimplementowane tylko w Operze (i nawet wtedy). Moje własne testy pokazują, że IE i Firefox nie obsługują @page w wszystkie. Według obecnie przestarzałego CSS2 Spec sekcja 13.2.2 jest to możliwość nadpisania użytkownika ustawienie orientacji i (dla przykład) wymusza drukowanie w krajobrazie ale odpowiedni " rozmiar" nieruchomość posiada został usunięty z CSS2. 1, konsekwentnie z tym, że brak bieżącej przeglądarki wspiera. Został przywrócony w moduł Multimedialny CSS3 Paged, ale uwaga że jest to tylko roboczy szkic (jak stan na Lipiec 2009).

Wniosek: zapomnij about @ page for the present. Jeśli Poczuj, że twój dokument musi zostać wydrukowany w orientacji krajobrazowej zadaj sobie pytanie jeśli zamiast tego możesz zrobić swój projekt bardziej płynny. Jeśli naprawdę nie możesz (być może dlatego, że dokument zawiera tabele danych z wieloma kolumnami, dla przykład), trzeba będzie doradzić użytkownika, aby ustawić orientację na Krajobraz i być może zarysować, jak zrób to w najpopularniejszych przeglądarkach. Z oczywiście, niektóre przeglądarki mają Wydruk funkcja dopasowania do szerokości (shrink-to-fit) (np. Opera, Firefox, IE7) ale to niewskazane jest poleganie na użytkownikach mających tego obiektu lub o zamianie on

 11
Author: Ahmad Alfy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-12-27 19:40:23

Możesz użyć CSS 2 @ page rule, która pozwala ustawić właściwość 'size' na landscape.

 8
Author: Ian Oxley,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-26 09:33:47

Spróbuj dodać swój CSS:

@page {
  size: landscape;
}
 8
Author: gizmo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-02-19 18:41:24

Możesz również użyć niestandardowego atrybutu CSS dla IE-only writing-mode

div.page    { 
   writing-mode: tb-rl;
}
 5
Author: yann.kmm,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-26 09:28:55

Własność size jest tym, czego szukasz, jak wspomniano. Aby ustawić zarówno orientację, jak i rozmiar strony podczas drukowania, możesz użyć następującego polecenia:

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

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

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

Oto link do dokumentacji @ page .

 5
Author: robstarbuck,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-20 12:20:57
-webkit-transform: rotate(-90deg); -moz-transform:rotate(-90deg);
     filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);

Nie działa w Firefoksie 16.0.2, ale działa w Chrome

 2
Author: Satheesh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-11-24 13:35:04

Nie wystarczy tylko obrócić zawartość strony. Oto prawy CSS, który działa w większości przeglądarek (Chrome, Firefox, IE9+).

Najpierw ustaw ciało margin na 0, ponieważ w przeciwnym razie marginesy strony będą większe niż te ustawione w oknie drukowania. Ustaw także kolor background do wizualizacji stron.

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

margin, border i background są wymagane do wizualizacji stron.

padding należy ustawić wymagany margines wydruku. W oknie dialogowym Drukuj należy ustawić te same marginesy (10mm W ten przykład).

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

Rozmiar strony A4 to 210mm x 297mm. od rozmiaru należy odjąć marginesy wydruku. I ustaw rozmiar zawartości strony:

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

Używam 276mm zamiast 277mm, ponieważ różne przeglądarki skalują strony trochę inaczej. Tak więc niektóre z nich wydrukują zawartość o wysokości 277 mm na dwóch stronach. Druga strona będzie pusta. Jest bardziej bezpieczny w użyciu 276 mm.

Nie potrzebujemy żadnych margin, border, padding, background na wydrukowanej stronie, więc usuń oni:

@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;
  }
}

Zauważ, że pochodzenie transformacji jest 0 0! Również zawartość stron krajobrazowych musi zostać przesunięta o 276 mm w dół!

Również jeśli masz połączenie portretu i stron lanscape IE będzie pomniejszyć strony. Naprawiamy to ustawiając -ms-zoom na 1.665. Jeśli ustawisz go na 1.6666 lub coś podobnego, prawa krawędź zawartości strony może być czasami przycięta.

Jeśli potrzebujesz obsługi IE8-lub innych starych przeglądarek możesz użyć -webkit-transform, -moz-transform, filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3). Ale dla nowoczesnych wystarczy przeglądarek nie jest wymagane.

 2
Author: Denis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-19 12:48:48

Próbowałem raz rozwiązać ten problem, ale wszystkie moje badania doprowadziły mnie do kontrolek/wtyczek ActiveX. Nie ma sztuczki, że przeglądarki (i tak 3 lata temu) zezwalały na zmianę dowolnych ustawień drukowania (liczba kopii, rozmiar papieru).

Włożyłem swoje wysiłki w Ostrzeżenie użytkownika ostrożnie, że trzeba wybrać "krajobraz", gdy pojawi się okno drukowania przeglądarki. Stworzyłem również stronę "Podgląd wydruku", która działała znacznie lepiej niż IE6! Nasza aplikacja miała bardzo szerokie tabele danych w niektórych raportach, i Podgląd wydruku jasno dla użytkowników, kiedy tabela będzie wyciekać z prawej krawędzi papieru (ponieważ IE6 nie może poradzić sobie z drukowaniem na 2 arkuszach albo).

I tak, ludzie nadal używają IE6 nawet teraz.

 1
Author: Magnus Smith,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-11-10 16:24:28

Utworzyłem pusty dokument MS z ustawieniem poziomym, a następnie otworzyłem go w notatniku. Skopiowane i wklejone do mojej strony html

<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>

Podgląd wydruku pokazuje strony w rozmiarze poziomym. To chyba działa dobrze na IE i Chrome, nie testowane na FF.

 1
Author: Shankar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-01-05 20:06:39
<style type="text/css" media="print">
.landscape { 
    width: 100%; 
    height: 100%; 
    margin: 0% 0% 0% 0%; filter: progid:DXImageTransform.Microsoft.BasicImage(Rotation=1); 
} 
</style>

Jeśli chcesz, aby ten styl został zastosowany do tabeli, Utwórz jeden znacznik div z tą klasą stylu i Dodaj znacznik table wewnątrz tego znacznika div I Zamknij znacznik div na końcu.

Ta tabela będzie drukować tylko w poziomie, a wszystkie inne strony będą drukować tylko w trybie pionowym. Ale problem polega na tym, że jeśli rozmiar tabeli jest większy niż szerokość strony, możemy stracić niektóre wiersze i czasami nagłówki również są pominięte. Bądź ostrożny.

Miłego dnia.

Dziękuję, Naveen Mettapally.

 0
Author: Naveen Mettapally,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-06-01 13:37:21

To też zadziałało dla mnie:

@media print and (orientation:landscape) { … }
 0
Author: Navin Rauniyar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-07-25 07:15:17