Autor Zpráva
polonium
Profil
Ahojte,

řeším menší problémek, řekněme, že mám stránku a na ní odkaz, kterým bych chtěl poslat do tisku obsah, který se za tímto linkem skrývá. Ten obsah může být cokoliv. Pdf, html, csv...

Řešíli jste někdy stejný problém?
_es
Profil
polonium:
Takými funkciami prehliadače nedisponujú. Môžeš vyvolať dialóg na vytlačenie aktuálnej stánky: developer.mozilla.org/en-US/docs/Web/API/window.print.
Petr ZZZ
Profil
Ohledně tisku mě napadají dvě běžná řešení:
1) Odkaz na jinou stránku či dokument – např. dokument ve formátu PDF, nebo (v internetovém prostředí méně vhodné formáty) Word, Excel atp.
2) přímo v hlavičce konkrétní stránky rozlišovat dvoje styly:
<link rel="stylesheet" type="text/css" media="screen, projection" href="prohlizec.css">
<link rel="stylesheet" type="text/css" media="print" href="tisk.css">
U obou variant však uživatel musí tisknout přes nabídku prohlížeče. Nemyslím si, že lze dosáhnout toho, aby se mu něco vytisklo bez jeho vědomí.
Str4wberry
Profil
Nemyslím si, že lze dosáhnout toho, aby se mu něco vytisklo bez jeho vědomí.

Přímo něco vytisknout snad možné není, ale vyvolat JavaScriptem na HTML stránce dialog tisku problém není.
_es
Profil
Str4wberry:
Ale polonium chcel tlačiť „čokoľvek“ a tlačiť hentak niečo iné ako HTML stránku asi bude problém. Trebárs aj PDF sa môže v rôznych prehliadačoch pri rôznych nastaveniach otvoriť/zobraziť rôzne.
polonium
Profil
Mno doufal jsem, že existuje způsob dát do tisku to co by se zobrazilo po kliknutí na odkaz. Ještě mě napadlo, zda by to nešlo udělat javascriptem, jestli neexistuje způsob jak tomu podstrčit úplně jiný obsah.


[#2] _es Moc ti dík, trochu víc jsem ty stránky prošel a našel tohle: https://developer.mozilla.org/en-US/docs/Printing#Print_an_external_page_without_opening_it

Trochu to upravím a bude to fungovat :)
_es
Profil
polonium:
zda by to nešlo udělat javascriptem
O tom je predsa odkaz v [#2] a ukážka v [#4]. Môžeš vyvolať dialóg na vytlačenie aktuálnej (HTML) stránky. Tou stránkou však môže byť aj (HTML) obsah iframe či frame.

trochu víc jsem ty stránky prošel a našel tohle
Akurát to nemusí celkom fungovať v každom prehliadači.
Petr ZZZ
Profil
polonium:
Zkus si položit otázku, jak by se to dalo zneužívat, nebo jak by ses asi tvářil, když klikneš na odkaz a najednou ti začne tisknout tiskárna a navíc tiskne kdovíco (třeba padesátistránkový dokument a na každé stránce jiným písmem stokrát Ty hovado!). — Smím se zeptat, co to vlastně vymýšlíš? To má být nějaká zlomyslnost, nebo co to zkoušíš vykutit?

Můžeš na stránce třeba kuku.html napsat odkaz <a href="kuku.pdf">tisková verze</a>, nebo můžeš na stránce kuku.html umístit odkaz na bubu.pdf. Vždy jsi ale závislý na tom, zda uživatel ve svém prohlížeči klikne na nabídku "tisknout" a nezabráníš tomu, aby si předtím mohl prohlédnout, co opravdu tiskne.

Dodatek: Jestli to řešení v #6 opravdu funguje tak, že to tiskne, aniž by to musel uživatel extra odsouhlasit, tak to nepovažuji za přednost, ale za docela solidní nedostatek prohlížeče, který něco takového umožní.
_es
Profil
Petr ZZZ:
že to tiskne, aniž by to musel uživatel extra odsouhlasit
Nie, funguje to tak, že to vyvolá dialóg na tlačenie - v tom treba tlačenie odsúhlasiť - ako keby sa kliklo na ponuku v hlavnom menu prehliadača „Tlačiť“.
polonium
Profil
V prvním příspěvku jsem se nevyjádřil úplně přesně. Ovšem,/ že mi jde o to abych vyvolal nabídku pro tisk, ale jde o to, co to vlasně bude tisknout. Pokud použiju window.print() bude to obsah aktuální stránky. Ale mě se jedná o tisk toho co by se mělo zobrazit až po kliknutí na ten odkaz.

Píšu backend pro eshop, kde potřebuju odkaz pro vytištění nějakého dokladu. Ať už to bude pdf nebo html. Prostě se mi jedná o zjednodušení cesty k tisku dokladu.

Vyzkouším to co jsem psal zde [#6] a dám vědět zda to vyšlo i pro pdf.
polonium
Profil
Tak ten iframe pro tisk funguje, ale...

1. jen pro html obsah nebo plain/text to pdf se mi rozjet nepovedlo
2. pred zavolanim funkce closePrint je potreba nastavit delay par ms protoze jinak si nestihne nacist obsah toho iframu a zustane viset

Zkousel jsme to jen ve ff, ale tipnul bych ze ani IE7+ by s tim nemel mit problem :)
margin
Profil *
Zkoušel jsi ve Firefoxu, který umí zobrazit PDF nativně? FF 19 a novější ve výchozím nastavení zobrazují PDF nativně.
_es
Profil
polonium:
jinak si nestihne nacist obsah toho iframu a zustane viset
Pre iframe môžeš využiť udalosť onload.
polonium
Profil
margin:
FF mám v23

_es:
Ano, udalost onload zavola fci setPrint, kde nastavim iframu callback onafterprint = closePrint. Callback onafterprint se volá ve chvíli, kdy potvrdíte tisk stránky. A v tu samou chvíli se začne prohlížeč zajímat o obsah iframu znovu.


function closePrint () {
    document.body.removeChild(document.__container__);
}

function setPrint () {
    document.__container__ = this;
    this.contentWindow.onbeforeunload = closePrint;
    this.contentWindow.onafterprint = function () {
        setTimeout(closePrint, 500);
    };
    this.contentWindow.print();
}

/**
 * TODO: vyskouset inframe > object pro pdf
 */
function printPage (sURL) {
    var oHiddFrame = document.createElement("iframe");
    oHiddFrame.onload = setPrint;
    oHiddFrame.style.visibility = "hidden";
    oHiddFrame.style.position = "fixed";
    oHiddFrame.style.right = "0";
    oHiddFrame.style.bottom = "0";
    oHiddFrame.src = sURL;
    document.body.appendChild(oHiddFrame);
}

<a href="" onclick="event.preventDefault();printPage(this.href);">tisk</a>
_es
Profil
polonium:
Nie všetky prehliadače podporujú tie udalosti: developer.mozilla.org/en-US/docs/Web/API/window.onafterprint#Browser_compatibility
polonium
Profil
Kdyz to vezmu kolem a kolem, tak to uplne nevadi :) Protoze ten iframe bude na te strance schovanej a ta metoda closePrint by se teoreticky volat nemusela vzhledem k tomu, ze obsahem iframu bude jen html s nejakym dokladem. V tomhle pripade to stranku vlastne skoro vubec nezatizi :)

Dekuju za pripominky myslim, ze toto tema muzeme uzavrit.
Chamurappi
Profil
Reaguji na poloniuma:
Metoda event.preventDefault() nefunguje v některých prohlížečích. Kdybys nepoužil odkaz (který stejně nemá nikam odkazovat), nemusel bys ji vůbec volat.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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