2013-05-08 10 views
7

TLDR Wie kann man die Anzahl der Seiten, die gedruckt werden müssen, effizient bestimmen?Effiziente Methode zum Zählen der Anzahl der zu druckenden Seiten?

** Nur eine Anmerkung: Ich habe klugeramas Antwort als die Antwort auf meine Frage markiert. Ich bin immer noch offen für andere Vorschläge!

Derzeit habe ich eine Anwendung in der Produktion, die Rechnungen druckt. Der Druck selbst ist kein Problem: Kundeninformationen, Rechnungsdetails usw. werden so gedruckt, wie sie sein sollten. Benutzer beschweren sich jedoch über die Zeit, die meine Software benötigt, um den Druckauftrag an den Drucker zu senden.

Im Moment habe ich eine ziemlich ineffiziente Art zu drucken implementiert. Um zu wissen, wie viele Seiten ich drucken muss, führe ich einen "Trockenlauf" des Druckauftrags durch und annulliere ihn, bevor er an den Drucker gesendet wird. Dann zähle ich die Anzahl der Seiten, die der Druckauftrag enthält, und füge diese Informationen dem Druckauftrag hinzu, der tatsächlich an den Drucker gesendet wird. Um dies zu tun, missbrauche ich die Methode PrintDocument.PrintPage. Danach kann ich "Seite 1/2 - Seite 2/2" usw. drucken.

Ich denke gerade darüber nach, dies anders zu handhaben. Ich weiß, welche Ränder ich in einer Seite habe, wie die Kopfzeile und die Fußzeile. Ergo, der Abstand zwischen Kopf- und Fußzeile ist der verfügbare Platz zum Drucken von Artikelinformationen (Name, Preis usw.). Wenn ich die Höhe der Zeichenfolge (unter Verwendung Graphics.MeasureString) berechnen, kann ich feststellen, wenn die Artikel mehr Platz auf einer Seite einnehmen, die zum Drucken verfügbar ist.

Früher konnte der Druckvorgang bis zu einer Minute dauern, bevor er tatsächlich an den Drucker gesendet wurde (berücksichtigt wurden die Clients, die die Software ausführen, sind nicht die schnellsten). Ich habe diese Methode implementiert, und das Drucken dauert jetzt ungefähr 5-10 Sekunden. Ich frage mich jedoch, ob dies der richtige Weg ist. Ich kann mir nicht vorstellen, dass ich der einzige bin, der sich mit diesem Thema beschäftigt; wie gehst du damit um?

Ich bin auch offen für völlig andere Ansätze.

+0

Vielleicht könnten Sie es in PDF oder XPS vorrender und nur zählen Sie die Seiten des Dokuments. – TGlatzer

+0

@ Grumbler85 Das wäre eine Option, aber das Generieren des PDF/XPS würde wahrscheinlich genauso viel Zeit in Anspruch nehmen wie das Ausführen eines Druckjobs. Ich habe Zweifel an Ihrer Herangehensweise, aber ich werde es mir merken. – Stefan

+0

Da die meisten Drucker heute PDF und XPs direkt drucken können gibt es eine Chance, dass Sie nicht viel Zeit verlieren ... – TGlatzer

Antwort

0

Was Sie tun, klingt wie der Weg zu gehen. Aber ...

Sie könnten stattdessen nach XML ausgeben und XSLT verwenden, um die Ausgabe zu stylen, die die Seitennummerierung für Sie übernimmt. Beachten Sie, dass dies wahrscheinlich einen erheblichen Refactoring-Aufwand erfordern würde. Je nach Situation ist dies wahrscheinlich nicht durchführbar, aber es ist eine Option.

Es würde auch einige potenzielle Flexibilität auf der Straße bieten, da es einen modularen Ansatz bietet. Dies würde es Ihnen ermöglichen, andere Ausgabeoptionen wie HTML & PDF einfacher bereitzustellen. Es kann auch "Druckvorschau" erleichtern.

+0

Gute Eins. Ich plane ein Webportal, das Kunden die Möglichkeit bietet, sich einzuloggen und Rechnungen anzusehen/herunterzuladen. Dies würde eine einfache Möglichkeit bieten, solche Optionen zu implementieren: Meine eigene Antwort würde einige Arbeit erfordern, um die Rechnungen auf einer Website zu drucken, während Ihre Option wahrscheinlich eine einfache Möglichkeit bieten würde, solche Funktionalitäten auf einer Website zu implementieren. Ich werde Ihre Antwort noch nicht als Antwort auf meine Frage markieren, ich bin neugierig, was andere darüber denken. – Stefan

Verwandte Themen