2012-06-07 16 views
5

[uproszczona wersja tego pytania:]problemy z drukowaniem iFrames

Dlaczego iFrames czasami odmówić drukować? Na przykład, uderzył print preview na tych dwóch stronach:

  1. http://fiddle.jshell.net/gJDv4/1/show/
  2. http://fiddle.jshell.net/gJDv4/2/show/

Na podglądzie wydruku, ramkach są widoczne w pierwszym przykładzie, ale ukryte w sekundę. Różnica kodowa między ramkami iFrames first i second jest właściwością CSS (margin: 20px;) dodaną do ramki iFrames w drugim przykładzie.


[Long (oryginalna) wersja:]

buduję stronę podglądu/wydruku, który łączy kilka niezależnych plików HTML odsyłania ich własny styl arkusze i JavaScript plików.

Chodzi o to, że wszystkie pliki są wyświetlane w iFrames do podglądu, a następnie po wydrukowaniu, każda iFrame (który prawdopodobnie będzie obejmować wiele stron) drukuje się tak, jakby była ona własnego dokument .

Jednak podczas drukowania (lub podglądu wydruku) ramki iFrame nie wyświetlają żadnych treści lub drukują tylko pierwszą stronę, obcinając pozostałe strony ramki iFrame.

ramkach wydrukowany (i drukarek podglądzie) dobrze zanim zrobiłem im wielu stron:

Jaki jest powód takiego zachowania?

+0

Hehe, wątpię, czy jest jakieś rozwiązanie, ale dam +1 komukolwiek, kto udaje się uzyskać to działa poprawnie: p I +1 za wydawanie repa, aby uzyskać odpowiedzi, gdy ma się tego małego. :) – sg3s

+0

Jeśli nie ma prawdziwej odpowiedzi, to na pewno zasługujesz na nagrodę za natychmiastowe rozpoznanie. ;) – brentonstrine

Odpowiedz

3

Można drukować dokumenty w poszczególnych iframes poprzez wywołanie funkcji print() na ich oknami ....

Więc coś takiego wydrukować plik 2:

$('#iframeTwo')[0].contentWindow.print() 

a tu jsfiddle gdzie dodałem przycisków uruchamiających poszczególne wydruki ...

http://jsfiddle.net/sg3s/GJKkm/17/

Jak, dlaczego przeglądarka zrobić nie drukuj zawartości wewnątrz elementów iframe podczas drukowania dokumentu nadrzędnego. Prawdopodobnie musi coś zrobić z tym, że te dokumenty nie są częścią dokumentu, który pokazano ...Pomyśl o tym jak o osobnym oknie (możesz wygenerować je z window.open() w js), ale potem zręcznie włamałeś się do głównego dokumentu z ograniczoną widocznością do tego, co jest określone w elemencie iframe za pomocą magii.

+0

Problem z drukowaniem pojedynczych ramek jest taki, że otwiera to możliwość, że ktoś inny wydrukuje zadanie kończące się pomiędzy dwoma drukowanymi plikami HTML, ponieważ (zakładam), że przechodziliby do kolejki wydruku jako oddzielne zadania drukowania . Wyjaśnienie, dlaczego zawartość się nie pojawia, jest tym, co zgaduję, ale nadal istnieje problem, że iFrames DO pojawiają się, gdy nie przepełniają się na oddzielnej stronie! – brentonstrine

+0

Jeśli chcesz zachować razem swoje zadania drukowania, prawdopodobnie lepiej byłoby połączyć oba dokumenty, zachowując szczególną ostrożność, aby oddzielić style używając klas ... I tak, to zachowanie jest dziwne, ale jeśli myślisz o tym, to jest niesamowite w ogóle się wyświetlają ... Prawdopodobnie próbuje to uczynić jak zwykłym html, ale ponieważ istnieją ograniczenia dotyczące ramek, które powodują błędy w treści. Nie mogę tego powtórzyć w Chrome, więc jeśli próbujesz uruchomić tę przeglądarkę, możesz równie dobrze przestać: p – sg3s

+0

Do łączenia dwóch dokumentów z różnymi arkuszami stylów. Może to być trochę pracochłonne, ale prawdopodobnie zadziałałoby; Weź dwa dokumenty, umieść kod HTML w oddzielnych węzłach "root", które identyfikują różne dokumenty. Pobierz arkusze stylów dla dokumentów i zmontuj je w prekompilatorze css w strukturze zagnieżdżonej (np. [LESS] (http://lesscss.org/#-nested-rules)) pozwól, aby pre-kompilator wykonał arkusz stylów, z węzłami w zestawie zagnieżdżonym, który stosuje style w tym arkuszu stylów tylko do odpowiedniego dokumentu. Dołącz wygenerowany arkusz stylów. Zdobyć. – sg3s