» 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

Google Mapy vs. Mapy.cz: Které internetové mapy jsou lepší?

Google Mapy vs. Mapy.cz: Které internetové mapy jsou lepší?

** Jsou lepší mapy od Googlu, nebo ty od Seznamu? ** Má být mapa především tradiční mapou, nebo spíše asistentem? ** Vyslechněte si argumenty a hlasujte, na jaké straně jste vy

Jakub Čížek, Vladislav Kluska | 72

Notebook do 10 000 korun: Co koupit a čemu se raději vyhnout

Notebook do 10 000 korun: Co koupit a čemu se raději vyhnout

** Do deseti tisíc korun lze dnes koupit slušné notebooky ** V nabídce ale převládají zastaralé a pomalé modely ** Poradíme, jak dobře vybrat i s omezeným rozpočtem

David Polesný | 55

Nejlepší hardware: Skládáme nenáročnou sestavu i extrém na hry

Nejlepší hardware: Skládáme nenáročnou sestavu i extrém na hry

** Poradíme, jaký se teď vyplatí koupit hardware ** Procesory, desky, paměti, grafické karty... je z čeho vybírat ** Počítač ale nemusíte skládat, ukážeme i výhodné hotové počítače

Stanislav Janů | 7

ELONOVINKY: Tesla brzy začne prodávat solární tašky. Budou drahé, ale pěkné

ELONOVINKY: Tesla brzy začne prodávat solární tašky. Budou drahé, ale pěkné

** Tesla začne prodávat solární střešní tašky, které představila před dvěma lety ** Výroba začne v první polovině příštího roku ** Tašky budou odolné, dostanou doživotní záruku a na přání i vyhřívání

Petr Melechin, Karel Dlabač | 24

Portál občana už funguje. Na státní web vypadá až překvapivě použitelně

Portál občana už funguje. Na státní web vypadá až překvapivě použitelně

** Portál občana už funguje, vyřídíte na něm první požadavky ** Funkce se budou postupně rozšiřovat ** Web je docela moderní a přehledný

David Polesný | 66

AMD vs. Intel+Nvidia: Stejný herní notebook, stejná cena. Který je lepší?

AMD vs. Intel+Nvidia: Stejný herní notebook, stejná cena. Který je lepší?

** Acer Predator Helios 500 je poctivý velký herní notebook ** platforma AMD zdatně konkuruje tandemu Intel+Nvidia ** Srovnání nevyznívá jednoznačně

Tomáš Holčík | 35



Aktuální číslo časopisu Computer

Nejlepší programy pro úpravu fotek zdarma

Externí disky pro zálohu dat

Velký test: herní notebooky

Srovnání 12 batohů