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.
Forse potreste prerenderlo in pdf o xps ans contate semplicemente le pagine del documento. – TGlatzer
@ 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
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