Want to win a PS4? Go Premium and enter to win our High-Tech Treats giveaway. Enter to Win


Splitting print job between multiple printers.

Posted on 2001-06-21
Medium Priority
Last Modified: 2010-05-02
Within my VB app, I need the ability to split large print jobs between multiple printers to print simultaneously.

Any suggestions?
Question by:gcraig
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 3
  • 2
  • 2
  • +1

Expert Comment

ID: 6216273
Just watching.  very verY veRY vERY VERY good question.

LVL 11

Expert Comment

ID: 6216384
you can setup an array of print jobs (or pages in a print job depending on what your app does)

lets say 3 printers and 10 print jobs

array printjobs (10)
array printers (3) 'each element with printer name
then cycle that array


for n=0 to ubound(printjobs())
print printjob(n) on printer p 'i invented this syntax :)
                                ' because you are not
                                'telling us how you are
if p=ubound(printers()) then p=0

clear your array and asign new print jobs to the begining

... or something like that, never done that and this is just a comment, but it should give you an idea.

just need to asign each new print job to a new array element.

Expert Comment

ID: 6216390
I think he is wanting to take say a 5000 page report and print 1-1000 on printer 1 1001-2000 on printer 2 and 2001- 5000 on printer 3.

If anybody has a fairly easy way of doing this in access I would be willing to post points for it as well.  

Independent Software Vendors: We Want Your Opinion

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

LVL 17

Expert Comment

ID: 6216406
Here are two simple ways:

1) The simple answer is to open the data required in known order and start printing from different starting points. Create a batch file with multiple lines starting your report.exe with a command line.


Report.EXE A, GZZZZZZ, PrinterName1
Report.EXE H, PZZZZZZ, PrinterName2
Report.EXE Q, TZZZZZZ, PrinterName3

or for numeric keys:

Report.EXE 0, 15000, PrinterName1
Report.EXE 15001, 30000, PrinterName2

If the data does not have a unique primary key or numeric identity then you may have to loop through the data inthe required order and create a sequential identity.

Before the job starts running find the requested printer:

dim pr as printer
set pr=nothing
for each pr in printers
    if pr.devicename=requestedprinter then
        set printer=pr
        exit for
    end if

' handle invalid printer name
if pr is nothing then
    msgbox "Invalid printer"
end if

2) Method 2 - In your page headings add 1 to a currentbatchpage counter.  When the currentbatchpage>100 then swap to the next printer:

Const PagesInBatch=100


If currentbatchpage>PagesInBatch then
    SetUpNextPrinter ' a sub to Set Printer=Next printer device.
end if

Ths method won't work on windows 95 or 98 clients as they are only allow a maximum of 100 pending print jobs.  So in this case you must set PagesInBatch=TotalPagesRequired/90.

LVL 17

Expert Comment

ID: 6216424
Furthermore, when pinting more than 2000 print jobs in any day you may start getting GPF's in SPOOL32.DLL.  If this is the case configure the printer drivers to start printing after the last page has printed and using RAW spool format and not EMF.

LVL 11

Expert Comment

ID: 6216507
exactly you send your print request with parameters, if you can know the aproximate total page count you can divide your printing (more or less what i posted before but instead of using an array of print jobs, you can use each elemnt of the array as parameters to pass (range of pages))

Author Comment

ID: 6218067
Seems like I wasn't clear enough in my description, but abaldwin got the idea. It's a flat file of data which may contain between 15,000 and 50,000 pages. I don't have any code yet, still in the analysis and design stage.

I will be trying both suggestions (arana and inthedark). I don't know what effect switching printers within the code will have on the print queue of each printer.

Thanks for the suggestions, any further suggestions is still appreciated.
LVL 17

Accepted Solution

inthedark earned 300 total points
ID: 6219525
Switching printers within the same print jobs works well.  You get one queue entry generated each time you switch.

But for large print jobs it is essential that each document has a unique key or numeric record on it so that if a batch gets screwed you can re-print from any given range of records.

If you are creating financial reports or audit lists which need to print totals you have to be able to allow re-print of any range of pages but still handle the totals.  But nowadays only mailing/letters are printed in large numbers as accounting records are normally printed to a CD.

If you haven't started this job yet I suggest that you create a spec for printing all output to a file which can the be interpreted  instead of using direct print commands (like PDF for example).  In this manner you can reprint/print preview/export from your saved spool image as required. The other advantage of using this approach is that you can generated custom formats e.g. Microsoft Word documents which can be placed on a CDROM and sent to a printing specialist.

For example instead of:


Use your own printer driver class:

Dim Pr as new yourPrinterClass




Featured Post

Tech or Treat! - Giveaway

Submit an article about your scariest tech experience—and the solution—and you’ll be automatically entered to win one of 4 fantastic tech gadgets.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Most everyone who has done any programming in VB6 knows that you can do something in code like Debug.Print MyVar and that when the program runs from the IDE, the value of MyVar will be displayed in the Immediate Window. Less well known is Debug.Asse…
Enums (shorthand for ‘enumerations’) are not often used by programmers but they can be quite valuable when they are.  What are they? An Enum is just a type of variable like a string or an Integer, but in this case one that you create that contains…
Get people started with the utilization of class modules. Class modules can be a powerful tool in Microsoft Access. They allow you to create self-contained objects that encapsulate functionality. They can easily hide the complexity of a process from…
This lesson covers basic error handling code in Microsoft Excel using VBA. This is the first lesson in a 3-part series that uses code to loop through an Excel spreadsheet in VBA and then fix errors, taking advantage of error handling code. This l…
Suggested Courses

636 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question