2011-06-13 15 views
6

Tak więc ... z tego, co mogę znaleźć w Google, nie mogę znaleźć sposobu na użycie JavaScript do ustawienia moich preferencji drukowania (czytaj: marginesy, orientacje, stopka, itp.).Ustaw preferencje drukowania z JS

Zaraz dam memu szefowi, że to, co chce zrobić, nie jest możliwe. Chciałem sprawdzić, czy dobrze będziecie priors przodków, aby to zrobić. Proszę daj mi znać.

Znalazłem, że w FF możesz użyć niektórych ustawień user_pref (key, val), aby skonfigurować preferencje użytkownika, ale to nie działa dla ponad 90% moich użytkowników. Szukam czegoś, co obejmie IE (jak najwięcej), FF i Chrome.

Dziękuję tym ninja, którzy odpowiadają.

+1

Nie jestem ninja sieciowym w żadnym obszarze wyobraźni i nie jest to rozwiązanie JS, ale czy to nie jest to, co ma wyglądać między innymi arkusz stylów drukowania w CSS? –

+1

Dodając do Timo, sprawdź to na przykładzie zapytań o media dla css http://www.javascriptkit.com/dhtmltutors/cssmedia.shtml Zasadniczo utwórz inny arkusz stylów i pozwól sobie na całkowitą zmianę wyglądu drukowanej wersji twojego strona. Na przykład, musiałem często ustawić kolor tła ciała na #fff, aby uzyskać wydrukowaną kopię, aby zużywać mniej atramentu i, cóż, wyglądać lepiej. – mrk

+0

Rzeczywiście możliwe jest ustawienie właściwości drukowania za pomocą JavaScript za pomocą tego dodatku http://jsprintsetup.mozdev.org/ Pozdrawiam. –

Odpowiedz

11

Więc ... po całym dniu patrzenia, myślę, że znalazłem odpowiedź na moje własne pytanie. W skrócie, odpowiedź brzmi, że JS i/lub CSS nie pozwalają na zastąpienie domyślnej konfiguracji strony przeglądarki klienta.

Oto, co próbowałem. Jeśli utworzysz prosty plik HTML z pustą głową i treścią zawierającą tylko tekst "Test", zobaczysz, co przetestowałem.

  1. Arkusze stylów drukowania nie rozwiązują problemu. Ustawienie marginesu na treści 0px 0px 0px 0px to nie to samo, co kliknięcie Plik> Ustawienia strony i ustawienie wszystkich marginesów na 0. Pomimo tego, które arkusze stylu drukowania chcą, abyś wierzył, są różne. Spróbuj sam. Właśnie dlatego arkusze stylów drukowania nie rozwiązują problemu.

  2. JS nie może rozwiązać problemu. Czy możesz zrobić zdjęcie, jeśli każda odwiedzana strona modyfikuje twoje lokalne właściwości JS? Umożliwienie każdej stronie dostępu do lokalnych ustawień drukowania stanowiłoby naruszenie bezpieczeństwa i jest niedozwolone. Z tego powodu JS nie może rozwiązać twojego problemu.

Chciałbym, aby ktoś tu odpowiedział i dał mi znać, że się mylę. W przeciwnym razie ... to jest do bani ... i musi się wydarzyć. Mam mnóstwo starych użytkowników ... i zmuszanie ich do ustawiania marginesów w konfiguracji strony to ból. Również klient nie chce, abyśmy zredagowali stronę, tak aby nie musieli tego robić. Jestem pomiędzy kamieniem a twardym punktem.

6

Można ustawić orientację strony i marginesy z CSS:

@page { 
    size: landscape; 
    margin: 10% 
} 

Można również ustawić stopkę na dole każdej strony za pomocą elementu <tfoot>.

EDYCJA: Jak zauważył Beejamin, jest to dom w połowie drogi. Nie można naprawdę zmienić preferencji drukarki (tych, które pojawiają się w oknie dialogowym drukowania po kliknięciu przycisku Drukuj). Ponadto IE bardzo brakuje wsparcia dla selektora @page (rozejrzeć się, czy IE9 obsługuje i nie może znaleźć nic). Jako alternatywę możesz zawsze spróbować zastosować ją do ciała w arkuszu stylów drukowania.

body { 
    size: landscape; 
    margin: 10% 
} 

Chociaż z mojej głowy nie jestem pewien, jak skuteczne jest to.

+1

Jaitsu, co robi strona? Nie mogę znaleźć żadnej dokumentacji css na stronie @ i wszystkie style, które staram się do niej zastosować, nie działają. – frosty

+1

@strona jest elementem strony dla stronicowanych nośników (to tylko drukarki, AFAIK) - obsługa nie jest świetna - to na pewno nie zadziała w żadnym IE jaki znam (nie wiem o 9). Został zaprojektowany do tego rodzaju zadań, ale nadal nie pozwala dostosować ustawień * drukarki - tylko marginesy/dopełnienie "skrzynki" strony, która jest wysyłana do drukarki (i do której dodawane są marginesy drukarki). – Beejamin

+1

Ups - ma zawierać link: http://www.w3.org/TR/CSS2/page.html jest trudny do wyszukiwania, ponieważ Google usuwa znak "@". – Beejamin

3

Myślę, że nie masz szczęścia, próbując to zrobić w HTML i CSS. Duża część problemu polega na tym, że marginesy drukarki są ściśle związane z typem drukarki: Większość drukarek ma minimalny margines, jaki mogą ustawić (równoważne z przestrzenią potrzebną do uchwycenia strony oraz przesunięciem głowy w lewo/w prawo).

Dopuszczalne marginesy będą się również różnić w zależności od rozmiaru papieru (margines może zwykle być mniejszy na mniejszym arkuszu niż maksymalna akceptowana przez drukarkę). Na przykład, jeśli załadujesz papier A5 do drukarki A4, marginesy, które możesz ustawić, będą inne niż przy ładowaniu formatu A4.

Żadna z tych informacji nie jest dostępna dla strony internetowej, poprzez CSS, javascript lub cokolwiek innego.

Teraz, jeśli chodzi o rozwiązanie, pliki PDF pozwalają na osadzenie niektórych domyślnych ustawień drukarki w pliku - Acrobat pro pozwoli określić opcje skalowania, domyślne liczby kopii itp. Nie miałbym nic przeciwko Zakłada się, że dostępnych jest więcej potencjalnych ustawień w formacie pliku, którego Acrobat nie ujawnia.

Istnieje wiele w pełni funkcjonalnych narzędzi do generowania plików PDF, niezależnie od tego, jakiej technologii używa się po stronie serwera. te dobre pozwolą nawet na podanie URL-a i renderowanie HTML-a CSS do treści PDF, co w pewnym stopniu zautomatyzuje generowanie. Generowanie PDF jest jednak dość obciążające procesor i nie byłoby to łatwe dla użytkownika (i wymagałoby wtyczek PDF dla większości przeglądarek).

Wiem, że to nie jest idealne, ale jest to droga, którą zajrzę. Powodzenia!