Jak wydrukować wskazany plik div (bez ręcznego wyłączania całej innej zawartości na stronie)?
Chcę uniknąć nowego okna podglądu, więc utworzenie nowego okna z tą zawartością nie jest przydatne.
Strona zawiera kilka tabel, jedna z nich zawiera div, który chcę wydrukować - tabela jest stylizowana za pomocą wizualnych stylów dla Internetu, które nie powinny być wyświetlane w druku.
javascript
css
printing
dhtml
noesgard
źródło
źródło
Odpowiedzi:
Oto ogólne rozwiązanie, wykorzystujące tylko CSS , które zweryfikowałem do pracy.
Alternatywne podejścia nie są tak dobre. Używanie
display
jest trudne, ponieważ jeśli jakikolwiek element ma,display:none
żaden z jego potomków nie wyświetli. Aby z niego skorzystać, musisz zmienić strukturę swojej strony.Używanie
visibility
działa lepiej, ponieważ możesz włączyć widoczność potomków. Niewidoczne elementy wciąż wpływają na układ, więc przechodzęsection-to-print
do lewego górnego rogu, aby drukować poprawnie.źródło
position:fixed
tego. Jednak Chrome i Safari również obcinają zawartość, szczególnie po pierwszej stronie. Więc moim ostatecznym obejściem było ustawienie zarówno celu, jak i wszystkich jego rodziców, naoverflow:visible; position:absolute !important; top:0;left:0
#section-to-print
pasuje do samej sekcji;#section-to-print *
pasuje do każdego podelementu sekcji. Ta reguła powoduje, że sekcja i cała jej zawartość są widoczne.Mam lepsze rozwiązanie z minimalnym kodem.
Umieść swoją część do wydruku w div z identyfikatorem takim jak ten:
Następnie dodaj wydarzenie, takie jak kliknięcie (jak pokazano powyżej) i przekaż identyfikator div, tak jak to zrobiłem powyżej.
Teraz stwórzmy naprawdę prosty javascript:
Zauważ, jakie to proste? Bez wyskakujących okienek, bez nowych okien, bez szalonego stylu, bez bibliotek JS, takich jak jquery. Problem z naprawdę skomplikowanymi rozwiązaniami (odpowiedź nie jest skomplikowana i nie to, o czym mówię) polega na tym, że NIGDY nie da się jej przetłumaczyć na wszystkie przeglądarki! Jeśli chcesz, aby style były różne, wykonaj czynności przedstawione w zaznaczonej odpowiedzi, dodając atrybut media do łącza do arkusza stylów (media = „print”).
Bez puchu, lekki, po prostu działa.
źródło
.click
. Szkoda, bo kod jest tak lekki.Wszystkie dotychczasowe odpowiedzi są dość błędne - albo polegają na dodawaniu
class="noprint"
do wszystkiego, albo będą siędisplay
w nim bałaganić#printable
.Myślę, że najlepszym rozwiązaniem byłoby utworzenie opakowania wokół materiałów niedrukowalnych:
Oczywiście nie jest to idealne rozwiązanie, ponieważ wymaga nieco przesunięcia w kodzie HTML ...
źródło
Z jQuery jest to tak proste:
źródło
Czy możesz użyć arkusza stylów drukowania i CSS, aby uporządkować treści, które chcesz wydrukować? Przeczytaj ten artykuł, aby uzyskać więcej wskazówek.
źródło
Działa to dobrze:
Pamiętaj, że działa to tylko z „widocznością”. „display” tego nie zrobi. Testowane w FF3.
źródło
Nie podoba mi się żadna z tych odpowiedzi jako całości. Jeśli masz klasę (powiedzmy printableArea) i masz ją jako bezpośrednie dziecko ciała, możesz zrobić coś takiego w swoim CSS wydruku:
Dla tych, którzy szukają printableArea w innym miejscu, musisz upewnić się, że wyświetlają się rodzice printableArea:
Korzystanie z widoczności może powodować wiele problemów z odstępami i pustych stron. Wynika to z faktu, że widoczność utrzymuje przestrzeń elementów, po prostu sprawia, że jest ukryta, a gdy ekran ją usuwa, a inne elementy zajmują jej przestrzeń.
Powodem, dla którego działa to rozwiązanie, jest to, że nie chwytasz wszystkich elementów, tylko bezpośrednie dzieci ciała i chowasz je. Inne poniższe rozwiązania z display css, ukrywają wszystkie elementy, co wpływa na wszystko wewnątrz zawartości printableArea.
Nie sugerowałbym javascript, ponieważ musiałbyś mieć przycisk drukowania, który kliknie użytkownik, a standardowe przyciski drukowania przeglądarki nie będą miały takiego samego efektu. Jeśli naprawdę musisz to zrobić, chciałbym zapisać html body, usunąć wszystkie niechciane elementy, wydrukować, a następnie dodać html z powrotem. Jak już wspomniano, unikałbym tego, gdybyś mógł i używał opcji CSS takiej jak powyżej.
UWAGA: Możesz dodać dowolny CSS do wydruku CSS, używając stylów wbudowanych:
Lub, jak zwykle używam, jest tag linku:
źródło
Podaj element, który chcesz wydrukować identyfikator
printMe
.Umieść ten skrypt w tagu head:
Wywołaj funkcję
źródło
hm ... użyj rodzaju arkusza stylów do drukowania ... np .:
print.css:
źródło
źródło
Krok 1: Napisz następujący kod JavaScript w tagu head
Krok 2: Wywołaj funkcję PrintMe („DivID”) przez zdarzenie onclick.
źródło
W CSS 3 możesz użyć następujących opcji:
źródło
Podniosłem zawartość za pomocą JavaScript i utworzyłem okno, które mogłem wydrukować zamiast ...
źródło
Metoda Sandro działa świetnie.
Ulepszyłem go, aby umożliwić stosowanie wielu łączy printMe, szczególnie do stosowania na stronach z kartami i do rozwijania tekstu.
function processPrint(printMe){
<- wywołanie zmiennej tutajvar printReadyElem = document.getElementById(printMe);
<- usunął cudzysłowy wokół printMe, aby poprosić o zmienną<a href="javascript:void(processPrint('divID'));">Print</a>
<- przekazanie identyfikatora div, który ma zostać wydrukowany, do funkcji przekształcającej zmienną printMe w identyfikator div. potrzebne są pojedyncze cytatyźródło
printDiv (divId) : Uogólnione rozwiązanie do drukowania dowolnego div na dowolnej stronie.
Miałem podobny problem, ale chciałem (a) móc wydrukować całą stronę lub (b) wydrukować jeden z kilku określonych obszarów. Moje rozwiązanie, dzięki dużej części powyższych, pozwala określić dowolny obiekt div do wydrukowania.
Kluczem do tego rozwiązania jest dodanie odpowiedniej reguły do arkusza stylów nośnika wydruku, aby wydrukować żądany plik div (i jego zawartość).
Najpierw utwórz potrzebny css drukowania, aby wszystko ukryć (ale bez określonej reguły zezwalającej na element, który chcesz wydrukować).
Pamiętaj, że dodałem nowe reguły klasowe:
Następnie wstaw trzy funkcje JavaScript. Pierwszy tylko włącza i wyłącza arkusz stylów nośnika wydruku.
Drugi wykonuje prawdziwą pracę, a trzeci czyści później. Drugi (printDiv) aktywuje arkusz stylów nośnika wydruku, a następnie dołącza nową regułę, aby umożliwić wydrukowanie żądanego pliku div, wydaje wydruk, a następnie dodaje opóźnienie przed ostatecznym porządkiem (w przeciwnym razie style można zresetować przed wydrukiem gotowy.)
Ostatnie funkcje usuwają dodaną regułę i ponownie ustawiają styl drukowania na wyłączony, aby można było wydrukować całą stronę.
Jedyne, co należy zrobić, to dodać jeden wiersz do przetwarzania obciążenia, aby styl drukowania był początkowo wyłączony, umożliwiając w ten sposób drukowanie całej strony.
Następnie z dowolnego miejsca w dokumencie możesz wydrukować plik div. Wystarczy wydać printDiv („thedivid”) z przycisku lub cokolwiek innego.
Duży plus za to podejście stanowi ogólne rozwiązanie do drukowania wybranej zawartości z poziomu strony. Pozwala także na użycie istniejących stylów dla drukowanych elementów - w tym zawierającego div.
UWAGA: W mojej implementacji musi to być pierwszy arkusz stylów. Zmień odniesienia do arkusza (0) na odpowiedni numer arkusza, jeśli chcesz zrobić to później w kolejności arkuszy.
źródło
@Kevin Florida Jeśli masz wiele div z tej samej klasy, możesz użyć tego w następujący sposób:
korzystałem z wewnętrznego typu zawartości Colorbox
źródło
W moim przypadku musiałem wydrukować obraz na stronie. Kiedy skorzystałem z głosowanego rozwiązania, miałem 1 pustą stronę, a drugą obraz. Mam nadzieję, że to komuś pomoże.
Oto css, którego użyłem:
Mój HTML to:
źródło
Najlepsze css, aby dopasować wysokość pustej przestrzeni:
źródło
Najlepszy sposób na wydrukowanie konkretnego elementu Div lub dowolnego elementu
źródło
Do drukowania użyj specjalnego arkusza stylów
a następnie dodaj klasę, tj. „noprint” do każdego znacznika, którego treści nie chcesz wydrukować.
W użyciu CSS
źródło
Jeśli chcesz tylko wydrukować ten div, musisz użyć instrukcji:
źródło
Funkcja printDiv () pojawiła się kilka razy, ale w takim przypadku tracisz wszystkie elementy wiążące i wartości wejściowe. Tak więc moim rozwiązaniem jest utworzenie div dla wszystkiego o nazwie „body_allin” i innego poza pierwszym o nazwie „body_print”.
Następnie wywołujesz tę funkcję:
źródło
Możesz użyć osobnego stylu CSS, który wyłącza każdą inną zawartość oprócz tej o identyfikatorze „printarea”.
Zobacz CSS Design: Going to Print, aby uzyskać dodatkowe wyjaśnienia i przykłady.
źródło
Miałem wiele zdjęć z jednym przyciskiem i musiałem kliknąć przycisk, aby wydrukować każdy plik div z obrazem. To rozwiązanie działa, jeśli mam wyłączoną pamięć podręczną w przeglądarce, a rozmiar obrazu nie zmienia się w Chrome:
źródło
Jeszcze jedno zbliżenie bez wpływu na bieżącą stronę, a także utrzymuje css podczas drukowania. Tutaj selektor musi być specyficznym selektorem div, którą treść musimy wydrukować.
Tutaj pod warunkiem, że trochę czasu pokaże, że zewnętrzny css zostanie do niego zastosowany.
źródło
Wypróbowałem wiele z dostarczonych rozwiązań, ale żadne z nich nie działało idealnie. Tracą wiązania CSS lub JavaScript. Znalazłem idealne i łatwe rozwiązanie, które nie traci powiązań CSS ani JavaScript.
HTML:
JavaScript:
źródło
Jestem bardzo spóźniony na tę imprezę, ale chciałbym się przyłączyć z innym podejściem. Napisałem mały moduł JavaScript o nazwie PrintElements do dynamicznego drukowania części strony internetowej.
Działa poprzez iterację wybranych elementów węzła i dla każdego węzła przemierza drzewo DOM aż do elementu BODY. Na każdym poziomie, w tym początkowym (który jest poziomem węzła, który ma zostać wydrukowany), dołącza klasę znaczników (
pe-preserve-print
) do bieżącego węzła. Następnie dołącza inną klasę znaczników (pe-no-print
) do wszystkich rodzeństwa bieżącego węzła, ale tylko wtedy, gdy nie mape-preserve-print
na nich żadnej klasy. Jako trzeci akt dołącza także inną klasę do zachowanych elementów przodkape-preserve-ancestor
.Dead-simple uzupełniający css tylko do wydruku ukryje i pokaże odpowiednie elementy. Niektóre zalety tego podejścia polegają na tym, że wszystkie style są zachowane, nie otwiera nowego okna, nie ma potrzeby poruszania się po wielu elementach DOM i ogólnie jest nieinwazyjny w przypadku oryginalnego dokumentu.
Zobacz wersję demonstracyjną lub przeczytaj powiązany artykuł w celu uzyskania dalszych szczegółów .
źródło
Możesz użyć tego: http://vikku.info/codesnippets/javascript/print-div-content-print-only-the-content-of-an-html-element-and-not-the-whole-document/
Lub użyj właściwości
visibility:visible
ivisibility:hidden
css razem z@media print{}
„display: none” ukryje wszystkie zagnieżdżone „display: block”. To nie jest rozwiązanie.
źródło
Znalazłem rozwiązanie.
źródło
bazując na odpowiedzi @Kevin na Florydzie, zrobiłem sposób, aby uniknąć wyłączania skryptu na bieżącej stronie z powodu nadpisywania treści. Używam innego pliku o nazwie „printScreen.php” (lub .html). Zawiń wszystko, co chcesz wydrukować, w div „printSource”. I za pomocą javascript otwórz nowe okno, które wcześniej utworzyłeś („printScreen.php”), a następnie pobierz zawartość w „printSource” w górnym oknie.
Oto kod.
Główne okno :
To jest „printScreen.php” - inny plik do pobrania zawartości do wydrukowania
źródło