« 1 2 »
Autor Zpráva
quatzael
Profil
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
quatzael:
Môžeš tlačiť aj obsah iframe.
quatzael
Profil
_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
quatzael:
Môžeš na stránke vytvoriť skrytý iframe, dá sa to aj dynamicky v JS, a vytlačiť jeho obsah.
quatzael
Profil
_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
quatzael:
Môže buď „ťahať obsah“ z URL, alebo sa dá ten obsah aj naplniť v JS.
Chamurappi
Profil
Reaguji na quatzaela:
To chápu, ale ten iframe přece odněkud tahá obsah, ne?
Úplně stejně jako nové okno.
quatzael
Profil
_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
quatzael:
A v okne vytvorenom cez window.open ten „obsah“ vznikne ako? Rovnako môžeš ten obsah vytvoriť aj v iframe.
quatzael
Profil
_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
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
_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
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
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
_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
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
_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
quatzael:
A nestačilo by, ak by sa namiesto nového okna pred vytlačením zobrazil iframe do celého okna?
quatzael
Profil
_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
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
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
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
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
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
quatzael:
A v [#1] v processPrint je doctype aké?
Chamurappi
Profil
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
_es:
Vypadá, že žádné a jede to tam. Akorát, že tam to otevírá to blbý okno (záložku).
« 1 2 »

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0