2013-05-08 13 views
7

TLDR Come è possibile determinare in modo efficiente la quantità di pagine che devono essere stampate?Modo efficiente per contare il numero di pagine da stampare?

** Solo una nota: ho contrassegnato la risposta di klugerama come la risposta alla mia domanda. Sono comunque aperto per altri suggerimenti!

Attualmente, ho un'applicazione in produzione che stampa fatture. La stampa non è un problema: le informazioni sui clienti, i dettagli delle fatture, ecc. Vengono stampati come dovrebbero. Tuttavia, gli utenti si lamentano del tempo necessario al mio software per inviare il lavoro di stampa alla stampante.

Al momento, ho implementato un modo piuttosto inefficiente di stampare. Per sapere quante pagine devo stampare, eseguo un 'dry run' del lavoro di stampa e lo annullo prima che venga inviato alla stampante. Quindi conto il numero di pagine che contiene il lavoro di stampa e aggiungo quelle informazioni al lavoro di stampa che effettivamente viene inviato alla stampante. Per fare ciò, "abusano" del metodo PrintDocument.PrintPage. Dopo averlo fatto, posso stampare "Pagina 1/2 - Pagina 2/2" ecc.

Attualmente sto pensando di gestirlo in un modo diverso. Conosco i margini che ho in una pagina, come l'intestazione e il piè di pagina. Ergo, lo spazio tra intestazione e piè di pagina è lo spazio disponibile per stampare le informazioni sugli articoli (nome, prezzo ecc.). Se calcolassi l'altezza della stringa (usando Graphics.MeasureString), posso dire quando gli articoli occupano più spazio su una pagina che è disponibile per la stampa.

In precedenza, la stampa poteva richiedere fino a un minuto prima di essere effettivamente inviata alla stampante (preso in considerazione che i client che eseguono il software non sono i più veloci in circolazione). Ho implementato questo metodo e la stampa richiede circa 5-10 secondi. Tuttavia, mi chiedo se questa è la strada da percorrere. Non riesco a immaginare di essere l'unico a occuparmi di questo problema; come lo gestisci?

Sono aperto anche a completamente diversi approcci.

+0

Forse potreste prerenderlo in pdf o xps ans contate semplicemente le pagine del documento. – TGlatzer

+0

@ Grumbler85 Questa sarebbe un'opzione, ma la generazione del PDF/XPS probabilmente richiederebbe tutto il tempo necessario per eseguire una prova a secco del lavoro di stampa. Ho i miei dubbi sul tuo approccio, ma lo terrò a mente. – Stefan

+0

Poiché la maggior parte delle stampanti oggi è in grado di stampare direttamente pdf e XP, c'è una possibilità, che non si perde molto tempo ... – TGlatzer

risposta

0

quello che state facendo suona come la strada da percorrere. Ma ...

Si potrebbe invece inviare a XML e usare XSLT per definire l'output, che gestirà l'impaginazione per voi. Si noti che questo probabilmente richiederà uno sforzo di refactoring piuttosto consistente, quindi a seconda della situazione è probabile che non sia fattibile, ma è un'opzione.

Fornirebbe anche un po 'di flessibilità potenziale lungo la strada, in quanto fornisce un approccio più modulare. Ciò ti consentirebbe di fornire più facilmente altre opzioni di output, come HTML & PDF. Può anche rendere più semplice "anteprima di stampa".

+0

Buono. Sto pianificando di progettare un portale web che offra ai clienti la possibilità di accedere e vedere/scaricare le fatture. Ciò fornirebbe un modo semplice per implementare tali opzioni: la mia risposta richiederebbe del lavoro per far stampare le fatture su un sito Web, mentre la vostra opzione probabilmente fornirebbe un modo semplice per implementare tali funzionalità in un sito web. Non ho intenzione di contrassegnare la tua risposta come la risposta alla mia domanda ancora, sono curioso di sapere cosa pensano gli altri di questo. – Stefan

Problemi correlati