» Poradna » Programy

Tisk v C#.NET

 |   | 

Ahoj a dobry den,
mam problem s tiskem v C#. tiskne mi to pouze prvni stranku. pokud dojde stranka na konec, nastavim HasMorePages na true. Pote vidim ze mi jede tisk druhy stranky (Pege 2 of document, page 3 of document atd.) a kdyz to dojede na konec (page 5 of document), tak to spadne s hlaskou "System nemuze nalezt uvedeny soubor". Nevite co by to mohlo byt za chybu??
kdyz zakazu HasMorePages, tak to normalne v pohode bez chyby vytiskne jenom jednu stranku. Prosim jestli mate nejakou myslenku, vdyztak bych pak napsal kodik..
Diky moc  

Odpovědi na otázku

 |   | 

A jakmile tiskneš poslední stránku nastavíš zpět HasMorePages na false ? Nezapomněl jsi na to?

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

jo jo nastavuju to na false a jeste mi to taky spadne, kdyz dam tisk normalne se to vytiskne a pak kdyz chci znova tisknout tak to spadne s tou samou hlaskou. Musim vzdycky zavrit ten formular odkud ten tisk vyvolavam. Nevis kde by mohl byt problem????? Diky Martin http://www.zive.cz/Client.Images/smileys/3.gif"> 

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

Můžeš konkretizovat, co tiskneš? Nějaký dokument? Každá stránka má stejný formát?

Voláš tisk nějak takhle?
(Pozn.: PrintClass je potomek třídy System.Drawing.Printing.PrintDocument a v něm je definován vlastní tisk jednotlivé stránky) :

PrintClass pc = new PrintClass();
pc.DocumentName = "Bla Bla";
pc.PrinterSettings.Copies = numOfCopy;
pc.Print();
pc.Dispose();
pc = null;

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

ahoj, tak tisknu to nejak takhle...tisknu data z DB
printDoc =
new PrintDocument();

printDoc.PrintPage += new PrintPageEventHandler(printDoc_PrintPage);
printDoc.Print();
 
kde ve vyvolane udalosti PrintPageEventHandler provadim dotaz do db a tisk, asi takhle:
private
void printDoc_PrintPage(Object sender , PrintPageEventArgs e)
{
for
(int j = 0; j < pocet_otazek; j++)
 {
 
}
}

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

ahoj, tak tisknu to nejak takhle...tisknu data z DB
printDoc =
new PrintDocument();

printDoc.PrintPage += new PrintPageEventHandler(printDoc_PrintPage);
printDoc.Print();
 
kde ve vyvolane udalosti PrintPageEventHandler provadim dotaz do db a tisk, asi takhle:
private
void printDoc_PrintPage(Object sender , PrintPageEventArgs e)
{
for
(int j = 0; j < pocet_otazek; j++)
  {
 
}
}

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

ahoj, tak tisknu to nejak takhle...tisknu data z DB
printDoc =
new PrintDocument();

printDoc.PrintPage += new PrintPageEventHandler(printDoc_PrintPage);
printDoc.Print();
 
kde ve vyvolane udalosti PrintPageEventHandler provadim dotaz do db a tisk, asi takhle:
private
void printDoc_PrintPage(Object sender , PrintPageEventArgs e)
{
for
(int j = 0; j < pocet_otazek; j++)
   {
 
}
}

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

ahoj, tak tisknu to nejak takhle...tisknu data z DB
printDoc =
new PrintDocument();

printDoc.PrintPage += new PrintPageEventHandler(printDoc_PrintPage);
printDoc.Print();
 
kde ve vyvolane udalosti PrintPageEventHandler provadim dotaz do db a tisk, asi takhle:
private
void printDoc_PrintPage(Object sender , PrintPageEventArgs e)
{
for
(int j = 0; j < pocet_otazek; j++)
    {
 
}
}

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

ahoj,
tak tisknu to asi takhle nejak :) , jinak provadim tisk dat z DB
printDoc =
new PrintDocument();

printDoc.PrintPage +=
new PrintPageEventHandler(printDoc_PrintPage);
printDoc.Print();
 
kde udalost PrintPageEventHandler spousti toto, kde provadim dotaz do db a tisk
private
void printDoc_PrintPage(Object sender , PrintPageEventArgs e)
{
for
(int j = 0; j < pocet_otazek; j++)
{
tady provedu dotaz a tisk pomoci
e.Graphics.DrawString

}

//a tady provedu test
if (okraj >= e.MarginBounds.Bottom)
{
e.HasMorePages =
true;
}
else
{
e.HasMorePages =
false;
}

}
cely to je v try catch, a nakonci ve finally provedu HasMorePages na false
 
ted uz mi to teda chybu nehlasi zadnou ani nevim jak jsem to udelal, ale kazdopadne me to tiskne pouze prvni stranku. Cilem je ze dokad tiskne at je na prvni strance a jakmile je okraj vetsi nez okraj stranky tak vzdycky na novou stranku tisknout. ten okraj samozrejme inkrementuju.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

Viděl bych to, že chyba bude někde v této části:
...
for (int j = 0; j < pocet_otazek; j++)
{
tady provedu dotaz a tisk pomoci
e.Graphics.DrawString
}
//a tady provedu test
if (okraj >= e.MarginBounds.Bottom)
...
Nevím, jak přesně máš udělaný tisk, ale myslím si, že pokud tiskneš něco jako tabulku, by bylo vhodné testovat, zda nebylo dosaženo konce stránky po tisku každého řádku.
To znamená tisk jednotlivého řádku uzavřít do příkazu

while(/* tady testovat podmínky: negace(je konec sestavy?) nebo(||) (negace)je konec stránky? */){
...
// Tady bude tisk jednotlivého řádku ...
}
...
// Dál pokračujeme testem, zda bude další stránka
if (/* je konec sestavy? */) {
e.HasMorePages = false;
} else {
e.HasMorePages = true;
}

Moje odpověď je taková schématická, pokud Ti to není jasné hoď se kousek kódu procedury printDoc_PrintPage.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

Ahoj,
dekuju moc za radu. Uz to funguje jak jsi napsal. problem byl v tom, ze se mi to drzelo v tom for cyklu a pak to na raz tisklo...ten while to vcas pusti a nastavi na true HasMorePages :) super...
Jeste bych mel jeden dotaz, nevedel by jsi, jak udelat to kdyz mam dlouhy radek, tak se mi to orizne, a neodrazdkuje se to u toho tisku. takze je tam pulka :(
diky Martin

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

Pokud bys chtěl psát obsluhu dlouhého řádku v tiskové proceduře, myslím si, že by to bylo hodně komplikované (např. představ si, že tiskneš na poslední řádek na stránce a zjistíš, že text musíš rozdělit na dva, nebo víc řádků).
Proto si myslím, že bys měl nejjednodušší si text k tisku předformátovat(tzn. zalomit řádky apod.) ještě před vlastním tiskem (do nějaké "dočasného souboru") a pak už se se správnou délkou řádku nemusíš v tiskové proceduře zabývat.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

pardon...nevim proc se mi to tam tolikrat vlozilo http://www.zive.cz/Client.Images/smileys/8.gif">

Souhlasím  |  Nesouhlasím  |  Odpovědět




Určitě si přečtěte

Jak funguje největší akumulátor v Česku: podívejte se do elektrárny Dlouhé Stráně

Jak funguje největší akumulátor v Česku: podívejte se do elektrárny Dlouhé Stráně

** Přečerpávací vodní elektrárna Dlouhé stráně je obdivuhodné technické dílo ** Stejná turbína vyrábí elektřinu i tlačí vodu zpět do horního jezera ** Strojovna elektrárny je zabudována v podzemí

David Polesný | 34

Modelářský zázrak: Maketa raketoplánu Columbia, která létá jako skutečná raketa

Modelářský zázrak: Maketa raketoplánu Columbia, která létá jako skutečná raketa

** Model raketoplánu Columbia od českého konstruktéra umí i létat ** Obdivuhodný model si vzal 1600 hodin práce ** Podívejte se na fotografie ze stavby a prvního letu

Karel Jeřábek | 20

V doupěti hackerů na brněnské FIT: Ukázali nám útoky na Bluetooth i vlastní chytré krabičky

V doupěti hackerů na brněnské FIT: Ukázali nám útoky na Bluetooth i vlastní chytré krabičky

** Internet je plný malwaru, to už dnes ví každý ** Víte ale, že lze útočit třeba i na Bluetooth? ** Navštívil jsem hackery z brněnského FITu

Jakub Čížek | 1

Byli tam! Důkazy o přistání na Měsíci, Lunochody i čínská sonda jsou vidět z vesmíru

Byli tam! Důkazy o přistání na Měsíci, Lunochody i čínská sonda jsou vidět z vesmíru

** Sonda LRO pořídila z oběžné dráhy Měsíce zajímavé snímky ** Jsou na nich vidět artefakty všech misí programu Apolla, které přistály na povrchu Měsíce ** Jde například o části lunárních modulů, rovery a dokonce i vlajky

Petr Kubala | 65

Přichází revoluce v oblasti deodorantů!

Přichází revoluce v oblasti deodorantů!

** Britští vědci odhalili uzlový bod procesů, kterými vzniká nejpronikavější složka lidského tělesného pachu ** Nové generaci deodorantů by mohl dodat na síle cílený zásah do života malé skupinky kožních bakterií ** Podle některých vědců by to ale znamenalo zpřetrhat pouta mezi člověkem a mikrobem

Jaroslav Petr | 33

Jak a proč používat alternativní DNS: Zrychlí internet a odblokuje weby

Jak a proč používat alternativní DNS: Zrychlí internet a odblokuje weby

** Alternativní DNS servery mohou zpříjemnit surfování na internetu ** Existuje několik ověřených alternativ, nejen známé DNS od Googlu ** Alternativní DNS však mají i své nevýhody, pozor na ně

Petr Březina | 33


Jízdní řády Bileto
Aktuální číslo časopisu Computer

Megatest: 13 grafických karet

Srovnání 7 dokovacích stanic s USB-C

Jak na perfektní noční fotografie

Kvalitní zdroje informací pro sebevzdělávání