2009-10-09 30 views
91

Używam oddzielnego arkusza stylów do drukowania. Czy możliwe jest ustawienie prawego i lewego marginesu w arkuszu stylów, który ustawia margines wydruku (tj. Margines na papierze).Margines podczas drukowania strony html

Dzięki.

Odpowiedz

171

Powinieneś używać cm lub jako jednostki podczas określania drukowania. Użycie pikseli spowoduje, że przeglądarka przetłumaczy go na coś podobnego do tego, jak wygląda na ekranie. Użycie formatu cm lub mm zapewni spójny rozmiar na papierze.

body 
{ 
    margin: 25mm 25mm 25mm 25mm; 
} 

Dla rozmiarów czcionek, użyj pt dla mediów drukowanych.

Należy pamiętać, że ustawienie marginesu na ciele w stylu css będzie nie dostosować marginesu w sterowniku drukarki, który definiuje obszar wydruku drukarki lub margines kontrolowane przez przeglądarkę (może być regulowany w podglądzie wydruku na niektóre przeglądarki) ... Po prostu ustawi margines na dokumencie wewnątrz obszaru drukowania.

Należy również pamiętać, że IE7 ++ automatycznie dostosowuje rozmiar do najlepszego dopasowania i powoduje, że wszystko jest nie tak, nawet jeśli używasz cm lub . Aby zastąpić to zachowanie, użytkownik musi wybrać "Podgląd wydruku", a następnie ustawić rozmiar wydruku na 100% (domyślnie jest to Shrink To Fit).

Lepszą opcją dla pełnej kontroli nad wydrukowanymi marginesami jest użycie dyrektywy @page do ustawienia marginesu papieru, który wpłynie na margines na papierze poza elementem html, który jest zwykle kontrolowany przez przeglądarkę. Zobacz http://www.w3.org/TR/1998/REC-CSS2-19980512/page.html.
Ta funkcja działa obecnie we wszystkich popularnych przeglądarkach z wyjątkiem Safari.
W eksploratorze internetowym margines jest w rzeczywistości ustawiony na tę wartość w ustawieniach dla tego drukowania, a jeśli robisz Podgląd, otrzymasz to jako domyślne, ale użytkownik może go zmienić w podglądzie.

@page 
{ 
    size: auto; /* auto is the initial value */ 

    /* this affects the margin in the printer settings */ 
    margin: 25mm 25mm 25mm 25mm; 
} 

body 
{ 
    /* this affects the margin on the content before sending to printer */ 
    margin: 0px; 
} 

odpowiedź pokrewne: Disabling browser print options (headers, footers, margins) from page?

+3

Działa to teraz w Chrome 18 i IE9 (nie testowałem wcześniejszych wersji). Nadal nie działa w Firefoksie 12, ale możesz wykonać wykrywanie po stronie serwera i dodać klasę body ", więc w twoim css możesz zrobić: body.firefox {margin: 0mm; dopełnienie: 0.25 cala;}, to jest właściwie margines 0,75 cala, ponieważ Firefox już dodaje 0.5in. To powinno działać tak długo, jak potrzebujesz> = 0,5 cala marginesów. – MrFusion

+7

+1 dla strony internetowej! Dokładnie tego potrzebowałem, ponieważ drukuję wiele stron. –

+2

Teraz działa również z Firefoksem. Ponieważ Firefox ma dobre procedury automatycznej aktualizacji, nie powinien to być problem, który musimy rozwiązać. Testowałem w IE, Operze, Chrome, Firefox i Safari. Jedyną przeglądarką, z którą obecnie nie współpracuje, jest Safari (wersja 5.1.7 dla Windows). Nie testowałem na Macu. – awe

0

Jeśli znasz docelowy rozmiar papieru, możesz umieścić swoją zawartość w DIV o tym rozmiarze i dodać margines do tego DIV, aby zasymulować margines wydruku. Niestety, nie wierzę, że masz dodatkową kontrolę nad funkcjonalnością drukowania, poza pokazaniem okna dialogowego drukowania.

+0

Dzięki.Czy nie można określić pozostawienia pikseli po lewej i prawej stronie, niezależnie od rozmiaru papieru. Pozdrowienia: – kobra

+1

Sądzę, że to może być możliwe, jeśli ustawisz rozmiar DIV dla rodzica na 100% i dodasz do niego margines x pikseli. – jonjbar

8

Osobiście sugeruję użycie innej jednostki miary niż px. Nie sądzę, że piksele mają duże znaczenie pod względem druku; idealnie byłoby użyć:

  • punkt (Pt)
  • centymetr (cm)

Jestem pewien, że są inni, a jeden znakomity artykuł o wydruku CSS można znaleźć tutaj: Going to Print, przez Eric Meyer.

+1

Masz rację, że 'px' nie ma większego znaczenia dla drukowania. Ale przeglądarki "tłumaczą" jednostki pikselowe, aby wyglądały podobnie do wyglądu na ekranie. Nie ** używa ** "punktów rozdzielczości drukarki" jako pikseli (dzięki Bogu ...). – awe

6

Zaktualizowany, proste rozwiązanie

@media print { 
    body { 
     display: table; 
     table-layout: fixed; 
     padding-top: 2.5cm; 
     padding-bottom: 2.5cm; 
     height: auto; 
    } 
} 

Old Rozwiązanie

Utwórz punkt z każdej strony, a skorzystać z poniższego kodu, aby dostosować marginesy, wysokość i szerokość.

Jeśli drukujesz format A4.

Następnie użytkownik

Rozmiar: 8.27in i 11,69 cala

@page Section1 { 
    size: 8.27in 11.69in; 
    margin: .5in .5in .5in .5in; 
    mso-header-margin: .5in; 
    mso-footer-margin: .5in; 
    mso-paper-source: 0; 
} 



div.Section1 { 
    page: Section1; 
} 

następnie utworzyć div z wszystkich treści w nim.

<div class="Section1"> 
    type your content here... 
</div> 
+0

To nie działa dla mnie w Chrome lub FF. Ponadto 'class = Section1' powinno być' class = "Section1" '. –

+0

To jest prostsze rozwiązanie: http://stackoverflow.com/questions/37033766/css-print-a-custom-sized-page-margin-when-the-content-is-on-multiple-pages?answertab=active # tab-top – besimple

1

Polecam również pt kontra cm lub mm, ponieważ jest bardziej precyzyjny. Nie mogę też uruchomić strony w Chrome (wersja 30.0.1599.69 m). Ignoruje wszystko, co umieszczam na marginesach, duże lub małe. Ale możesz sprawić, żeby działało z marginesami ciała na dokumencie, dziwne.

0

Po pierwsze, staram się zmusić wszystkich moich użytkowników do korzystania z Chrome podczas drukowania, ponieważ inne przeglądarki tworzą różne układy.

Odpowiedź z this question poleca:

@page { 
    size: 210mm 297mm; 
    /* Chrome sets own margins, we change these printer settings */ 
    margin: 27mm 16mm 27mm 16mm; 
} 

Jednak skończyło się korzystania z tej CSS dla wszystkich moich stron do wydrukowania:

@media print 
{ 
    @page { 
     size: A4; /* DIN A4 standard, Europe */ 
     margin:0; 
    } 
    html, body { 
     width: 210mm; 
     /* height: 297mm; */ 
     height: 282mm; 
     font-size: 11px; 
     background: #FFF; 
     overflow:visible; 
    } 
    body { 
     padding-top:15mm; 
    } 
} 



specjalne case: Długie tabele

Kiedy potrzebowałem, aby wydrukować tabelę ciągu kilku stron, ich margin:0 z @page prowadził do krawędzi krwawienia:

bleeding edges

mogę rozwiązać ten problem dzięki this answer z:

table { page-break-inside:auto } 
tr { page-break-inside:avoid; page-break-after:auto } 
thead { display:table-header-group } 
tfoot { display:table-footer-group } 

Plus ustawienie górnego dolnego marginesu dla @page:

@page { 
    size: auto; 
    margin: 20mm 0 10mm 0; 
} 
body { 
    margin:0; 
    padding:0; 
} 

Wynik:

solved bleeding edges

Wolałbym wolą rozwiązanie, które jest zwięzłe i współpracuje ze wszystkimi przeglądarce. Na razie mam nadzieję, że powyższe informacje mogą pomóc niektórym programistom z podobnymi problemami.

Powiązane problemy