Reducing print start delays for large portable document format print jobs

Systems and methods are provided for dynamically splitting print jobs to reduce the time taken to start printing those jobs. One embodiment is a print server that includes an interface that receives a Portable Document Format (PDF) print job. The print server also includes a job controller that determines a size of the PDF print job, and estimates a delay to start marking a first page of the PDF print job. In response to determining that the delay exceeds a threshold, the job controller splits the PDF print job into segments by: generating a first PDF segment that has a delay to start marking the first page that is less than the threshold, and includes a PDF page tree; transmitting the first PDF segment to the printer; generating an additional PDF segment that includes an additional PDF page tree; and transmitting the additional PDF segment to the printer.

FIELD OF THE INVENTION

The invention relates to the field of printing, and in particular, to Portable Document Format (PDF) print jobs.

BACKGROUND

Entities with substantial printing demands typically use a production printer. A production printer is a high-speed printer used for volume printing (e.g., one hundred pages per minute or more). Production printers include continuous-forms printers that print on a web of print media stored on a large roll.

A production printer typically includes a localized print controller that controls the overall operation of the printer, and a print engine (sometimes referred to as an “imaging engine” or a “marking engine”). The print engine includes one or more printhead assemblies, with each assembly including a printhead controller and a printhead (or array of printheads). An individual printhead includes multiple (e.g., hundreds of) tiny nozzles that are operable to discharge ink as controlled by the printhead controller.

Production printers typically have limited memory capacities for storing print data. This may cause a problem when a printer receives a print job in the PDF format, because a printer cannot initiate printing for a PDF print job until the entire PDF file has been stored in memory at the printer. Specifically, printing for a PDF print job (that is, the act of physically marking “dots on a page”) cannot start until page tree information for the job is read by the printer, and the location of the page tree information for a PDF print job is defined at the end of the PDF file for the print job. This results in two problems for a production printer receiving a large PDF print job from a print server. First, since the entire PDF file must be loaded into memory at the printer before printing initiates, the printer is idle for the entire period in which it is receiving a print job. This means that for large print jobs, the print shop must wait for a long period of time (e.g., an hour) before the first page even starts printing. Second, if the PDF document is too large for the memory of the printer (e.g., 120,000 pages), the memory of the printer overflows before the entire job is loaded, meaning that printing for the job fails.

SUMMARY

Embodiments described herein identify PDF print jobs that are so large they will cause a substantial processing delay at a printer, and split these PDF print jobs into smaller independent PDF jobs/segments that each may be processed quickly by the printer. Because the PDF segments are smaller than the original job, the printer may quickly access page tree information for these segments, meaning that the printer spends less time idle before printing/marking the first page of the original PDF print job.

One embodiment is a system comprising a print server. The print server includes an interface that is able to receive a Portable Document Format (PDF) print job. The print server also includes a job controller that is able to determine a size of the PDF print job, and to estimate a delay to start marking a first page of the PDF print job at a printer based on the size. The job controller is further able, in response to determining that the delay exceeds a threshold, to split the PDF print job into segments by: generating a first PDF segment that has a delay to start marking the first page that is less than the threshold, where the first PDF segment defines pages from the PDF print job and includes a PDF page tree; transmitting the first PDF segment to the printer for printing; generating an additional PDF segment that defines additional pages of the PDF print job and includes an additional PDF page tree; and transmitting the additional PDF segment to the printer.

Other exemplary embodiments (e.g., methods and computer-readable media relating to the foregoing embodiments) may be described below.

DETAILED DESCRIPTION

FIG. 1is a block diagram of a printing system100in an exemplary embodiment. In printing system100, incoming PDF print jobs from client110are received at print server120and assigned to printer130for printing. Print server120has been enhanced to dynamically split incoming PDF print jobs into segments if the PDF print jobs are too large. Specifically, printing system100splits a received PDF print job into independent child jobs/segments if printer130will encounter a substantial delay before it starts printing the PDF print job (e.g., a substantial delay before marking the first page of the PDF print job). Thus, print server120intelligently determines whether or not to split incoming PDF print jobs intended for printer130. Because this technique reduces the time it takes to start marking a job, it provides a speed benefit even for jobs that are sent to printers with empty printing queues.

While print server120is shown as coupled with only one printer, print server120may manage the operations of multiple printers in a print shop environment. In this embodiment, print server120includes an interface (I/F)122(e.g., an Ethernet interface, wireless interface, etc.) for receiving print jobs from client110. Print server120further includes a job controller124for handling print jobs received at print server120, and a memory126(e.g., Random Access Memory (RAM), a hard disk, etc.) for storing print jobs from client110. Controller124transmits PDF files to printer130for printing, and may be implemented as custom circuitry, as a processor executing programmed instructions, etc.

Printer130receives PDF files from print server120via interface132, stores the PDF files in memory136(e.g., RAM or a hard disk), and marks physical media based upon the received PDF files. Printer130includes print controller134, which manages the overall operations of printer130, and may direct one or more Raster Image Processors (RIPs) to rasterize received print data. Rasterized data is sent to marking engine138, which physically applies a colorant (e.g., toner, ink, etc.) onto print media to generate/mark a physical version of the print job. Printer130may utilize a continuous-forms marking engine, a cut-sheet marking engine, etc. In order to initiate printing/marking for a PDF file, printer130must access page tree information for that PDF file. However, the location of page tree information is indicated in a PDF trailer at the end of a PDF file. This is why printer130waits to receive an entire, complete PDF file before it attempts to initiate printing.

The particular arrangement, number, and configuration of components described herein is exemplary and non-limiting. Illustrative details of the operation of printing system100will be discussed with regard toFIG. 2, which illustrates a decision making process performed at print server120in order to dynamically split incoming PDF print jobs. Assume, for this embodiment, that one or more clients110are being operated by users to submit PDF print jobs to print server120. The incoming PDF print jobs are intended for printing at printer130.

FIG. 2is a flowchart illustrating a method200for splitting a PDF print job in an exemplary embodiment. The steps of method200are described with reference to printing system100ofFIG. 1, but those skilled in the art will appreciate that method200may be performed in other systems. The steps of the flowcharts described herein are not all inclusive and may include other steps not shown. The steps described herein may also be performed in an alternative order.

In step202, print server120receives a PDF print job (comprising one complete PDF file) from a client110via I/F122. In step204, job controller124determines the size of the PDF print job. The size of the print job may be the number of logical pages in the print job, the amount of memory126occupied by the print job, etc. In step206, job controller124estimates a delay to start printing the PDF print job at printer130(e.g., a delay to start marking the first page of the print job). The delay is important to consider because it is time during which the marking engine of printer130remains idle and non-productive. As such, the delay should remain small in order to keep printer130productive.

The delay may depend on multiple variables, including, for example, the size of the print job, the speed of a communication channel between print server120and printer130, the processing speed of print controller134, the size of the page tree in the PDF print job, and other factors. In one embodiment, the delay is calculated as the size of the print job in pages, multiplied by an average/expected size of each page in memory, and divided by the data rate of the communication channel between print server120and printer130. This type of delay indicates the amount of time it will take for printer130to receive the entire print job from print server120. In a further embodiment, the delay also includes an amount of time indicating how long print controller134is expected to take processing the received PDF print job before marking engine138starts marking the first page.

After the expected delay of the PDF print job has been calculated, job controller124decides whether or not to split the PDF print job into smaller PDF segments. As used herein, a PDF segment is an independent PDF file that defines logical pages from the PDF print job, and has its own PDF page tree. Thus, each PDF segment may be independently processed by printer130as a separate job. In order to determine whether to split the original PDF print job, job controller124determines whether or not the estimated delay exceeds a threshold value (e.g., five minutes) in step208.

If the delay is less than the threshold value, then the print job may be transmitted to printer130in step210without splitting the PDF print job, because the delay is within acceptable limits. Alternatively, if the delay to initiate printing/start marking the first page of the print job is greater than the threshold value, then the print job will cause too much idle time at printer130, and should be split into independent, complete PDF segments. In this scenario, processing continues to step212.

In step212, job controller124starts to split the PDF print job into segments by generating a first PDF segment. To generate the first PDF segment, job controller124selects a size for the first PDF segment that will result in a smaller delay than the threshold, and populates the first PDF segment with pages from the job until the selected size is reached but not exceeded. The first PDF segment defines the first pages of the PDF print job. As a part of generating the first PDF segment as an independent and complete PDF file, job controller124generates a PDF page tree. The PDF page tree serves as a data structure that includes references to the pages and page objects for the first PDF segment. It is constructed using a tree (e.g., a balanced tree) which may improve performance for accessing pages. At this point in time, the first PDF segment serves as a “complete” PDF file that defines its own pages and includes its own page tree. Thus, in step214, job controller124transmits the first PDF segment to printer130for printing.

In step216, job controller124generates an additional PDF segment. Job controller124populates the additional PDF segment with more pages from the original PDF print job, and includes a PDF page tree in the additional PDF segment. The PDF page tree is used by printer130to process the pages defined by the additional PDF segment. In this manner, the additional PDF segment is also a discrete PDF file that may be independently processed at printer130. In step218, job controller124transmits the additional PDF segment to printer130. The processes of generating segments and transmitting segments may be performed substantially in parallel in order to reduce and/or eliminate delays between transmitting/processing/printing individual segments.

In step220, job controller124determines whether there are still additional portions of the original PDF print job that have not yet been segmented and submitted to printer130. If there are still pages waiting to be sent to printer130, then job controller124generates additional segments and transmits them in steps216-218. This may continue iteratively in parallel with transmitting PDF segments to printer130. Alternatively, if there are no pages left to assign to PDF segments, then the entire print job has been submitted and processing continues to step202, where print server120waits for a print job.

During this process, printer130receives the individual PDF segments/files created by job controller124. Each time a complete PDF segment is received at printer130, print controller134searches the PDF segment to find and process the PDF page tree therein. Using the information in the PDF page tree, the logical pages defined by the PDF segment may be properly rasterized and printed at printer130.

Using method200, print server120is capable of identifying a PDF print job that would encounter substantial delays before printing at printer130, and splitting the PDF print job into discrete, independent PDF segments/files that will each initiate printing at printer130more quickly. This reduces idle time at printer130, which in turn increases the overall efficiency of the print shop.

FIG. 3is a block diagram300illustrating a PDF print job that is split into independent segments in an exemplary embodiment.FIG. 3illustrates that a PDF print job310includes PDF print data that defines a large number of pages. The pages may be logically divided into page groups via a job ticket or other instructions. As shown inFIG. 3, the print data within the PDF print job itself is not explicitly divided into page groups, but may categorized into page groups based on information in a job ticket (not shown). The location of a page tree is indicated by a PDF trailer (not shown), which itself is placed at the end of PDF print job310. When job controller124splits PDF print job310into segments320and330, it generates an individual page tree within each of the PDF segments. Specifically, each PDF segment includes its own page tree describing the pages of that segment. Splitting the original PDF print job in this manner ensures that the print job is printed in sequence, and provides a benefit in that the first page is printed faster than it would have been if PDF print job310had not been split.

FIG. 4is a message diagram400illustrating communications between elements of a printing system that splits a PDF print job in an exemplary embodiment. According toFIG. 4, a client410, a print server420and a printer430cooperate in order to print a large PDF job (e.g., 200,000 pages) that would normally cause substantial printing delays at printer430. InFIG. 4, client410initiates the process by sending the large PDF print job to print server420. Print server420determines that the size of the PDF print job would cause a substantial delay at printer430. Thus, a job controller at print server420generates a smaller, independent PDF segment from the original PDF print job, and transmits the PDF segment to printer430. Since the PDF segment is smaller than the original print job and includes its own page tree (making the PDF segment an independent file), it will take less time to transmit PDF segment to printer430than to transmit the entirety of the PDF print job. This means that printer430is capable of processing and initiating printing of the PDF segment much faster than the PDF print job.

Printer430reports progress information (e.g., the number of pages of the segment that have been printed) to print server420, which processes the progress information to indicate the progress of the entire print job (e.g., the total number of pages of the original print job that have been printed), and transmits this information to a user at client410. While the first segment is being printed, a job controller of print server420generates an additional PDF segment for the next set of pages from the original PDF print job, and transmits the additional PDF segment to printer430. Thus, printer430continues to print the pages of the PDF segments without delay, and print server420is given time to split the original print job into segments for transmission to printer430. When print server420receives progress information for a given segment from printer430, it aggregates the progress information from each of the segments in order to determine the progress of the entire original print job. A job controller of print server420then transmits a progress report/summary to a user of client410, indicating the number of pages that have been printed for the print job as a whole. Thus, printer430is unaware that the PDF segments are actually one combined PDF job, while client410is unaware that the original PDF print job has been split into segments.

If a user sends an instruction to cancel the PDF print job, then the job controller of print server420stops generating PDF segments from the original PDF print job, identifies each PDF segment for the job that has been sent to printer430, and cancels printing of each of the identified PDF segments at printer430.

In a further embodiment, job controller124is capable of determining an amount of space available in memory136. If the PDF print job exceeds the amount of space, then job controller124splits the PDF print job into smaller segments that will not cause an overflow at memory136.

In a further embodiment, job controller124is able to identify boundaries between PDF page groups (e.g., mail pieces, billing statements for different customers, etc. as defined in a file/job ticket accompanying the PDF print job) in the original PDF print job. Job controller124then splits the PDF print job into segments at boundaries between PDF page groups. In this manner, each PDF segment may be generated without revising the page groups that were defined for the original print job.

In a still further embodiment, the job controller is able to identify finishing instructions for the PDF print job, and to split the PDF print job into segments at boundaries between finishing instructions (e.g., stapling, binding, hole punching, etc.). This ensures that pages which are stapled and/or bound together are included in the same PDF segment, ensuring that printer130may properly handle each PDF segment as an independent print job.

In yet another embodiment, job controller124may implement a size limit for PDF segments that follow the first PDF segment. For example, if the first PDF segment is expected to take five minutes to complete printing, job controller124may generate additional PDF segments that are sized to take the printer about five minutes to receive and process. This ensures that the additional PDF segments do not cause printer130to go idle.

Examples

In the following examples, additional processes, systems, and methods are described in the context of a print server that splits a large PDF print job into independent PDF segments for processing by a printer.

According to this example, a user submits a 200,000 page PDF print job to a print server. The PDF print job is accompanied by a Job Definition Format (JDF) job ticket that includes finishing instructions (in this case, stapling instructions) for the pages of the PDF print job. A job controller at the print server determines the number of pages in the PDF print job, and estimates the delay that will be encountered at a continuous-forms production printer before the printer starts printing the first page of the PDF print job. The delay is estimated as a linear function of the size of the print job. In this embodiment, print jobs that are larger than 25,000 pages are estimated to cause too much delay for the printer. Based on this information, the job controller decides that the PDF print job should be segmented, because otherwise the printer would wait too long before it started printing. This would result in a processing delay and/or out of memory condition at the printer.

After the job controller has determined that the print job should be segmented, the job controller selects a size limit for the segments. Instructions stored in memory at the print server indicate that the first segment should be no more than 25,000 pages, ensuring that the first page initiates printing quickly within a predefined threshold delay amount. The instructions also indicate that additional segments should be no more than 50,000 pages each. The additional segments have a larger page limit than the first segment because the printer will already be actively printing when the additional segments are sent to the printer, and is therefore less likely to go idle.

When assembling a PDF segment from the original PDF print job, the job controller adds consecutive PDF page groups to the segment until the segment gets close to the size limit. In this embodiment, the boundaries of each page group are determined based on information in the JDF job ticket. Specifically, the JDF job ticket includes information defining page exceptions (e.g., groups of pages designated for special treatment during or after printing), such as media groups/page groups or finishing instructions (e.g., staple groups). During segmentation, the job controller ensures that splitting does not occur within a group. This type of analysis may consider the boundaries for many different types of groups (e.g., media groups, staple groups, etc.). This is significant because splitting a PDF job across a staple group would cause the output from the printer to be incorrect. The job controller, in addition to considering page group boundaries/finishing instruction boundaries defined in the JDF job ticket, also tracks the size of the PDF segment it is generating. If adding another page group would cause the segment to exceed the size limit, then the segment is completed by generating and appending a PDF page tree for the segment. The segment is then transmitted to the printer and the job controller starts to assemble a new segment.

In addition to splitting the original PDF print job into independent PDF segments, the job controller splits the original JDF job ticket into independent JDF job ticket segments. Each JDF job ticket segment is a complete JDF file that corresponds with a different PDF segment, and is transmitted to the printer along with its corresponding PDF segment. Since each JDF job ticket segment corresponds with a different PDF segment, and since each PDF segment does not split a page group/finishing instruction, the JDF job ticket segments also do not split individual page groups/finishing instructions This ensures that the printer is capable of independently handling finishing instructions for each PDF segment without requesting further information from the print server.

FIG. 5is a block diagram500illustrating a PDF print job520and an accompanying job ticket510that are both split into segments in an exemplary embodiment. Each set of finishing instructions within job ticket510is tied to a group of pages known as a “staple group” for print job520. The boundaries of each staple group are defined by job ticket510, and are not explicitly defined within print job520. A job controller generates a first PDF segment540, adding pages from PDF print job520based on the locations of the individual staple groups defined by job ticket510(e.g., in order to avoid a segment ending in the middle of a staple group). The job controller also generates a new JDF job ticket530that includes finishing instructions (e.g., an instruction to staple) for each of the staple groups for the first PDF segment. Job ticket530is then created and transmitted along with PDF segment540to the printer.

The job controller of the print server also generates a second job ticket550and an additional PDF segment560, and transmits these to the printer. The printer therefore interprets each discrete PDF segment and accompanying job ticket as a complete print job, and reports its progress to the print server for these “child” jobs. The print server aggregates the progress information for each of the PDF segments, and reports the progress to the user as an aggregated page count for the entire job. In this manner, a user may seamlessly track the progress of the entire job, and the printer may handle each PDF segment as a separate print job, complete with job ticket. Furthermore, the pages of the original PDF print job start printing much more quickly.

Embodiments disclosed herein can take the form of software, hardware, firmware, or various combinations thereof. In one particular embodiment, software is used to direct a processing system of print server120to perform the various operations disclosed herein.FIG. 6illustrates a processing system600operable to execute a computer readable medium embodying programmed instructions to perform desired functions in an exemplary embodiment. Processing system600is operable to perform the above operations by executing programmed instructions tangibly embodied on computer readable storage medium612. In this regard, embodiments of the invention can take the form of a computer program accessible via computer-readable medium612providing program code for use by a computer or any other instruction execution system. For the purposes of this description, computer readable storage medium612can be anything that can contain or store the program for use by the computer.

Computer readable storage medium612can be an electronic, magnetic, optical, electromagnetic, infrared, or semiconductor device. Examples of computer readable storage medium612include a solid state memory, a magnetic tape, a removable computer diskette, a random access memory (RAM), a read-only memory (ROM), a rigid magnetic disk, and an optical disk. Current examples of optical disks include compact disk-read only memory (CD-ROM), compact disk-read/write (CD-R/W), and DVD.

Processing system600, being suitable for storing and/or executing the program code, includes at least one processor602coupled to program and data memory604through a system bus650. Program and data memory604can include local memory employed during actual execution of the program code, bulk storage, and cache memories that provide temporary storage of at least some program code and/or data in order to reduce the number of times the code and/or data are retrieved from bulk storage during execution.

Input/output or I/O devices606(including but not limited to keyboards, displays, pointing devices, etc.) can be coupled either directly or through intervening I/O controllers. Network adapter interfaces608may also be integrated with the system to enable processing system600to become coupled to other data processing systems or storage devices through intervening private or public networks. Modems, cable modems, IBM Channel attachments, SCSI, Fibre Channel, and Ethernet cards are just a few of the currently available types of network or host interface adapters. Display device interface610may be integrated with the system to interface to one or more display devices, such as printing systems and screens for presentation of data generated by processor602.