» Poradna » Programy

Tisk v C#.NET

Odpovědět  |  Zobrazit bez stromu  |  Upozornit redakci  |  nových odpovědí: 12/12
 |   |   |  [81.27.205.---]

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

 |   |   |  [81.95.107.---]

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

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |   |  [81.27.205.---]

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
 |   |   |  [81.95.107.---]

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
 |   |   |  [81.27.205.---]

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
 |   |   |  [81.27.205.---]

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
 |   |   |  [81.27.205.---]

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
 |   |   |  [81.27.205.---]

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
 |   |   |  [81.27.205.---]

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
 |   |   |  [212.47.30.---]

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
 |   |   |  [81.27.205.---]

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
 |   |   |  [212.47.30.---]

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
 |   |   |  [81.27.205.---]

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


Čína vyvíjí ohromná hejna tisícovek malých dronů

Čína vyvíjí ohromná hejna tisícovek malých dronů

** Vývoj hejnové inteligence pro drony v Číně nabírá na rychlosti ** Velká hejna dronů mají podle odborníků značný potenciál pro vojenské využití i pro bezpečnostní aplikace ** Číňané se navíc s drony neomezuje jenom na zemský povrch a okolí, ale poohlížejí se i po vesmíru

11.  1.  2018 | Stanislav Mihulka | 3

Genetika a příjmení: Unikátní možnost získat test Y-DNA zdarma a dozvědět se o svých předcích

Genetika a příjmení: Unikátní možnost získat test Y-DNA zdarma a dozvědět se o svých předcích

** Projekt Genetika a příjmení hledá shody mezi osobami se stejným příjmením ** Využívá k tomu testování DNA na chromozomu Y ** Výsledky testu můžete účastí v projektu získat zdarma

11.  1.  2018 | Marek Lutonský | 3


Aktuální číslo časopisu Computer

Zachraňte nefunkční Windows

Jak nakupovat a prodávat kryptoměny

Otestovali jsme konvertibilní notebooky

Velký test 14 herních myší