Widziałem to pytanie zadawane na kilka różnych sposobów na stronie SO i kilku innych stronach internetowych, ale większość z nich jest albo zbyt specyficzna, albo nieaktualna. Mam nadzieję, że ktoś może tu udzielić ostatecznej odpowiedzi bez zagubienia się w spekulacjach.
Czy istnieje sposób, za pomocą CSS lub javascript, aby zmienić domyślne ustawienia drukarki, gdy ktoś drukuje w przeglądarce? I oczywiście przez „odbitki z ich przeglądarki” mam na myśli jakąś formę HTML, a nie PDF lub jakiś inny typ MIME zależny od wtyczki.
Proszę zanotować:
Jeśli niektóre przeglądarki to oferują, a inne nie (lub jeśli wiesz, jak to zrobić w przypadku niektórych przeglądarek), z zadowoleniem przyjmuję rozwiązania specyficzne dla przeglądarki.
Podobnie, jeśli znasz ogólną przeglądarkę, która ma określone ograniczenia przeciw EVERowi, aby to robiła, jest to również pomocne, ale doceniona zostanie pewna dość aktualna dokumentacja. (zwykłe powiedzenie „sprzeczne z polityką bezpieczeństwa XYZ” nie jest zbyt przekonujące, gdy XYZ dokonał znaczących zmian we wspomnianej polityce w ciągu ostatnich trzech lat).
Wreszcie, kiedy mówię „zmień domyślne ustawienia drukowania”, nie mam na myśli wieczności, tylko dla mojej strony i mam na myśli w szczególności marginesy wydruku, nagłówki i stopki.
Jestem świadomy, że CSS oferuje opcję zmiany orientacji strony oraz marginesów strony. Jedną z wielu zmagań jest Firefox. Jeśli ustawię marginesy strony na 1 cal, DODAJE to do połowy cala, które już umieszcza.
Bardzo chcę zmniejszyć wykorzystanie plików PDF na stronie mojego klienta, ale naruszenie ich prezentacji (jak również brak wiarygodności) są ich głównym problemem.
Odpowiedzi:
Standard CSS umożliwia zaawansowane formatowanie. W
@page
CSS znajduje się dyrektywa, która umożliwia niektóre formatowanie, które dotyczy tylko mediów stronicowanych (takich jak papier). Zobacz http://www.w3.org/TR/1998/REC-CSS2-19980512/page.html .Minusem jest to, że zachowanie w różnych przeglądarkach nie jest spójne. Safari wciąż nie obsługuje ustawiania marginesu strony drukarki, ale wszystkie inne przeglądarki obsługują to teraz.
Dzięki tej
@page
dyrektywie możesz określić margines strony drukarki (który nie jest taki sam jak normalny margines CSS elementu HTML):To nie działa w Firefox 3.6 , IE 7 , Safari 5.1.7 lub Google Chrome 4.1 .
Ustawienie marginesu @strona ma wpływ na IE 8 , Opera 10 , Google Chrome 21 i Firefox 19 .
Mimo że marginesy strony są ustawione poprawnie dla treści w tych przeglądarkach, zachowanie nie jest idealne przy próbie rozwiązania ukrywania nagłówka / stopki.
Oto jak zachowuje się w różnych przeglądarkach:
W programie Internet Explorer margines jest ustawiony na 0 mm w ustawieniach tego drukowania, a jeśli zrobisz Podgląd, domyślnie otrzymasz 0 mm, ale użytkownik może go zmienić w podglądzie.
Zobaczysz, że zawartość strony jest właściwie ustawiona poprawnie, ale nagłówek i stopka wydruku przeglądarki są wyświetlane z nieprzezroczystym tłem, dzięki czemu skutecznie ukrywa zawartość strony w tej pozycji.
W Firefox nowszych wersjach, jest umieszczony prawidłowo, ale wyświetlany jest zarówno nagłówek / stopka tekst i tekst treść, więc wygląda na to złym połączeniem tekstu nagłówka przeglądarka i treści strony.
W Operze zawartość strony ukrywa nagłówek, gdy używasz nieprzezroczystego tła w standardowym css, a pozycja nagłówka / stopki powoduje konflikt z treścią. Całkiem dobrze, ale wygląda dziwnie, jeśli margines jest ustawiony na małą wartość, która powoduje, że nagłówek jest częściowo widoczny. Również margines strony nie jest ustawiony prawidłowo.
W nowszych wersjach Chrome nagłówek i stopka przeglądarki są ukryte, jeśli margines @strona jest tak mały, że pozycja nagłówka / stopki powoduje konflikt z treścią. Moim zdaniem dokładnie tak powinno się to zachowywać.
Wniosek jest taki, że Chrome ma najlepszą implementację tego w zakresie ukrywania nagłówka / stopki.
źródło
@page
marże ibody
marże są fundamentalnie różne rzeczy:body
margines odnosi się tylko do całego ciała , czyli w górnej części pierwszej strony i na dole ostatniej strony. Dla wszystkich stron pośrednich góra / dół nadal będą miały zerowy margines.Każda najnowsza wersja Chrome i Opera, a także Firefox 48 alfa 1 i nowszy
Możesz ustawić margines strony do rozmiaru, który jest zbyt mały, aby zawierał tekst, aby to wyłączyć (pożyczanie od odpowiedzi podziwu ):
Dla wersji Firefoksa do 48 wersji alfa 1
Możesz dodać
mozNoMarginBoxes
atrybut do<html>
tagu, aby zapobiec drukowaniu adresu URL, numerów stron i innych rzeczy, które Firefox dodaje do marginesu strony.Działa w przeglądarce Firefox 29 i nowszych. Tutaj możesz zobaczyć zrzut ekranu różnicy lub zobaczyć tutaj przykład na żywo.
Zauważ, że
mozDisallowSelectionPrint
atrybut w tym przykładzie nie jest wymagany do usunięcia tekstu z marginesów; widzieć Co robi atrybut mozdisallowselectionprint w pliku PDF.js? .Innych przeglądarkach
Niestety wydaje się, że nie ma sposobu na rozwiązanie tego problemu w Internet Explorerze, więc będziesz musiał skorzystać z formatu PDF lub poprosić użytkowników o wyłączenie tekstu marginesu.
To samo dotyczy Safari; według komentarza @Luiz Perez , najnowsze wersje Safari (8, 9.1 i 10) nadal nie obsługują
@page
tłumienia tekstów marginesów.Nie mogę nic znaleźć na Edge i nie mam dostępnej instalacji Windows 10 do przetestowania.
źródło
<!DOCTYPE html> <html moznomarginboxes mozdisallowselectionprint>
jest ustawiony. Źródło:https://bug743252.bugzilla.mozilla.org/attachment.cgi?id=714383
@page{ size: auto; margin: 3mm; }
obsługą Chrome i Safari zrobiłem dla mnie rozwiązanie dla różnych przeglądarek.Jak wspomniano powyżej, @Awe to rozwiązanie, które zostało potwierdzone do pracy w Chrome !!
Upewnij się tylko, że jest to WEWNĄTRZ znaczników głowy:
źródło
padding: 0.25in 0.5in;
do stylów nadwozia, aby uzyskać dokładnie marginesy potrzebne do uzyskania ładnego, czystego wydruku. Pracując w Chrome v25 i na szczęście dla tego konkretnego projektu możemy poprosić użytkowników końcowych o wybranie jednej z kilku nowoczesnych przeglądarek.Mam podobne żądanie od klienta, który chce usunąć nagłówek, numery stron i stopkę HTML. W takim przypadku klient przedstawia stronę HTML, która może być podwójna jako formalny certyfikat. Dodany adres URL, strona i nagłówek są nieistotne i prowadzą do niezbyt przyjemnego produktu końcowego. Pod pewnymi względami wygląda po prostu tanio.
Media = Drukuj nie było w stanie wyłączyć tych ustawień domyślnych przeglądarki. Jedynym obejściem jest poinformowanie użytkownika o kliknięciu przycisku „Sprzęt” i włączaniu / wyłączaniu tych elementów. Poważnie, nie miałem pojęcia, że mógłbym to zrobić przez 20 lat (i uważamy, że typowy użytkownik będzie miał wskazówkę, aby kliknąć przycisk przełączania?).
Jeśli CSS obsługuje Media = Drukuj, powinien wspierać możliwość kontrolowania całego procesu drukowania przez użytkownika końcowego. Rozumiem, że przeglądarki udostępniają dodane pola, ale dlaczego nie pozwolić CSS kontrolować ogólną jakość drukowania - jeśli jest to pożądane. 90% rozwiązanie może wynosić 100% z trzema dodatkowymi polami! Prosty:
wystarczyłoby.
Ponownie, nie ma znaczenia, czy użytkownik końcowy chce go wydrukować, czy nie (może twój klient jest bardzo prywatny i nie chce, aby drukowane adresy URL się zmieniały. A może zespół zarządzający korzysta z prywatnych witryn do współpracy?). Cieszę się, że bronisz użytkownika końcowego, ale jeśli ktoś szuka odpowiedzi, nie odpowiadaj, mówiąc, że użytkownik ma prawo do pokazywania lub ukrywania się. Czasami klient ma prawo płacić rachunki.
źródło
@Page
dyrektywę do ustawiania marginesu drukarki (który nie jest taki sam jak margines treści strony HTML). Obecnie jest obsługiwany przez wszystkie główne przeglądarki oprócz Safari, ale jego wpływ na nagłówek / stopkę jest różny. Najlepsze implementacje znajdują się w Operze i Chrome.Wypróbuj ten kod, działa w 100% dla mnie:
DLA Krajobrazu:
DLA Portait:
źródło
Ponieważ wspomniałeś „w ich przeglądarce” i Firefox, jeśli używasz Internet Explorera, możesz wyłączyć nagłówek / stopkę strony, tymczasowo ustawiając wartość w rejestrze, patrz tutaj przykład. AFAIK Nie słyszałem o tym, aby zrobić to w innych przeglądarkach. Wydaje się, że zarówno odpowiedzi Daniela, jak i Mickela kolidują ze sobą. Wydaje mi się, że w rejestrze może być podobne ustawienie do usuwania nagłówków / stopek lub dostosowywania ich przez firefoxa. Sprawdziłeś to?
Mam nadzieję, że to pomoże i Wesołych Świąt, Z poważaniem, Tom.
źródło
Margines strony: 0 mm działa teraz w przeglądarce Firefox 19.0a2 (2012-12-07).
źródło
Rozwiązałem problem za pomocą css na stronie internetowej.
źródło
To działało dla mnie z marginesem około 1 cm
źródło