» 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

Rekordy počasí: V Česku to ještě jde, skutečné extrémy zažívají jinde

Rekordy počasí: V Česku to ještě jde, skutečné extrémy zažívají jinde

** Teplotní extrémy dokážou překvapit. Seznamte se s rekordy v Česku i ve světě ** Rekordní hodnoty jsou mnohdy až k neuvěření ** Zjistěte, kdy ke bylo největší horko, zima, déšť či vítr

Karel Kilián | 7

Nechcete platit za Total Commander? Těmito bezplatnými programy ho můžete nahradit

Nechcete platit za Total Commander? Těmito bezplatnými programy ho můžete nahradit

** Total Commander je na Windows takřka legendou ** Licence však stojí více než tisíc korun ** Našli jsme pro vás deset alternativ dostupných zdarma

Karel Kilián | 121

Šéf amerického Red Hatu: Odpojte Brno od internetu a zhroutíme se

Šéf amerického Red Hatu: Odpojte Brno od internetu a zhroutíme se

** V Česku najdete hromadu skvělých vývojářů ** Mnozí z nich přispívají do open-source ** Třeba v brněnském Red Hatu

Jakub Čížek | 51

Google ADT-2: Miniaturní krabička s Android TV 8.0, kterou si nikdy nekoupíte

Google ADT-2: Miniaturní krabička s Android TV 8.0, kterou si nikdy nekoupíte

** Dlouho se nevědělo, co to přesně má být ** Pak se s krabičkou Google pochlubil na I/O ** Do „Chromecastu“ vtěsnal celý Android TV

Jakub Čížek | 22

PrusaLab a FutLab: Praha se dočkala špičkových komunitních dílen pro hackery

PrusaLab a FutLab: Praha se dočkala špičkových komunitních dílen pro hackery

** Nejprve svoji velkou dílnu otevřelo Brno ** Letos se přidala i Praha ** Nabízí malé 3D tiskárny i velké průmyslové stroje

Jakub Čížek | 11


Aktuální číslo časopisu Computer

Kdy necháme řídit chytrá auta?

6 Wi-Fi Mesh systémů ve velkém testu

Srovnali jsme 7 sportovních kamer

Znáte pravidla pro létání s drony?