Autor | Zpráva | ||
---|---|---|---|
quatzael Profil |
#1 · Zasláno: 4. 10. 2013, 00:03:29
Našel jsem tady v diskuzi odkaz na "tisk divu"
Funguje mi to celkem ok, ale docela bych uvítal, kdyby bylo možné spustit čistě jen tisk bez otevírání toho nového okna. Konkrétně mi jde o tento řádek: var printWin = window.open("","processPrint"); potřeboval bych, aby se nějak vytvořil objekt printWin bez tý funkce (metody) .open |
||
_es Profil |
#2 · Zasláno: 4. 10. 2013, 10:06:25
quatzael:
Môžeš tlačiť aj obsah iframe. |
||
quatzael Profil |
#3 · Zasláno: 4. 10. 2013, 10:21:03
_es:
To je sice hezký, jenže moje situace vypadá asi tak, že podle počtu výsledků z databáze se mi vygeneruje seznam divů a v nich patřičný obsah z těch konkrétních řádků v databázi. A u každýho výsledku chci mít možnost tisku. S tím iframem bych musel vždycky někde nějdřív vytvořit stránku a pak jí nějak zase smazat, ne? |
||
_es Profil |
#4 · Zasláno: 4. 10. 2013, 10:29:11
quatzael:
Môžeš na stránke vytvoriť skrytý iframe, dá sa to aj dynamicky v JS, a vytlačiť jeho obsah. |
||
quatzael Profil |
#5 · Zasláno: 4. 10. 2013, 10:31:17
_es:
To chápu, ale ten iframe přece odněkud tahá obsah, ne? To přece zároveň někde musím mít podstránku s tím obsahem, který chci tisknout. |
||
_es Profil |
#6 · Zasláno: 4. 10. 2013, 10:37:52
quatzael:
Môže buď „ťahať obsah“ z URL, alebo sa dá ten obsah aj naplniť v JS. |
||
Chamurappi Profil |
#7 · Zasláno: 4. 10. 2013, 10:38:39
Reaguji na quatzaela:
„To chápu, ale ten iframe přece odněkud tahá obsah, ne?“ Úplně stejně jako nové okno. |
||
quatzael Profil |
#8 · Zasláno: 4. 10. 2013, 10:48:49
_es, Chamurappi:
Takže když někdo klikne na to moje tlačítko tisk, tak by se provedla funkce, která na stránce vytvoří skrytý iframe s obsahem (bez toho, aby obsah tahal z jiné stránky) a následně ho další funkce vytiskne? A co mazání, aby tam po tisku nezůstávaly nepotřebný iframy? Dá se udělat, aby se iframe smazal, až když budou všechna data odeslána na tiskárnu? |
||
_es Profil |
#9 · Zasláno: 4. 10. 2013, 11:01:43
quatzael:
A v okne vytvorenom cez window.open ten „obsah“ vznikne ako? Rovnako môžeš ten obsah vytvoriť aj v iframe. |
||
quatzael Profil |
#10 · Zasláno: 4. 10. 2013, 11:12:04
_es:
To chápu jak do elementu vložit obsah, jen se mi zdálo, že iframe funguje pouze tak, že se u něj uvede zdroj, ze kterýho to má tahat a nejde dovnitř vkládat další divy. Ale problém je, jak potom ten iframe smazat, tak, aby se to provedlo, až po vytisknutí.. Asi pomocí callback function předpokládám. |
||
_es Profil |
#11 · Zasláno: 4. 10. 2013, 11:20:07
quatzael:
Iframe má tiež objekty window a document, rovnako ako okno vytvorené cez window.open. Okno otvorené cez window.open „mažeš“ ako? Prečo by malo tak záležať na tom zmazaní? Iframe stačí vytvoriť len jeden. |
||
quatzael Profil |
#12 · Zasláno: 4. 10. 2013, 11:55:26
_es:
„Okno otvorené cez window.open ‚mažeš‘ ako?“ Nemažu. Právě proto hledám řešení, aby tam to okno vůbec nevyskakovalo. Jinak k zavírání by mělo myslím sloužit .close, ale to mi v tom scriptu nějak nefunguje. |
||
_es Profil |
#13 · Zasláno: 4. 10. 2013, 12:04:17
quatzael:
printWin.close() nefunguje? Na otvorenie nového okna by mal byť prvý parameter "_blank" . Ak to chceš s minimálnymi úpravami, tak môžeš do window.open dať ako prvý parameter aj názov iframe.
|
||
Petr Ká Profil |
#14 · Zasláno: 4. 10. 2013, 12:12:05
Něco podobného jsem kdysi řešil tady, jen s malou upravou, ze ty data nactes z divu, ktery hned smazes (treba)
|
||
quatzael Profil |
_es:
„printWin.close() nefunguje?“ Asi ne. Má se zavírat až po tom vytisknutí, ne? Zkoušel jsem najít nějakej jQuery script. Bohužel nic oficiálního neexistuje. Jen tohle: gist.github.com/btd/2390721 - funguje (tiskne), ale ignoruje CSS aspdotnet-suresh.com/2013/08/jquery-print-div-content-with-css-using.html - taky funguje. Slibuje, že plně zohledňuje CSS, ale v reálu stejně ignoruje jqueryscript.net/other/Print-Specified-Area-Of-A-Page-PrintArea.html - tohle řešení funguje nejlíp (s defaultním nastavením - tedy přes ten iframe), celkem věrně zachová CSS, až na písmo v buňkách, kterým přiřadí barvu, která je nastavená pro body a nějak ignoruje nastavení CSS pro text v buňkách tabulky. Tedy nějak zajímavě vyhodnocuje jinak CSS. |
||
_es Profil |
quatzael:
Iframe musí mať vlastné CSS, nepreberá CSS z „okolitej“ stránky. Alebo, ak nie je problém v tom, možno treba nastaviť CSS aj špeciálne pre tlač. Lebo prehliadač bez nastavenia CSS extra len pre tlač môže mať dilemu, ako vytlačiť skrytý iframe. |
||
quatzael Profil |
#17 · Zasláno: 5. 10. 2013, 20:21:52
_es:
No a jak mu mám teda přidělit to stejný CSS z tý stránky. Já jsem myslel, že to bude dělat ta jquery funkce, když to tam víceméně slibuje. |
||
_es Profil |
#18 · Zasláno: 5. 10. 2013, 20:26:30
quatzael:
No a tlačenie okna z window.open ti funguje správne? Ak áno, možno stačí len nastaviť CSS extra pre tlač, aby to fungovalo aj cez iframe.
|
||
quatzael Profil |
#19 · Zasláno: 5. 10. 2013, 20:51:56
_es:
Vyzkoušel jsem a je to úplně stejný. (Zkoušel jsem tu variantu s popup u třetího uvedenýho řešení) Ale prve když jsem zkoušel úplně tu [#1] první variantu, tak tam bylo to CSS správně, akorát se otevíralo to nežádoucí nový okno.. |
||
_es Profil |
#20 · Zasláno: 5. 10. 2013, 21:17:37
quatzael:
A nestačilo by, ak by sa namiesto nového okna pred vytlačením zobrazil iframe do celého okna? |
||
quatzael Profil |
#21 · Zasláno: 5. 10. 2013, 21:21:38
_es:
Mě jde právě o to, aby se nic nikam nezobrazovalo. Prostě po kliknutí na moje tlačítko tisk, aby se rovnou otevřelo to Windows okno pro výběr tiskárny.. Přece to musí nějak jít.. |
||
Chamurappi Profil |
#22 · Zasláno: 5. 10. 2013, 21:30:59
Reaguji na quatzaela:
„Zkoušel jsem najít nějakej jQuery script.“ V jQuery není žádná speciální podpora pro mezioknenní/mezirámovou činnost. Když vypíšeš něco do rámu a necháš ho vytisknout, tak to funguje, ne? Prohlížeč neumí tisknout jen vybraný samostatný element, takže si musíš sám sestavit skriptem stránku tak, aby vypadala jako to, co chceš vytisknout. Jestli se má používat nějaké CSS, musíš ho tam ručně přilinkovat. Druhá možnost je vlepit do stávající stránky vlastní tiskový stylopis, který bude všechno vyjma žádaného elementu skrývat. |
||
quatzael Profil |
#23 · Zasláno: 5. 10. 2013, 21:40:22
Chamurappi:
„V jQuery není žádná speciální podpora pro mezioknenní/mezirámovou činnost.“ Uváděl jsem tady odkazy, kde se někdo amatérsky pokoušel vytvořit na to jakousi jquery nástavbu. „Prohlížeč neumí tisknout jen vybraný samostatný element, takže si musíš sám sestavit skriptem stránku tak, aby vypadala jako to, co chceš vytisknout. Jestli se má používat nějaké CSS, musíš ho tam ručně přilinkovat.“ To jsem všechno pochopil, a ten poslední script to dělá dokonce i přes ten iframe a zřejmě tam i část CSS vloží, protože tabulka vypadá prakticky stejně jako v mým divu, ze kterýho to všechno bere, až na barvu písma v některých buňkách. Místo toho používá barvu, kterou mám nadefinovanou na celý body. Možná by stačilo nějak lépe nastylovat v CSS tu tabulku, aby ten script převzal to CSS správně.. |
||
Chamurappi Profil |
#24 · Zasláno: 5. 10. 2013, 21:51:07
Reaguji na quatzaela:
„to dělá dokonce i přes ten iframe a zřejmě tam i část CSS vloží“ Jak si myslíš, že to udělá, že vloží jen část? Autor třetího řešení očividně věří na magické vlastnosti deklarace <!doctype> , že se rozhoduje, jestli vypíše Transitional :-)
Ale jinak nad tím moc nepřemýšlí, protože při sestavování kódu stránky v rámu negeneruje žádný <!doctype> .
Pokud chceš, aby stránka v rámu běžela ve standardním režimu, budeš do ní muset napsat i něco jako <!doctype html> . Více přemýšlej, méně lep. To, jak stránka v <iframe> vypadá, si můžeš prohlédnout i v prohlížeči, stačí ho neskrývat.
|
||
quatzael Profil |
#25 · Zasláno: 5. 10. 2013, 22:15:01
Chamurappi:
Co já vím jak funguje nějakej doctype? Proto taky stahuju scripty když nevím. Já všude normálně používám tohle: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="cs" lang="cs"> Je pravda, že konzole Internet Exploreru na mě někdy řve, že se jí to nelíbí, ale co já s tím? Mám tam snad dát tohle? <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> „Ale jinak nad tím moc nepřemýšlí, protože při sestavování kódu stránky v rámu negeneruje žádný <!doctype>.“ Proč myslíš, že ne? Na který script jsi se díval? Já jsem použíl ten třetí a tam je tenhle řádek: writeDoc.write( docType() + "<html>" + getHead() + getBody(ele) + "</html>" ); Což vypadá, že ho tam asi nějak vkládá, ne? Já tomu fakt nerozumím. |
||
Chamurappi Profil |
#26 · Zasláno: 5. 10. 2013, 22:25:07
Reaguji na quatzaela:
„Co já vím jak funguje nějakej doctype?“ Přepíná režimy. To bys vědět mohl, když jsem ti odkázal na článek, který to vysvětluje. Odkázal jsem na něj proto, aby sis ho přečetl, ne proto, abych měl v příspěvku krásné modré zpestření. „Proto taky stahuju scripty když nevím.“ Tak si stáhni nějaký funkční skript :-) „Já všude normálně používám tohle“ Zbytečně upovídané. Ale to nehraje roli. „Což vypadá, že ho tam asi nějak vkládá, ne?“ Díval ses, co vrací funkce docType ?
|
||
quatzael Profil |
Chamurappi:
„To bys vědět mohl, když jsem ti odkázal na článek, který to vysvětluje.“ Já jsem si to přečetl, ale nevím jak mi to přesně pomůže vyřešit ten můj problém.. „Tak si stáhni nějaký funkční skript :-)“ Kdybych o nějakým věděl, tak už to dávno udělám. Ty nějakej znáš? „Díval ses, co vrací funkce docType?“ Díval. Je tam tohle: function docType() { if ( settings.mode == modes.iframe || !settings.strict ) return ""; var standard = settings.strict == false ? " Trasitional" : ""; var dtd = settings.strict == false ? "loose" : "strict"; return '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01' + standard + '//EN" "http://www.w3.org/TR/html4/' + dtd + '.dtd">'; } A i když místo toho tam dám tohle: function docType() { return '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">'; } tak v tom není vůbec žádný rozdíl.. |
||
_es Profil |
#28 · Zasláno: 5. 10. 2013, 22:56:24
|
||
Chamurappi Profil |
#29 · Zasláno: 5. 10. 2013, 22:57:34
Reaguji na quatzaela:
„Kdybych o nějakým věděl, tak už to dávno udělám. Ty nějakej znáš?“ Nehledal jsem. A na tvém místě bych po něm nepátral, protože mi to nepřipadá jako náročné zadání a protože opravdu universální řešení by bylo mnohem krkolomnější, než nějaké ušité na míru. „tak v tom není vůbec žádný rozdíl..“ Živou ukázku nedáš? Rovnou s tím zviditelněným rámem, ať víme, jestli chyba vzniká při tisku, nebo při sestavení HTML. |
||
quatzael Profil |
#30 · Zasláno: 5. 10. 2013, 23:01:22
_es:
Vypadá, že žádné a jede to tam. Akorát, že tam to otevírá to blbý okno (záložku). |
||
Téma pokračuje na další straně.
|
0