A print job data processing method, device and printer
Patent Information
- Application Number
- CN202310722384.7
- Authority / Receiving Office
- CN · China
- Patent Type
- Patents(China)
- Current Assignee / Owner
- Filing Date
- 2023-06-16
- Publication Date
- 2026-09-15
- Estimated Expiration
- 2043-06-16
AI Technical Summary
[0005]因此,当打印作业数据的数据量较大时,会增加终端设备以及打印机的存储空间压力
[0022] Fourthly, this application provides a computer-readable storage medium, characterized in that the computer-readable storage medium stores a computer program that, when run on a computer, causes the computer to perform the method described in the first or second aspect.
Smart Images

Figure CN116700641B_ABST
Abstract
Description
Technical Field
[0001] This application relates to the field of image printing technology, and in particular to a method, device and printer for processing printing job data. Background Technology
[0002] A printer is one of the output devices of a terminal device (computer) used to print the processing results (print tasks) issued by the terminal device onto relevant media.
[0003] The traditional printing workflow is as follows: the printer driver on the terminal device processes the document and generates print job data. The print data is then transmitted to the printer via network or USB, and the printer processes the print data.
[0004] Print job data to be sent will occupy the terminal device's cache. After the print job data is sent to the printer, it will occupy the printer's cache before the print job is completed.
[0005] Therefore, large print job data volumes increase the storage pressure on terminal devices and printers. Furthermore, large print job data volumes also increase the transmission burden on networks or USB connections, thus affecting the printer's processing capacity and leading to decreased printing efficiency.
[0006] Therefore, a print job data processing method is needed to reduce the amount of print job data. Summary of the Invention
[0007] To address the issue of reducing the amount of data in print job data, this application provides a print job data processing method, a printing method, and an electronic device. This application also provides a computer-readable storage medium.
[0008] The embodiments of this application adopt the following technical solutions: In a first aspect, embodiments of this application provide a method for processing print job data, the method being applied to a terminal device, the method comprising: The print job data is divided into multiple job data blocks. Based on the multiple job data blocks, a data block set containing multiple cache data blocks is generated. This includes: recording data block division description information for each of the multiple job data blocks, wherein the data block division description information is used to enable the printer to determine the job data block that needs to be printed; recording the correspondence between the job data blocks and the cache data blocks, wherein the block data of the job data block and its corresponding cache data block are consistent, any one of the multiple job data blocks corresponds to a cache data block in the data block set, and multiple job data blocks with the same data correspond to a cache data block in the data block set. The correspondence between the job data block and the cache data block, the data block partitioning description information, and all cache data blocks of the data block set are sent to the printer.
[0009] The method provided in the first aspect reduces redundant data in print job data and lowers the printer's storage space usage.
[0010] In one implementation of the first aspect, the method further includes: The size of the job data block is determined based on one or more of the following factors: system performance, physical storage space size, data transfer speed, and single-page print data size.
[0011] In one implementation of the first aspect, dividing the print job data into multiple job data blocks and generating a data block set containing multiple cached data blocks based on the multiple job data blocks includes: Extract the first job data block from the print job data, and check whether there is a cached data block whose block data is consistent with the first job data block among the last N cached data blocks of the generated data block set, where: N is a preset value, N is less than or equal to the maximum number of data block caches of the printer; among the multiple generated cached data blocks, the cached data blocks are arranged in the order of generation; When the block data of the first cached data block in the last N cached data blocks of the generated data block set is consistent with the first job data block, the first job data block is recorded as corresponding to the first cached data block, wherein... When there is no cached data block whose block data is consistent with the first job data block among the last N cached data blocks of the generated data block set, a second cached data block is generated according to the first job data block and added to the data block set, wherein the block data of the first job data block and the second cached data block are consistent.
[0012] The method described above can avoid printer buffer overflow and ensure that print jobs are executed smoothly.
[0013] In one implementation of the first aspect, the cached data block includes a data header and block data; The step of dividing print job data into multiple job data blocks and generating a data block set containing multiple cached data blocks based on the multiple job data blocks includes: When the block data of the first cached data block is consistent with the first job data block in the last N cached data blocks of the generated data block set, the description information of the first job data block is added to the data header of the first cached data block. When there is no cached data block whose block data is consistent with the first job data block among the last N cached data blocks of the generated data block set, a first data header is added to the first job data block to generate the second cached data block. The first data header contains the description information of the first job data block.
[0014] In one implementation of the first aspect, the data header of the cached data block includes the number of times the data block is reused, wherein: When the block data of the first cached data block is consistent with the first job data block in the last N cached data blocks of the generated data block set, the data block reuse count in the data header of the first cached data block is incremented by 1; When there is no cached data block whose block data is consistent with the first job data block among the last N cached data blocks of the generated data block set, a first data header is added to the first job data block to generate the second cached data block, wherein the data block reuse count in the first data header is 1.
[0015] In one implementation of the first aspect: The method further includes: creating a terminal-side cache linked list; The step of dividing print job data into multiple job data blocks and generating a data block set containing multiple cached data blocks based on the multiple job data blocks includes: When there is no cached data block whose block data is consistent with the first job data block among the last N cached data blocks of the generated data block set, the second cached data block is generated according to the first job data block, and a terminal-side cache member block corresponding to the second cached data block is added to the terminal-side cache linked list.
[0016] In one implementation of the first aspect: The method further includes: creating a terminal-side data linked list; The data block partitioning description information for each of the plurality of job data blocks includes: Extract a first job data block from the print job data, and add a first data member block corresponding to the first job data block to the data chain list on the terminal side. The first data member block includes data block partitioning description information corresponding to the first job data block. Record the storage location of the cache data block corresponding to the first job data block into the first data member block.
[0017] Secondly, this application provides a printing method applied to a printer, the method comprising: Receive cached data blocks, job data blocks and their correspondence with each other, and data block partitioning description information sent by the method described in the first aspect; The cached data block received is cached; The second job data block that needs to be printed is determined based on the data block partitioning description information. Based on the correspondence between the job data block and the cache data block, a third cache data block corresponding to the second job data block is determined; Print the third cached data block.
[0018] The second approach reduces redundant data in print jobs and lowers the printer's storage space requirements.
[0019] In one implementation of the second aspect, after printing the third cached data block, the method further includes: When the third cached data block still corresponds to a third job data block that has not been printed, the third cached data block is retained; When the third cache data block does not correspond to any unprinted job data block, delete the third cache data block to free up storage space.
[0020] In one implementation of the second aspect, the cached data block includes a data header, and the data header includes the number of times the data block is reused; The cached data block received by the cache includes: creating a printer-side cache linked list; receiving the third cached data block and caching the third cached data block; and adding a third printer-side cache member block for the third cached data block to the printer-side cache linked list according to the data header of the third cached data block, wherein the third printer-side cache member block includes the number of times the data block is reused. After printing the third cached data block, the method further includes: modifying the data block reuse count in the third printer-side cache member block to the current value minus 1; checking whether the data block reuse count is 0, and deleting the third cached data block when the data block reuse count is 0.
[0021] Thirdly, this application provides an electronic device, characterized in that the printer includes a memory for storing computer program instructions and a processor for executing the computer program instructions, wherein when the computer program instructions are executed by the processor, the printer is triggered to perform the steps of the method described in the first or second aspect.
[0022] Fourthly, this application provides a computer-readable storage medium, characterized in that the computer-readable storage medium stores a computer program that, when run on a computer, causes the computer to perform the method described in the first or second aspect.
[0023] The method provided in the embodiments of this application reduces redundant data in print job data and lowers the storage space occupied by the printer. Attached Figure Description
[0024] Figure 1 The diagram shown is a flowchart of a print job data processing method according to an embodiment of this application; Figure 2 The diagram shown is a flowchart of a printing method according to an embodiment of this application; Figure 3 The diagram shown is a partial flowchart of a print job data processing method according to an embodiment of this application; Figure 4 The diagram shown is a partial flowchart of a print job data processing method according to an embodiment of this application; Figure 5 The diagram shown is a flowchart of a print job data processing method according to an embodiment of this application; Figure 6 The following is based on Figure 5 The illustrated embodiment shows a schematic diagram of print job data storage. Figure 7 The diagram shown is a partial flowchart of a printing method according to an embodiment of this application; Figure 8 The diagram shown is a partial flowchart of a printing method according to an embodiment of this application; Figure 9 The diagram shown is a schematic diagram of an electronic device structure according to an embodiment of this application. Detailed Implementation
[0025] To make the objectives, technical solutions, and advantages of this application clearer, the technical solutions of this application will be clearly and completely described below in conjunction with specific embodiments and corresponding drawings. Obviously, the described embodiments are only a part of the embodiments of this application, and not all of them. Based on the embodiments in this application, all other embodiments obtained by those skilled in the art without creative effort are within the scope of protection of this application.
[0026] The terminology used in the implementation section of this application is for the purpose of explaining specific embodiments of this application only, and is not intended to limit this application.
[0027] In printing scenarios, a single print job may contain some identical printed content (such as blank spaces on a page, image backgrounds, etc.). Based on this, and addressing the issue of how to reduce the amount of print job data, this application provides a print job data processing method. In the method of this application's embodiments, for multiple copies of partially identical printed content within the same print job, only one copy is saved, thereby reducing redundant print job data and decreasing the overall amount of print job data.
[0028] Figure 1 The diagram shown is a flowchart of a print job data processing method according to an embodiment of this application.
[0029] Terminal devices perform such as Figure 1 The following process is shown to store print job data and send the print job data to the printer.
[0030] S100, retrieve print job data.
[0031] S110 divides the print job data into multiple job data blocks.
[0032] When processing print job data in blocks, the print job data is divided into blocks based on a preset data block size to ensure that the size of the job data blocks is consistent after processing different print jobs.
[0033] Specifically, in one implementation of S110, the data block size for chunked processing is determined based on one or more of the following: the performance of the terminal device and / or printer system, the size of the physical storage space, the data transfer speed (e.g., the transfer speed of USB and / or network), and the size of the single-page print data.
[0034] Specifically, in one embodiment, the performance of the printer and terminal determines that smaller data blocks result in less redundant data in the print job, but this increases the processing burden on the SOC. In one embodiment, the calibration principle for data block size is to ensure that the terminal's data processing speed is greater than the speed at which data is transmitted to the printer, thereby minimizing data block size while avoiding impacting printing efficiency.
[0035] Furthermore, in one embodiment, for a single print job, the print job data of the print job is divided into blocks to obtain multiple job data blocks with consecutive sequence numbers, and the sequence numbers of different job data blocks are different.
[0036] In another embodiment, for a single print job, the print job data of the print job is divided according to the page number, the print job data of each page is divided into blocks, and multiple job data blocks with consecutive sequence numbers are obtained for each page. The sequence numbers of the job data blocks on different pages can be the same.
[0037] S111 records the data block division description information for each job data block of the print job data.
[0038] The data block partitioning description information is used to enable the printer to determine the current job data block to be printed based on the data block partitioning description information.
[0039] For example, the data block partition description information includes description information (print job ID number) of the print job data to which the job data block belongs, so that the print job to which the job data block belongs can be identified.
[0040] For example, the data block partition description information includes the page number information of the print job data to which the data block belongs (the page number of the print job), so that the specific page number of the print job to which the job data block belongs can be identified.
[0041] For example, the data block partitioning description information includes the number of the job data block in its corresponding print job data, so that the position of the job data block in the print job data can be identified.
[0042] For example, the data block partition description information includes the number of the data block within a single page of the print job data to which it belongs, so that the position of the job data block within a single page of the print job data can be identified.
[0043] For example, the data block partition description information includes descriptions of the previous and / or next job data blocks in the print job data (or page) to which the job data block belongs, so that the position of the data block in the print job data (or page) can be identified.
[0044] S120: Generate a data block set containing multiple cache data blocks based on the job data blocks of the print job data, and record the correspondence between the job data blocks and the cache data blocks. Wherein: the block data of the job data block and its corresponding cache data block are the same, any job data block in the print job data can correspond to a cache data block, and multiple job data blocks with the same data in the print job data correspond to a cache data block.
[0045] For example, print job data D1 is divided into job data blocks D11, D12, D13, D14, and D15. The data in D11 is the same as that in D13, and the data in D12 is the same as that in D15.
[0046] A data block set S1 is generated based on D11, D12, D13, D14, and D15. The data block set S1 contains cached data blocks S11, S12, and S13, and D11 and D13 correspond to S11, D12 and D15 correspond to S12, and D14 corresponds to S13.
[0047] S130 sends the correspondence between job data blocks and cached data blocks, data block partitioning description information, and all cached data blocks of the data block set to the printer.
[0048] According to S120, since the block data of the job data block is the same as that of its corresponding cached data block, any job data block in the print job data can correspond to a cached data block in the data block set. Therefore, the data block set contains all the data content of the print job data. Furthermore, since multiple job data blocks with the same data in the print job data correspond to a cached data block in the data block set, the data size of the data block set is smaller than the data size of the print job data.
[0049] according to Figure 1 The method of the illustrated embodiment reduces redundant data in print job data and lowers the burden of print job data transmission.
[0050] Furthermore, based on the print job data processing method of the embodiments of this application, an embodiment of this application also proposes a printing method.
[0051] Figure 2 The diagram shown is a flowchart of a printing method according to an embodiment of this application.
[0052] In one embodiment, the printer performs the following... Figure 2 The following procedure is shown to complete the printing job.
[0053] S200: Receive the correspondence between job data blocks and cache data blocks, data block partitioning description information, and cache data blocks sent in S130.
[0054] S201, cache the received cached data block.
[0055] S210, determine the current job data block to be printed based on the data block division description information.
[0056] S220: Based on the correspondence between job data blocks and cache data blocks, determine the cache data block that needs to be printed according to the job data block that needs to be printed.
[0057] S230, print the cached data block.
[0058] For example, the data block partitioning description information of print job data D1 (print job data D1 is divided into job data blocks D11, D12, D13, D14, D15), the correspondence between the job data blocks of print job data D1 and the cached data blocks of data block set S1 (D11, D13 correspond to S11, D12, D15 correspond to S12, D14 corresponds to S13), and the cached data blocks of data block S1 (S11, S12, S13) are sent to the printer.
[0059] Printer cache S11, S12, S13.
[0060] The printer determines that print job data D1 needs to be printed sequentially based on the fact that "print job data D1 is divided into job data blocks D11, D12, D13, D14, and D15".
[0061] The printer determines to print job data blocks D11, D12, D13, D14, and D15 in sequence based on the formula "D11 and D13 correspond to S11, D12 and D15 correspond to S12, and D14 correspond to S13". In essence, it prints buffer data blocks S11, S12, S11, S13, and S12 in sequence.
[0062] according to Figure 2 The method of the illustrated embodiment reduces redundant data in print job data and lowers the printer's storage space usage.
[0063] In one embodiment, for job data blocks with duplicate data in the print job data, only one corresponding cached data block is retained in the data block set.
[0064] Specifically, Figure 3 The diagram shown is a partial flowchart of a print job data processing method according to an embodiment of this application.
[0065] In one embodiment, the specific implementation of S120 includes Figure 3 The following steps are shown: S300, let n1=1.
[0066] n1 is the number of the job data block in print job data D2. The minimum value of n1 is 1, and the maximum value is the total number of job data blocks in print job data D2.
[0067] The print job data includes job data blocks D21, D22, D23, ..., D2 n1 .
[0068] D21, D22, D23, ..., D2 n1 The order of arrangement can be the order of the job data blocks in the print job data, or any other arbitrary order. When n1=1, D21 can be the first job data block in the print job data, or any job data block.
[0069] S301, Read job data block D2 from the job data block of the print job data. n1 .
[0070] S310, Determine if there exists any block data in the generated data block set that matches D2. n1 Consistent cached data blocks.
[0071] If the already generated set of data blocks includes cached data block S2 m1 Block data and D2 n1 If consistent (m1 is the number of the cached data block in the data block set), execute S311.
[0072] S311, record D2 n1 Corresponding to S2 m1 .
[0073] If the generated set of data blocks does not contain the block data of the cached data block and D2 n1 Consistent, execute S312.
[0074] S312, Add cached data block S2 to the data block set. M1 S2 M1 Block data and D2 n1 Consistent, M1 is the maximum value of the current cached data block number in the data block set plus 1.
[0075] S313, record D2 n1 Corresponding to S2 M .
[0076] S320 is executed after S311 or S313.
[0077] S320, determine whether there are any uncompared job data blocks in the job data blocks of the printed job data.
[0078] If it exists, execute S330.
[0079] S330, let n1 = n1 + 1.
[0080] After S330, return If it exists, the process ends.
[0081] Furthermore, during the transmission of print job data, the terminal device transmits the print job data to the printer in blocks. The printer buffers the received data blocks and prints the data blocks. After printing the data blocks, it clears the buffer of the printed data blocks.
[0082] For example, print job data D3 is divided into job data blocks D31, D32, D33, D34, D35, and D36. In one job workflow, the terminal device sends D31 to the printer, the printer buffers D31, then prints D31. After printing D31, the buffered D31 is deleted. Then the terminal device sends D32 to the printer, and the printing process of D31 is repeated.
[0083] If the terminal device sends print job data to the printer faster than the printer prints data blocks, the printer needs to buffer more print job data. For example, if the printer receives D32 before completing D31, it needs to buffer both D31 and D32. If printing data blocks takes a long time, the printer may need to buffer all data blocks of the print job. For example, if the printer receives D32, D33, D34, D35, and D36 before completing D31, it needs to buffer D31, D32, D33, D34, D35, and D36.
[0084] However, due to hardware limitations, printer buffer capacity has an upper limit. When the printer cannot buffer all data blocks of a print job at once, to avoid data backlog and buffer overflow, the speed at which the terminal device sends print job data blocks must be less than or equal to the speed at which the printer prints the data blocks. For example, if the printer can only buffer 3 data blocks, then when the terminal device sends D34, the printer must have already completed printing D31, with D32 and D33 remaining in the buffer, and buffer space available for D34.
[0085] In S130, the terminal device sends the cached data blocks of the data block set to the printer one by one. In S201, the printer caches the received cached data blocks of the data block set. Since one cached data block of the data block set may correspond to multiple identical job data blocks in the print job data, the printer cannot immediately release the storage space of the cached data block after printing one cached data block of the data block set. Thus, the cached data blocks cached by the printer will continuously accumulate. In extreme cases, the printer may need to cache all cached data blocks of the data block set to ensure the print job is executed successfully, which could lead to a buffer overflow.
[0086] For example, the data in D31 is consistent with D33 and D36, and the data in D32 is consistent with D35. Based on the data blocks D31, D32, D33, D34, D35, and D36 of the print job data, a set of data blocks S31, S32, and S33 can be generated. D31, D33, and D36 correspond to S31, D32 and D35 correspond to S32, and D34 corresponds to S33.
[0087] The terminal device sends S31 to the printer, and the printer buffers S31. The printer prints S31 when D31 needs to be printed. After completing the printing of D31, since S31 also corresponds to D33 and D36, the printer cannot release the buffer of S31 at this time. The printer can only release the buffer of S31 after completing the printing of D36 (the third printing of S31).
[0088] Furthermore, the terminal device sends S32 to the printer, and the printer buffers S32. The printer prints S32 when D32 is needed. After completing the printing for D32, since S32 also corresponds to D35, the printer cannot release the buffer of S32 at this time. The printer can only release the buffer of S32 after it has completed printing for D35 (printing S32 for the second time).
[0089] If the printer can only buffer 2 data blocks, and the terminal device sends data blocks at the same rate as the printer prints data blocks.
[0090] The terminal device sends S31 to the printer, and the printer buffers S31. When the terminal device sends S32 to the printer, the printer completes printing for D31 (but cannot release S31), and the printer buffers S31 and S32. When the terminal device sends S33 to the printer, the printer completes printing for D32 (but cannot release S32), and the printer, having already buffered S31 and S32, overflows upon receiving S33.
[0091] In response to the above situation, a feasible solution is to increase the printer's buffer space.
[0092] For example, the printer can be increased from 2 to 3 data blocks to be cached. When the terminal device sends S33 to the printer, the printer completes the printing for D32 (but cannot release S32), and the printer caches S31, S32, and S33.
[0093] However, increasing the cache space is not only limited by the printer's hardware configuration, but also because the number and distribution of identical data blocks in different print jobs are different, the cache size required for different sets of data blocks is also different. Therefore, it is difficult to avoid cache overflow by increasing the cache space.
[0094] In response to the above situation, in one embodiment of this application, printer cache overflow is avoided by adding cached data blocks with the same data to the data block set.
[0095] Specifically, Figure 4 The diagram shown is a partial flowchart of a print job data processing method according to an embodiment of this application.
[0096] In one embodiment, the specific implementation of S120 includes Figure 4 The following steps are shown: S400, let n2=1.
[0097] n2 is the job data block number of print job data D4. The minimum value of n2 is 1, and the maximum value is the total number of job data blocks in print job data D4.
[0098] Print job data includes job data blocks D41, D42, D43, ..., D4 n2 .
[0099] D41, D42, D43, ..., D4 n2 The order of arrangement can be the order of the job data blocks in the print job data, or any other arbitrary order. When n2=1, D41 can be the first job data block in the print job data, or any job data block.
[0100] S401, Read job data block D4 from the job data block of the print job data. n2 .
[0101] S410, determine whether there exists a block data in the last N cached data blocks of the generated data block set's data block queue that matches D4. n2 Consistent cached data blocks.
[0102] N is a preset value. Specifically, N is a value determined based on the maximum number of data blocks that the printer can cache, and N is less than or equal to the maximum number of data blocks that the printer can cache.
[0103] For example, a printer can cache a maximum of 2 data blocks, where N is 2.
[0104] Specifically, in S410, when the number of cached data blocks in the generated data block set is less than or equal to N, it is determined whether any block data exists in all cached data blocks of the generated data block set that matches D4. n2 Consistent cached data blocks.
[0105] If among the last N cached data blocks in the data block queue of the generated data block set, cached data block S4... m2 (m2 is the block number of the data block set) block data and D4 n2 Consistent, execute S411.
[0106] S411, Record D4 n2 Corresponding to S4 m2 .
[0107] If the last N cached data blocks in the data block queue of the generated data block set do not contain any block data that matches D4. n2 Consistent cached data blocks, execute S412.
[0108] S412, add S4 to the end of the data block queue of the data block set. M2 S4 M2 Block data and D4 n Consistent, M2 is the maximum value of the current cached data block number in the data block set plus 1.
[0109] S413, record D4 n2 Corresponding to S4 M2 .
[0110] S420 is executed after S411 or S413.
[0111] S420, determine whether there are any job data blocks in the job data blocks of the print job data that have not been compared.
[0112] If it exists, execute S430.
[0113] S430, let n2 = n2 + 1.
[0114] After S430, return to S401.
[0115] If it does not exist, the process ends.
[0116] For example, print job data D4 is divided into job data blocks D41, D42, D43, D44, D45, D46, D47, D48, and D49. The data in D41 is the same as that in D44 and D48, the data in D42 is the same as that in D47, and the data in D43 is the same as that in D49.
[0117] Assume the printer can only buffer 4 data blocks, and set N to 4. Based on Figure 4 The process shown generates a data block set containing cached data blocks (S41, S42, S43) based on the job data blocks D41, D42, and D43 of the print job data. Records show that D41 corresponds to S41, D42 to S42, and D43 to S43.
[0118] D44 is consistent with S41, so add a record corresponding to S41 for D44.
[0119] D45 is inconsistent with S41, S42, and S43. The data block set is increased to S44, and a record corresponding to S44 is added to D45.
[0120] D46 is inconsistent with S41, S42, S43, and S44. The data block set is increased to S45, and a record corresponding to S45 is added to D46.
[0121] D47 is consistent with S42 in S42, S43, S44, and S45 (the last four data blocks in the set), so add a record D47 corresponding to S42.
[0122] D48 is inconsistent with S42, S43, S44, and S45 (the last four data block sets). The data block set is expanded to include S46, and a new record corresponding to D48 is added to S46.
[0123] D49 is consistent with S43 in S43, S44, S45, and S46 (the last four data blocks in the set), so add a record D49 corresponding to S43.
[0124] Ultimately, the data block set includes S41, S42, S43, S44, S45, and S46. D41 and D44 correspond to S41, D42 and D47 correspond to S42, D43 and D49 correspond to S43, D45 corresponds to S44, D46 corresponds to S45, and D48 corresponds to S46.
[0125] The terminal device sends S41 to the printer, and the printer buffers S41. The printer prints S41 for D41.
[0126] When the terminal device sends S42 to the printer, the printer completes the printing of S41. Since S41 also corresponds to D44, the printer cannot release the buffer of S41 at this time. The printer buffers S41 and S42. The printer prints S42 for D42.
[0127] When the terminal device sends S43 to the printer, the printer completes the printing of S42. Since S42 also corresponds to D47, the printer cannot release the S42 buffer at this time. The printer buffers S41, S42, and S43. The printer prints S43 for D43.
[0128] When the terminal device sends S44 to the printer, the printer completes the printing of S43. Since S43 also corresponds to D49, the printer cannot release the buffer of S43 at this time. The printer buffers S41, S42, S43, and S44. The printer prints S41 for D44.
[0129] When the terminal device sends S45 to the printer, the printer completes the printing of S41 and releases the S41 buffer. The printer buffers S42, S43, S44, and S45. The printer prints S44 for D45.
[0130] When the terminal device sends S46 to the printer, the printer completes the printing of S44 and releases the S44 buffer. The printer buffers S42, S43, S45, and S46. The printer prints S45 for D46.
[0131] The printer completes printing S45 and releases the S45 buffer. The printer buffers S42, S43, and S46. The printer then prints S42 for printing D47.
[0132] The printer completes printing S42 and releases the S42 buffer. The printer then buffers S43 and S46. For printing D48, the printer prints S46.
[0133] The printer completes printing S46 and releases the S46 buffer. The printer then buffers S43. The printer targets D49 and prints S43.
[0134] The printer completes printing on S43 and releases the S43 buffer.
[0135] according to Figure 4 The method of the illustrated embodiment can avoid printer buffer overflow and ensure that print jobs are executed smoothly.
[0136] Figure 5 The diagram shown is a flowchart of a print job data processing method according to an embodiment of this application.
[0137] Terminal devices perform such as Figure 5 The following process is shown to save print job data and send print job data to the printer.
[0138] S500 determines the data block size.
[0139] S501, Create a terminal-side cache list. Specifically, the terminal-side cache list is used to describe the cached data blocks contained in the data block set.
[0140] The terminal-side cache linked list contains multiple terminal-side cache member blocks, and each terminal-side cache member block corresponds to a cached data block contained in the data block set. The structure of the terminal-side cache member block is shown in Table 1.
[0141] Table 1
[0142] S502, retrieve print job data D5.
[0143] S503, create a terminal-side job data linked list for print job data D5.
[0144] The terminal-side job data linked list is used to store data block partitioning description information.
[0145] Specifically, in one embodiment, the terminal-side job data linked list contains multiple data member blocks, each corresponding to a job data block of the printing job data. The structure of the data member blocks is shown in Table 2.
[0146] Table 2
[0147] In one embodiment, in an application scenario where cached data blocks are stored in a contiguous address space, in Table 1, data_addr points to the starting address of the data block storage location.
[0148] In another embodiment, in an application scenario where cached data blocks are segmented and stored in multiple storage locations, in Table 1, data_addr points to the start and end addresses of each segment of the cached data block's segmented storage location.
[0149] In other embodiments of this application, a data member block may contain any combination of one or more items shown in Table 1, without needing to contain all items shown in Table 1; a data member block may also contain other items besides those shown in Table 1.
[0150] For example, in one embodiment, the data member block does not contain Block_num, and the job data block ordering for printing job data can be determined by pre and next.
[0151] For example, in another embodiment, the data member block does not contain pre and next, and the data member block also contains a tail identifier (set to 0 to indicate that the job data block corresponding to the current data member block is not the last job data block of the print job data, set to 1 to indicate that the job data block corresponding to the current data member block is the last job data block of the print job data). The job data block order of the print job data can be determined by Block_num and the tail identifier.
[0152] For example, in another embodiment, the data member block does not contain data_addr, but contains a storage label, which is the number of the cached data block already stored in the terminal-side cache list corresponding to the job data block corresponding to the current data member block.
[0153] After S503, the print job data D5 is cached in blocks.
[0154] S510, initialize n3=1, n3 is the sequence number of the data block, the initial value of n3 is 1, and the maximum value is the total number of job data blocks that can be divided into the print job data D5.
[0155] S511, Extract job data block D5 from print job data D5 n3 .
[0156] Specifically, in one implementation of S511, when D5 n3 When D5 is the first block of job data, the first position of the storage location of the print job data D5 is taken as D5. n3 The first position of the storage location. When D5 n3 If it is not the first job data block of D5, then use D5. n3 The previous job data block (D5) n-1 The tail position of ) is D5 n3 The first position of the storage location. From D5 n3 Starting from the first position of the storage location, D5 is determined according to the size of the data block. n3 The end position of the storage location.
[0157] Furthermore, in one implementation of S511, when determining the job data block D5... n3 After determining the storage location, subsequent actions will be taken regarding job data block D5. n3 The read and write operations are performed directly on the job data block D5. n3 Data execution at the storage location.
[0158] In another implementation of S511, in order to maintain the data integrity of print job data D5, the job data block D5 is determined... n3After determining the storage location, the job data block D5 will be... n3 Data from the storage location is copied to the storage space used for temporary data storage, and then applied to job data block D5. n3 Read and write operations are performed on data in the storage space where temporary data is stored.
[0159] S520, create job data block D5 in the job data chain list on the terminal side. n3 The corresponding data member is a block.
[0160] Specifically, in S230, D5 is recorded. n3 The corresponding data members in the block are pre, job_ID, job_name, Block_num, checksum, and next.
[0161] Furthermore, in Figure 5 In the illustrated embodiment, a terminal-side cache list is created before S502. That is, after S500 is completed, a resident terminal-side cache list is maintained on the electronic device. After obtaining print job data, a terminal-side job data list is created; after the print job data is sent to the printer, the terminal-side job data list is deleted.
[0162] In another embodiment of this application, after obtaining the print job data (after S502), a terminal-side cache list and a terminal-side cache chain can be created; after the print job data is sent to the printer, the terminal-side cache list and the terminal-side cache chain can be deleted.
[0163] In another embodiment of this application, the terminal-side cache list and the terminal-side cache linked list can also be created before S502. That is, after completing S500, the terminal-side cache list and the terminal-side cache linked list are kept resident on the electronic device.
[0164] S530 reads the cache data block corresponding to the cache member block in the terminal-side cache linked list.
[0165] S540, compare each cached data block with data block D5 one by one. n3 For comparison.
[0166] Specifically, in S530 and S540, following the storage order of cache member blocks in the terminal-side cache linked list, the cache data blocks corresponding to the cache member blocks are read sequentially, starting from the first cache member block. After reading a cache data block, it is then linked to the job data block D5. n3 Compare the data in the cached data block with the data in the job data block D5. n3If they do not match, read the cache data block corresponding to the next cache member block, and so on, until the block data of the read cache data block matches the job data block D5. n3 Either consistent, or, read all cached member blocks corresponding to the cached data blocks.
[0167] When all cached data blocks' block data match job data block D5 n3 If none of them are consistent, execute S550, S551, and S552.
[0168] S550 is the job data block D5. n3 Add a data header and generate cached data block S5 M3 S5 M3 Save the data to an unused storage location C5m` in the storage space used for caching print job data. M3 is the maximum value of the current cached data block number in the data block set plus 1.
[0169] Specifically, in one embodiment, a contiguous storage space is configured on the terminal side for caching print job data, and the storage location C5m` is the storage location after the already used storage location in the contiguous storage space.
[0170] Specifically, S5 M3 Includes a header and block data. S5 M3 Block data and job data block D5 n3 The data is consistent. S5 M3 The data header contains job data block D5 n3 Description information.
[0171] In one embodiment, the description information is shown in Table 3.
[0172] Table 3
[0173] In Table 3, job_num describes the number of job data blocks (the number of times they are reused) in the print job data corresponding to the current cached data block. For the first generated cached data block, the value of job_num is 1.
[0174] For example, for job data block D5 n3 Add a data header and generate cached data block S5 M3 At that time, the value of job_num is 1.
[0175] In Table 3, `max_num` in `job_dex[max_num]` represents the maximum number of times a cached data block can be reused, which is set by the printing speed and the terminal's processing power. In one embodiment, `max_num` is set to 64, meaning that the data can be reused a maximum of 64 times.
[0176] The `job_dex` is used to store description information of job data blocks. Specifically, in one embodiment, `job_dex` contains multiple `block_dex` members, each `block_dex` member corresponding to a job data block that prints job data corresponding to the current cached data block.
[0177] The block_dex member structure is shown in Table 4.
[0178] Table 4
[0179] For example, for job data block D5 n3 Add a data header and generate cached data block S5 M3 At that time, job_dex contains a corresponding D5 n3 The block_dex member.
[0180] S551, add the corresponding cached data block S5 to the terminal-side cache list. M3 The terminal-side cache member block.
[0181] S552 records the terminal-side operation data chain, corresponding to D5. n3 The data_addr in the data member block is stored at location C5m`.
[0182] When cached data block S5 m3 Block data and data block D5 n3 If consistent, execute S560. m3 is the number of the cached data block in the data block set.
[0183] S560, in cache data block S5 m3 In the data header, increment the value of job_num by 1, and add the corresponding D5 value to job_dex. n3 The block_dex member.
[0184] S561 records the terminal-side operation data chain, corresponding to D5. n3 The data_addr in the data member block is S5 m3 The storage location.
[0185] S570, determine if there is an uncompared job data block in print job data D5.
[0186] If it exists, execute S572.
[0187] S572, let n3 = n3 + 1. After S572, return to S511.
[0188] If it does not exist, execute S571.
[0189] S571, delete print job data D5 to free up storage space.
[0190] In another embodiment, the print job data D5 may not be deleted in order to keep it as a backup.
[0191] The S580 sends all cached data blocks and terminal-side job data lists to the printer.
[0192] Specifically, in the S580, the terminal device first sends the terminal-side job data linked list to the printer, and then sends the cached data blocks one by one to the printer according to the order of the terminal-side cache member blocks in the terminal-side cache linked list.
[0193] Figure 6 The following is based on Figure 5 The illustrated embodiment shows a schematic diagram of print job data storage.
[0194] like Figure 6 As shown, after determining the data block size, a terminal-side cache linked list is created.
[0195] Assuming the printer can only buffer 4 data blocks, N is set to 4.
[0196] After obtaining print job data D6, print job data D6 is stored in storage location H06, which is used to temporarily store print job data. A terminal-side job data linked list for print job data D6 is created.
[0197] Assume that print job data D6 can be divided into job data blocks D61, D62, D63, D64, D65, D66, D67, D68, and D69. The data in D61 is the same as that in D64 and D68, the data in D62 is the same as that in D67, and the data in D63 is the same as that in D69.
[0198] Extract job data block D61 from print job data D6, and add the corresponding data member block D61 to the terminal-side job data chain of print job data D6.
[0199] Since the terminal-side cache list is empty at this time, a data header is added to the job data block D61 to generate a cache data block S61. S61 is saved to the beginning of the storage location C61 in the storage space used to cache print job data.
[0200] S61 contains a header and block data. The block data in S61 is identical to the data in job data block D61. In the header of S61, the value of job_num is 1, and job_dex contains a block_dex member corresponding to D61.
[0201] Add a terminal-side cache member block corresponding to cache data block S61 to the terminal-side cache linked list.
[0202] Record the value of data_addr of the data member block corresponding to D61 in the terminal-side job data chain list as C61.
[0203] Extract job data block D62 from print job data D6, and add the corresponding data member block D62 to the terminal-side job data chain list of print job data D6.
[0204] Based on the terminal-side cache member block in the terminal-side cache linked list (the terminal-side cache linked list contains 1 terminal-side cache member block, less than N), read the cache data block S61 and compare S61 with D62. Since the block data of S61 is inconsistent with the data of D62, a data header is added to the job data block D62 to generate the cache data block S62. S62 is saved to the storage space used for caching print job data at storage location C61 after storage location C61.
[0205] S62 contains a header and block data. The block data in S62 is identical to the data in job data block D62. In the header of S62, the value of job_num is 1, and job_dex contains a block_dex member corresponding to D62.
[0206] Add a terminal-side cache member block corresponding to cache data block S62 to the terminal-side cache linked list.
[0207] Record the value of data_addr of the data member block corresponding to D62 in the terminal-side job data chain list as C62.
[0208] Extract job data block D63 from print job data D6, and add the corresponding data member block D63 to the terminal-side job data chain list of print job data D6.
[0209] Based on the terminal-side cache member block in the terminal-side cache linked list (the terminal-side cache linked list contains 2 terminal-side cache member blocks, less than N), cache data block S61 is read and compared with D63. Since the block data of S61 is inconsistent with the data of D63, cache data block S62 is read and compared with D63. Since the block data of S62 is inconsistent with the data of D63, a data header is added to the job data block D63, generating cache data block S63. S63 is saved to storage location C63 after storage location C62 in the storage space used for caching print job data.
[0210] S63 contains a header and block data. The block data in S63 is identical to that in job data block D63. In the header of S63, the value of job_num is 1, and job_dex contains a block_dex member corresponding to D63.
[0211] Add a terminal-side cache member block corresponding to cache data block S63 to the terminal-side cache linked list.
[0212] Record the value of data_addr of the data member block corresponding to D63 in the terminal-side job data chain list as C63.
[0213] Extract job data block D64 from print job data D6, and add the corresponding data member block D64 to the terminal-side job data chain list of print job data D6.
[0214] Based on the terminal-side cache member blocks in the terminal-side cache linked list (the terminal-side cache linked list contains 3 terminal-side cache member blocks, less than N), read cache data block S61 and compare S61 with D64. Since the block data of S61 is consistent with the data of D63, record the value of job_num as 2 in the data header of S61, and add the corresponding block_dex member of D64 to job_dex.
[0215] Record the value of data_addr of the data member block corresponding to D64 in the terminal-side job data chain as C61.
[0216] Extract job data block D65 from print job data D6, and add the corresponding data member block D65 to the terminal-side job data chain list of print job data D6.
[0217] Based on the terminal-side cache member blocks in the terminal-side cache linked list (the terminal-side cache linked list contains 3 terminal-side cache member blocks, less than N), cache data block S61 is read and compared with D65. Since the block data of S61 is inconsistent with the data of D65, cache data block S62 is read and compared with D65. Since the block data of S62 is inconsistent with the data of D65, cache data block S63 is read and compared with D65. Since the block data of S63 is inconsistent with the data of D65, a data header is added to the job data block D65, generating cache data block S64. S64 is saved to storage location C64 after storage location C63 in the storage space used for caching print job data.
[0218] S64 contains a header and block data. The block data in S64 is identical to the data in job data block D65. In the header of S64, the value of job_num is 1, and job_dex contains a block_dex member corresponding to D65.
[0219] Add a terminal-side cache member block corresponding to cache data block S64 to the terminal-side cache linked list.
[0220] Record the value of data_addr of the data member block corresponding to D65 in the terminal-side job data chain as C64.
[0221] Extract job data block D66 from print job data D6, and add the corresponding data member block D66 to the terminal-side job data linked list of print job data D6.
[0222] Based on the terminal-side cache member blocks in the terminal-side cache linked list (the terminal-side cache linked list contains 4 terminal-side cache member blocks, etc.), cache data block S61 is read and compared with D66. Since the block data of S61 is inconsistent with the data of D66, cache data block S62 is read and compared with D66. Since the block data of S62 is inconsistent with the data of D66, cache data block S63 is read and compared with D66. Since the block data of S63 is inconsistent with the data of D66, cache data block S64 is read and compared with D66. Since the block data of S64 is inconsistent with the data of D66, a data header is added to the job data block D66, generating cache data block S65. S65 is saved to storage location C65 after storage location C64 in the storage space used for caching print job data.
[0223] S65 contains a header and block data. The block data in S65 is identical to that in job data block D66. In the header of S65, the value of job_num is 1, and job_dex contains a block_dex member corresponding to D66.
[0224] Add a terminal-side cache member block corresponding to cache data block S65 to the terminal-side cache linked list.
[0225] Record the value of data_addr of the data member block corresponding to D66 in the terminal-side job data chain as C65.
[0226] Extract job data block D67 from print job data D6, and add the corresponding data member block D67 to the terminal-side job data chain list of print job data D6.
[0227] Based on the terminal-side cache member blocks in the terminal-side cache linked list (the terminal-side cache linked list contains 5 terminal-side cache member blocks, which is greater than N), read the cache data block S62 and compare S62 with D67. Since the block data of S62 is consistent with the data of D67, record the value of job_num as 2 in the data header of S62, and add the corresponding block_dex member of D67 to job_dex.
[0228] Record the value of data_addr of the data member block corresponding to D67 in the terminal-side job data chain as C62.
[0229] Extract job data block D68 from print job data D6, and add the corresponding data member block D68 to the terminal-side job data chain list of print job data D6.
[0230] Based on the terminal-side cache member blocks in the terminal-side cache linked list (the terminal-side cache linked list contains 5 terminal-side cache member blocks, greater than N), cache data block S62 is read and compared with D68. Since the block data of S62 is inconsistent with the data of D68, cache data block S63 is read and compared with D68. Since the block data of S63 is inconsistent with the data of D68, cache data block S64 is read and compared with D68. Since the block data of S64 is inconsistent with the data of D68, cache data block S65 is read and compared with D68. Since the block data of S65 is inconsistent with the data of D68, a data header is added to the job data block D68, generating cache data block S66. S66 is saved to storage location C66 after storage location C65 in the storage space used for caching print job data.
[0231] S66 contains a header and block data. The block data in S66 is identical to that in job data block D68. In the header of S66, the value of job_num is 1, and job_dex contains a block_dex member corresponding to D68.
[0232] Add a terminal-side cache member block corresponding to cache data block S66 to the terminal-side cache linked list.
[0233] Record the value of data_addr of the data member block corresponding to D68 in the terminal-side job data chain as C66.
[0234] Extract job data block D69 from print job data D6, and add the corresponding data member block D69 to the terminal-side job data chain list of print job data D6.
[0235] Based on the terminal-side cache member blocks in the terminal-side cache linked list (the terminal-side cache linked list contains 6 terminal-side cache member blocks, which is greater than N), cache data block S63 is read and compared with D69. Since the block data of S63 is consistent with the data of D69, the value of job_num is recorded as 2 in the data header of S63, and the corresponding block_dex member of D69 is added to job_dex.
[0236] Record the value of data_addr of the data member block corresponding to D69 in the terminal-side job data chain as C63.
[0237] Ultimately, the terminal-side cache linked list contains the terminal-side cache member blocks corresponding to S61, S62, S63, S64, S65, and S66.
[0238] In the S61 data header, the value of job_num is 2, and job_dex contains the block_dex member corresponding to D61, as well as the block_dex member corresponding to D64.
[0239] In the S62 data header, the value of job_num is 2, and job_dex contains the block_dex member corresponding to D62, as well as the block_dex member corresponding to D67.
[0240] In the S63 data header, the value of job_num is 2, and job_dex contains the block_dex member corresponding to D63, as well as the block_dex member corresponding to D69.
[0241] In the S64 data header, the value of job_num is 1, and job_dex contains the corresponding block_dex member of D65.
[0242] In the S65 data header, the value of job_num is 1, and job_dex contains the corresponding block_dex member of D66.
[0243] In the S66 data header, the value of job_num is 1, and job_dex contains the corresponding block_dex member of D68.
[0244] The terminal-side job data linked list contains data member blocks corresponding to job data blocks D61, D62, D63, D64, D65, D66, D67, D68, and D69.
[0245] The value of data_addr of the data member block of the corresponding job data block D61 is C61.
[0246] The value of data_addr of the data member block of the corresponding job data block D62 is C62.
[0247] The value of data_addr of the data member block of the corresponding job data block D63 is C63.
[0248] The value of data_addr of the data member block of the corresponding job data block D64 is C61.
[0249] The value of data_addr for the data member block of the corresponding job data block D65 is C64.
[0250] The value of data_addr of the data member block of the corresponding job data block D66 is C65.
[0251] The value of data_addr of the data member block of the corresponding job data block D67 is C62.
[0252] The value of data_addr of the data member block of the corresponding job data block D68 is C66.
[0253] The value of data_addr of the data member block of the corresponding job data block D69 is C63.
[0254] Figure 7 The diagram shown is a partial flowchart of a printing method according to an embodiment of this application.
[0255] In one embodiment, after S580, the printer performs the following... Figure 7 The following steps are shown to receive data for performing a print job.
[0256] S700 receives the terminal-side job data linked list and saves the terminal-side job data linked list as the printer-side job data linked list.
[0257] The printer-side job data linked list contains multiple data member blocks, each corresponding to a job data block of the print job data. The structure of the data member blocks is shown in Table 2.
[0258] In one embodiment of this application, the printer can save the terminal-side job data list as a printer-side job data list.
[0259] In other embodiments of this application, the printer-side job data list may include any combination of one or more items from the terminal-side job data list, without needing to include all items shown in the terminal-side job data list; furthermore, the printer-side job data list may also include other items besides those in the terminal-side job data list.
[0260] S701, create a printer-side cache linked list.
[0261] The printer-side cache list is used to describe the data blocks that have been cached on the printer.
[0262] Specifically, in one embodiment, the printer-side cache linked list contains one or more printer-side cache member blocks, each corresponding to a cached data block already cached on the printer. The structure of the printer-side cache member block is shown in Table 5.
[0263] Table 5
[0264] In Table 5, job_num describes the number of job data blocks (the number of times they are reused) in the print job data corresponding to the current cached data block.
[0265] In Table 5, `max_num` in `job_dex[max_num]` represents the maximum number of times a cached data block can be reused, which is set by the printing speed and the terminal's processing power. In one embodiment, `max_num` is set to 64, meaning that the data can be reused a maximum of 64 times.
[0266] The `job_dex` parameter stores description information about the job data block corresponding to the current cached data block. Specifically, in one embodiment, `job_dex` contains multiple `block_dex` members, each `block_dex` member corresponding to a job data block corresponding to the current cached data block.
[0267] The block_dex member structure is shown in Table 6.
[0268] Table 6
[0269] In other embodiments of this application, the printer-side cache list can be a structure other than that shown in Tables 5 and 6. For example, the printer-side cache list may include a Block_addr, but the block_dex member of job_dex may not contain a Block_addr.
[0270] S710, receives buffered data block S7 n4 .
[0271] n4 is the sequence number of the buffered data blocks received by the printer. That is, after S700, the first buffered data block received by the printer is S71 (n4=1), the second buffered data block received by the printer is S72 (n4=2), and so on.
[0272] S7n4 Includes data header and block data S71 n4 . (Refer to S550) S720 will transfer block data S71 n4 Saved to unused storage location C7 in the storage space used for caching print job data. n4 .
[0273] In one embodiment, in S720, S7 n4 Data header removal, only block data is saved (S71) n4 .
[0274] In another embodiment, in S720, S7 is saved. n4 All data.
[0275] S721, add the corresponding S7 to the printer-side cache list. n4 printer-side cache member block (B7) n4 ).
[0276] Specifically, the S720 includes: Read S7 n4 Data header; S7 n4 The value of job_num in the data header is written to B7. n4 job_num; According to S7 n4 The block_dex member contained in the job_dex header is B7. n4 Add the corresponding block_dex member to job_dex; Store at location C7 n4 Write to B7 n Block_addr for each block_dex member of job_dex.
[0277] S730, traverse the printer-side job data list, according to B7 n The `block_dex` member contained in `job_dex` determines the printer-side job data list, B7. n4 The corresponding data member block (each block_dex member corresponds to one data member block).
[0278] S731, store location C7 n4 Write to B7 n4 The corresponding data member block's data_addr.
[0279] After S731, S740 is executed.
[0280] S740, determine S7 n4 Is this the last data block transferred in the current print job?
[0281] For example, in one embodiment, in S580, after the terminal side sends the last buffered data block to the printer side, the terminal side sends a data transmission completion flag to the printer side. When the printer side receives the data transmission completion flag, the printer side can confirm that the current print job data transmission has been completed, and the last data block previously received is the last data block of the current print job data transmission.
[0282] When S7 n4 When the last data block of the current print job data transmission is received, the data block reception process for the current print job data transmission ends.
[0283] When S7 n4 If it is not the last data block transferred in the current print job, return S710.
[0284] After S731, printers can perform print jobs based on cached data.
[0285] Specifically, in one embodiment, when n4 is 1, the printer executes a print job after S731. That is, after the printer receives the first buffered data block and completes caching for that buffered data block, the printer begins to execute the print job.
[0286] In another embodiment, when n4 is a preset value, the printer executes a print job after S731. That is, after the printer caches a preset number of cached data blocks, the printer begins to execute a print job.
[0287] Figure 8 The diagram shown is a partial flowchart of a printing method according to an embodiment of this application.
[0288] In one embodiment, after S731, the printer performs the following... Figure 8 The following steps are shown to perform a print job based on cached data.
[0289] S800 reads the printer-side job data list.
[0290] S801, let n5=1.
[0291] n5 is the sequence number of the job data block in the print job data.
[0292] S810, based on the printer-side job data list, determines the job data block D8 that needs to be printed in the printer-side job data list. n5 The corresponding data member block.
[0293] That is, after S800, when S810 is executed for the first time, the printer determines the first job data block D81 (n5=1) in the print job data; when S810 is executed for the second time, the printer determines the second job data block D82 (n5=2) in the print job data. And so on, until the printer determines the last job data block in the print job data.
[0294] S811, according to D8 n5 The corresponding data member block and the printer-side cache list are used to determine D8 in the printer-side cache list. n5 The corresponding printer-side cache member block (B8) m5 ).
[0295] S820, reading D8 n5 The block data stored at the storage location of data_addr in the corresponding data member block.
[0296] Specifically, in one embodiment, when only block data is saved in S720, D8 is read in S820. n5 All data stored at the storage location of data_addr in the corresponding data member block.
[0297] In another embodiment, when all the data of the cached data block containing the data header is saved in S720, from D8 n5 Extract the block data (excluding the data header) from the data stored at the storage location of data_addr in the corresponding data member block.
[0298] S821 executes a print job on the block data read from S820.
[0299] After S821 is completed, S830 is executed.
[0300] S830, B8 m5 Decrease the value of job_num by 1.
[0301] S831, determine B8 m5 Is the value of job_num 0?
[0302] If B8 m5 When the value of job_num is 0, execute S832 and S833.
[0303] S832, delete B8 from the printer's cached data blocks. m5 Release the cache space for the corresponding data block.
[0304] S833, delete B8 from the printer-side cache list. m5 .
[0305] After S833, or if B8 m5 If the value of job_num is not 0, execute S840.
[0306] S840 determines whether the print job is complete.
[0307] If completed, the current print job process ends.
[0308] If not completed, execute S841.
[0309] S841, let n5 = n5 + 1. Return to S810.
[0310] Specifically, with Figure 6 Taking the illustrated embodiment as an example, assume that the terminal-side job data linked list and cached data blocks S61, S62, S63, S64, S65, and S66 are obtained. According to... Figure 7 , Figure 8 The print job process of the illustrated embodiment performs the following steps.
[0311] The terminal device sends the terminal-side job data linked list to the printer, and the printer receives the terminal-side job data linked list and saves it as the printer-side job data linked list.
[0312] The printer creates a printer-side cache linked list.
[0313] The terminal device sends the cached data block S61 to the printer, which receives S61 and caches it. (The printer caches one data block S61.) The printer adds the corresponding printer-side cache member block (B61) of S61 to the printer-side cache linked list; writes the value (2) of job_num in the data header of S61 to job_num of B61; adds the block_dex members contained in job_dex in the data header of S61 (corresponding to the block_dex members of D61 and the block_dex members corresponding to D64) to job_dex of B61; and writes the storage location of S61 to the Block_addr of each block_dex member in job_dex of B61.
[0314] The printer traverses the printer-side job data linked list. Based on the two block_dex members contained in job_dex of B61, it determines the data member block corresponding to B61 in the printer-side job data linked list (the data member blocks of job data blocks D61 and D64). The storage location of S61 is written to the data_addr of the data member block of the corresponding job data blocks D61 and D64.
[0315] The printer uses the printer-side job data list to determine the data member `block` corresponding to the first job data block D61 to be printed. It then reads the `data_addr` of the data member `block` (the storage location of S61) and extracts the block data of S61 (excluding the data header). The printer then performs the print operation on the block data of S61.
[0316] The printer changed the value of job_num in B61 from 2 to 1.
[0317] The printer checks if the job_num value of B61 is 1, which is not 0, and then retains S61. (The printer caches one data block S61.) The terminal device sends the cached data block S62 to the printer, and the printer receives and caches S62. (The printer caches two data blocks S61 and S62.) The printer adds the corresponding printer-side cache member block (B62) of S62 to the printer-side cache linked list; writes the value (2) of job_num in the data header of S62 to job_num of B62; adds the block_dex members (corresponding to the block_dex members of D62 and the block_dex members corresponding to D67) contained in job_dex in the data header of S62 to job_dex of B62; and writes the storage location of S62 to the Block_addr of each block_dex member in job_dex of B62.
[0318] The printer traverses the printer-side job data linked list. Based on the two block_dex members contained in job_dex of B62, it determines the data member block corresponding to B62 in the printer-side job data linked list (the data member blocks of job data blocks D62 and D67). The storage location of S62 is written to the data_addr of the data member block of the corresponding job data blocks D62 and D67.
[0319] The printer uses the printer-side job data list to determine the data member `block` corresponding to the second job data block D62 to be printed. It then reads the `data_addr` of the data member `block` (the storage location of S62) and extracts the block data of S62 (excluding the data header). The printer then performs the print operation on the block data of S62.
[0320] The printer changed the value of job_num in B62 from 2 to 1.
[0321] The printer checks if the job_num value of B62 is 1, which is not 0, and retains S62. (The printer buffers two data blocks S61 and S62) The terminal device sends the cached data block S63 to the printer, which receives S63 and caches it. (The printer caches three data blocks S61, S62, and S63.) The printer adds the corresponding S63 printer-side cache member block (B63) to the printer-side cache linked list; writes the value (2) of job_num in the data header of S63 to job_num of B63; adds the block_dex members contained in job_dex in the data header of S63 (corresponding to the block_dex members of D63 and the block_dex members corresponding to D69) to job_dex of B63; and writes the storage location of S63 to the Block_addr of each block_dex member in job_dex of B63.
[0322] The printer traverses the printer-side job data linked list. Based on the two block_dex members contained in job_dex of B63, it determines the data member block corresponding to B63 in the printer-side job data linked list (the data member blocks of job data blocks D63 and D69). The storage location of S63 is written to the data_addr of the data member block of the corresponding job data blocks D63 and D69.
[0323] The printer uses the printer-side job data list to determine the data member `block` corresponding to the third job data block to be printed, D63. It then reads the `data_addr` of the `block` (the storage location of S63) and extracts the block data of S63 (excluding the data header). The printer then performs the print operation on the block data of S63.
[0324] The printer changed the value of job_num in B63 from 2 to 1.
[0325] The printer checks if the job_num value of B63 is 1, which is not 0, and retains S63. (The printer caches three data blocks S61, S62, and S63.) The terminal device sends the cached data block S64 to the printer, which receives S64 and caches it. (The printer caches four data blocks S61, S62, S63, and S64.) The printer adds the corresponding S64 printer-side cache member block (B64) to the printer-side cache linked list; writes the value (1) of job_num in the data header of S64 to job_num of B64; adds the block_dex member (corresponding to the block_dex member of D65) contained in job_dex in the data header of S64 to job_dex of B64; and writes the storage location of S64 to the Block_addr of each block_dex member in job_dex of B64.
[0326] The printer traverses the printer-side job data linked list. Based on a block_dex member contained in job_dex of B64, it determines the data member block corresponding to B64 in the printer-side job data linked list (the data member block corresponding to job data block D65). The storage location of S64 is written to the data_addr of the data member block of the corresponding job data block D65.
[0327] The printer uses the printer-side job data list to determine the data member `block` corresponding to the fourth job data block to be printed, D64. It then reads the `data_addr` of the `block` (the storage location of S61) and extracts the block data from S61 (excluding the data header). The printer then performs the print operation on the block data of S61.
[0328] The printer changed the value of job_num in B61 from 1 to 0.
[0329] The printer determines that the job_num value of B63 is 0, deletes S61, and releases the storage space. (The printer caches three data blocks S62, S63, and S64.) The terminal device sends the cached data block S65 to the printer, which receives and caches S65. The printer caches four data blocks S65, S62, S63, and S64, with S65 using the storage location of the previous S61.
[0330] The printer adds the corresponding S65 printer-side cache member block (B65) to the printer-side cache linked list; writes the value (1) of job_num in the data header of S65 to job_num of B65; adds the block_dex member (corresponding to the block_dex member of D66) contained in job_dex in the data header of S65 to job_dex of B65; and writes the storage location of S65 to the Block_addr of each block_dex member in job_dex of B65.
[0331] The printer traverses the printer-side job data linked list. Based on the block_dex member contained in job_dex of B65, it determines the data member block corresponding to B65 in the printer-side job data linked list (the data member block corresponding to job data block D66). The storage location of S65 is written to the data_addr of the data member block of the corresponding job data block D66.
[0332] The printer, based on the printer-side job data list, identifies the data member `block` corresponding to the fifth job data block to be printed, D65. It then reads the `data_addr` of the `block` (the storage location of S64) and extracts the block data from S64 (excluding the data header). The printer then performs the print operation on the block data in S64.
[0333] The printer changed the value of job_num in B64 from 1 to 0.
[0334] The printer determines that the job_num value of B64 is 0, deletes S64, and releases the storage space. (The printer caches three data blocks S65, S62, and S63.) The terminal device sends the cached data block S66 to the printer, which receives and caches S66. The printer caches four data blocks S65, S62, S63, and S66, with S66 using the storage location of the previous S64.
[0335] The printer adds the corresponding S66 printer-side cache member block (B66) to the printer-side cache linked list; writes the value (1) of job_num in the data header of S66 to job_num of B66; adds the block_dex member (corresponding to the block_dex member of D68) contained in job_dex in the data header of S66 to job_dex of B66; and writes the storage location of S66 to the Block_addr of each block_dex member in job_dex of B66.
[0336] The printer traverses the printer-side job data linked list. Based on the block_dex member contained in job_dex of B66, it determines the data member block corresponding to B66 in the printer-side job data linked list (the data member block corresponding to job data block D68). The storage location of S66 is written to the data_addr of the data member block of the corresponding job data block D68.
[0337] The printer, based on the printer-side job data list, identifies the data member `block` corresponding to the sixth job data block to be printed, D66. It then reads the `data_addr` of the data member `block` (the storage location of S65) and extracts the block data from S65 (excluding the data header). The printer then performs the print operation on the block data from S65.
[0338] The printer changed the value of job_num in B65 from 1 to 0.
[0339] The printer determines that the job_num value of B65 is 0, deletes S65, and releases storage space. The printer caches three data blocks S62, S63, and S66.
[0340] The terminal device sends a data transmission completion indicator to the printer, and the printer confirms that the data transmission is complete.
[0341] The printer, based on the printer-side job data list, identifies the data member `block` corresponding to the seventh job data block to be printed, D67. It then reads the `data_addr` of the data member `block` (the storage location of S62) and extracts the block data from S62 (excluding the data header). The printer then performs the print operation on the block data from S62.
[0342] The printer changed the value of job_num in B62 from 1 to 0.
[0343] The printer determines that the job_num value of B62 is 0, deletes S62, and releases the storage space. The printer caches two data blocks S63 and S66.
[0344] The printer uses the printer-side job data list to identify the data member `block` corresponding to the eighth job data block to be printed, D68. It then reads the `data_addr` of the `block` (the storage location of S66) and extracts the block data from S66 (excluding the data header). The printer then performs the print operation on the block data of S66.
[0345] The printer changed the value of job_num in B66 from 1 to 0.
[0346] The printer determines that the job_num value of B66 is 0, deletes S66, and releases the storage space. The printer caches a data block S63.
[0347] The printer, based on the printer-side job data list, identifies the data member `block` corresponding to the ninth job data block to be printed, D69. It then reads the `data_addr` of the data member `block` (the storage location of S63) and extracts the block data of S63 (excluding the data header). The printer then performs the print operation on the block data of S63.
[0348] The printer changed the value of job_num in B63 from 1 to 0.
[0349] The printer determines that the job_num value of B63 is 0, deletes S63, and releases the storage space.
[0350] In the description of the embodiments of this application, for the sake of convenience, they are described separately by function into various modules. The division of each module is only a logical functional division. When implementing the embodiments of this application, the functions of each module can be implemented in one or more software and / or hardware.
[0351] Specifically, the apparatus proposed in this application can be fully or partially integrated onto a single physical entity, or physically separated. These modules can be implemented entirely in software via processing element calls; entirely in hardware; or partially in software via processing element calls and partially in hardware. For example, the detection module can be a separate processing element or integrated into a chip in the electronic device. The implementation of other modules is similar. Furthermore, these modules can be fully or partially integrated together, or implemented independently. During implementation, each step of the above method or each of the above modules can be completed through integrated logic circuits in the hardware of the processor element or through software instructions.
[0352] For example, these modules can be one or more integrated circuits configured to implement the above methods, such as one or more application-specific integrated circuits (ASICs), one or more digital signal processors (DSPs), or one or more field-programmable gate arrays (FPGAs). Alternatively, these modules can be integrated together as a system-on-a-chip (SOC).
[0353] An embodiment of this application also proposes an electronic device. The electronic device may be a terminal device or a printer.
[0354] Figure 9 The diagram shown is a schematic diagram of an electronic device structure according to an embodiment of this application.
[0355] like Figure 9 As shown, the electronic device 900 includes a memory 901 for storing computer program instructions and a processor 902 for executing the program instructions. When the computer program instructions are executed by the processor 902, the printer is triggered to execute the method described in the embodiments of this application.
[0356] Specifically, in one embodiment of this application, the one or more computer programs are stored in the memory, and the one or more computer programs include instructions that, when executed by the device, cause the device to perform the method steps described in the embodiment of this application.
[0357] Specifically, in one embodiment of this application, the processor of the electronic device can be a device-on-a-chip (SoC), which may include a central processing unit (CPU) and may further include other types of processors. Specifically, in one embodiment of this application, the processor of the electronic device can be a PWM control chip.
[0358] Specifically, in one embodiment of this application, the processor may include, for example, a CPU, DSP, microcontroller, or digital signal processor, and may also include a GPU, embedded neural network processing units (NPU), and image signal processor (ISP). The processor may also include necessary hardware accelerators or logic processing hardware circuits, such as ASICs, or one or more integrated circuits for controlling the execution of the program of the technical solution of this application. Furthermore, the processor may have the function of operating one or more software programs, which may be stored in a storage medium.
[0359] Specifically, in one embodiment of this application, the memory of the electronic device may be a read-only memory (ROM), other types of static storage devices capable of storing static information and instructions, random access memory (RAM), or other types of dynamic storage devices capable of storing information and instructions. It may also be an electrically erasable programmable read-only memory (EEPROM), a compact disc read-only memory (CD-ROM), or other optical disc storage, optical disc storage (including compressed optical discs, laser discs, optical discs, digital universal optical discs, Blu-ray discs, etc.), magnetic disk storage media, or other magnetic storage devices. Alternatively, it may be any computer-readable medium capable of carrying or storing desired program code in the form of instructions or data structures that can be accessed by a computer.
[0360] Specifically, in one embodiment of this application, the processor and memory can be combined into a single processing device, or more commonly, they are independent components. The processor executes program code stored in the memory to implement the method described in the embodiments of this application. In specific implementations, the memory can also be integrated into the processor, or it can be independent of the processor.
[0361] Furthermore, the devices, apparatuses, and modules described in the embodiments of this application can be implemented by computer chips or physical entities, or by products with certain functions.
[0362] Those skilled in the art will understand that embodiments of this application can be provided as methods, apparatus, or computer program products. Therefore, the present invention can take the form of a completely hardware embodiment, a completely software embodiment, or an embodiment combining software and hardware aspects. Furthermore, the present invention can take the form of a computer program product embodied on one or more computer-usable storage media containing computer-usable program code.
[0363] In the several embodiments provided in this application, any function, if implemented as a software functional unit and sold or used as an independent product, can be stored in a computer-readable storage medium. Based on this understanding, the technical solution of this application, in essence, or the part that contributes to the prior art, or part of the technical solution, can be embodied in the form of a software product. This computer software product is stored in a storage medium and includes several instructions to cause a computer device (which may be a personal computer, a server, or a network device, etc.) to execute all or part of the steps of the methods described in the various embodiments of this application.
[0364] Specifically, one embodiment of this application also provides a computer-readable storage medium storing a computer program that, when run on a computer, causes the computer to execute the method provided in the embodiment of this application.
[0365] An embodiment of this application also provides a computer program product, which includes a computer program that, when run on a computer, causes the computer to perform the method provided in the embodiment of this application.
[0366] The embodiments described in this application are described with reference to flowchart illustrations and / or block diagrams of methods, apparatus (devices), and computer program products according to embodiments of this application. It will be understood that each block of the flowchart illustrations and / or block diagrams, and combinations of blocks in the flowchart illustrations and / or block diagrams, can be implemented by computer program instructions. These computer program instructions can be provided to a processor of a general-purpose computer, special-purpose computer, embedded processor, or other programmable data processing apparatus to produce a machine, such that the instructions, which execute via the processor of the computer or other programmable data processing apparatus, generate instructions for implementing the flowchart illustrations. Figure 1 One or more processes and / or boxes Figure 1 A device that provides the functions specified in one or more boxes.
[0367] These computer program instructions may also be stored in a computer-readable storage medium that can direct a computer or other programmable data processing device to function in a particular manner, such that the instructions stored in the computer-readable storage medium produce an article of manufacture including instruction means, which are implemented in a process Figure 1 One or more processes and / or boxes Figure 1 The function specified in one or more boxes.
[0368] These computer program instructions may also be loaded onto a computer or other programmable data processing equipment to cause a series of operational steps to be performed on the computer or other programmable equipment to produce a computer-implemented process, thereby providing instructions that execute on the computer or other programmable equipment for implementing the process. Figure 1 One or more processes and / or boxes Figure 1 The steps of the function specified in one or more boxes.
[0369] It should also be noted that in the embodiments of this application, "at least one" refers to one or more, and "more than one" refers to two or more. "And / or" describes the relationship between related objects, indicating that three relationships can exist. For example, A and / or B can represent the existence of A alone, the simultaneous existence of A and B, or the existence of B alone. A and B can be singular or plural. The character " / " generally indicates that the preceding and following related objects are in an "or" relationship. "At least one of the following" and similar expressions refer to any combination of these items, including any combination of singular or plural items. For example, at least one of a, b, and c can represent: a, b, c, a and b, a and c, b and c, or a and b and c, where a, b, and c can be single or multiple.
[0370] In this application, the terms "comprising," "including," or any other variations thereof are intended to cover non-exclusive inclusion, such that a process, method, article, or apparatus that comprises a list of elements includes not only those elements but also other elements not expressly listed, or elements inherent to such a process, method, article, or apparatus. Without further limitation, an element defined by the phrase "comprising one..." does not exclude the presence of other identical elements in the process, method, article, or apparatus that includes said element.
[0371] This application can be described in the general context of computer-executable instructions, such as program modules, that are executed by a computer. Generally, program modules include routines, programs, objects, components, data structures, etc., that perform a specific task or implement a specific abstract data type. This application can also be practiced in distributed computing environments where tasks are performed by remote processing devices connected via a communication network. In distributed computing environments, program modules can reside in local and remote computer storage media, including storage devices.
[0372] The various embodiments in this application are described in a progressive manner. Similar or identical parts between embodiments can be referred to mutually. Each embodiment focuses on describing the differences from other embodiments. In particular, the device embodiments are basically similar to the method embodiments, so the description is relatively simple; relevant parts can be referred to the descriptions of the method embodiments.
[0373] Those skilled in the art will recognize that the units and algorithm steps described in the embodiments of this application can be implemented using electronic hardware, computer software, or a combination of electronic hardware. Whether these functions are implemented in hardware or software depends on the specific application and design constraints of the technical solution. Those skilled in the art can use different methods to implement the described functions for each specific application, but such implementation should not be considered beyond the scope of this application.
[0374] Those skilled in the art will clearly understand that, for the sake of convenience and brevity, the specific working processes of the devices, apparatuses, and units described above can be referred to the corresponding processes in the foregoing method embodiments, and will not be repeated here.
[0375] The above description is merely a specific embodiment of this application. Any variations or substitutions that can be easily conceived by those skilled in the art within the scope of the technology disclosed in this application should be included within the protection scope of this application. The protection scope of this application should be determined by the protection scope of the claims.
Claims
1. A print job data processing method characterized by comprising: The method is applied to a terminal device, and the method includes: The print job data is divided into multiple job data blocks, and a data block set containing multiple cached data blocks is generated based on the multiple job data blocks, including: Record the data block partitioning description information of each of the plurality of job data blocks. The data block partitioning description information is used to enable the printer to determine the job data block that needs to be printed based on the data block partitioning description information. Record the correspondence between the job data block and the cache data block. The block data of the job data block and its corresponding cache data block are consistent. Any one of the multiple job data blocks corresponds to a cache data block in the data block set. Multiple job data blocks with the same data correspond to a cache data block in the data block set. The correspondence between the job data block and the cache data block, the data block partitioning description information, and all cache data blocks of the data block set are sent to the printer.
2. The method of claim 1, wherein, The method further includes: The size of the job data block is determined based on one or more of the following factors: system performance, physical storage space size, data transfer speed, and single-page print data size.
3. The method according to claim 1 or 2, characterized in that, The step of dividing print job data into multiple job data blocks and generating a data block set containing multiple cached data blocks based on the multiple job data blocks includes: Extract the first job data block from the print job data, and check whether there is a cached data block whose block data is consistent with the first job data block among the last N cached data blocks of the generated data block set, where: N is a preset value, N is less than or equal to the maximum number of data block caches of the printer; among the multiple generated cached data blocks, the cached data blocks are arranged in the order of generation; When the block data of the first cached data block in the last N cached data blocks of the generated data block set is consistent with the first job data block, the first job data block is recorded as corresponding to the first cached data block, wherein... When there is no cached data block whose block data is consistent with the first job data block among the last N cached data blocks of the generated data block set, a second cached data block is generated according to the first job data block and added to the data block set, wherein the block data of the first job data block and the second cached data block are consistent.
4. The method according to claim 3, characterized in that, The cached data block includes a data header and block data; The step of dividing print job data into multiple job data blocks and generating a data block set containing multiple cached data blocks based on the multiple job data blocks includes: When the block data of the first cached data block is consistent with the first job data block in the last N cached data blocks of the generated data block set, the description information of the first job data block is added to the data header of the first cached data block. When there is no cached data block whose block data is consistent with the first job data block among the last N cached data blocks of the generated data block set, a first data header is added to the first job data block to generate the second cached data block. The first data header contains the description information of the first job data block.
5. The method according to claim 4, characterized in that, The header of the cached data block includes the number of times the data block has been reused, wherein: When the block data of the first cached data block is consistent with the first job data block in the last N cached data blocks of the generated data block set, the data block reuse count in the data header of the first cached data block is incremented by 1; When there is no cached data block whose block data is consistent with the first job data block among the last N cached data blocks of the generated data block set, a first data header is added to the first job data block to generate the second cached data block, wherein the data block reuse count in the first data header is 1.
6. The method according to claim 3, characterized in that, The method further includes: Create a terminal-side cache linked list; The step of dividing print job data into multiple job data blocks and generating a data block set containing multiple cached data blocks based on the multiple job data blocks includes: When there is no cached data block whose block data is consistent with the first job data block among the last N cached data blocks of the generated data block set, the second cached data block is generated according to the first job data block, and a terminal-side cache member block corresponding to the second cached data block is added to the terminal-side cache linked list.
7. The method according to claim 3, characterized in that, The method further includes: Create a data linked list on the terminal side; The data block partitioning description information for each of the plurality of job data blocks includes: Extract a first job data block from the print job data, and add a first data member block corresponding to the first job data block to the data chain list on the terminal side. The first data member block includes data block partitioning description information corresponding to the first job data block. Record the storage location of the cache data block corresponding to the first job data block into the first data member block.
8. A printing method, characterized in that, The method is applied to a printer, and the method includes: Receive cached data blocks, job data blocks and their correspondence, and data block partitioning description information sent by the method according to any one of claims 1 to 7; The cached data block received is cached; The second job data block that needs to be printed is determined based on the data block partitioning description information. Based on the correspondence between the job data block and the cache data block, a third cache data block corresponding to the second job data block is determined; Print the third cached data block.
9. The method according to claim 8, characterized in that, After printing the third cached data block, the method further includes: When the third cached data block still corresponds to a third job data block that has not been printed, the third cached data block is retained; When the third cache data block does not correspond to any unprinted job data block, delete the third cache data block to free up storage space.
10. The method according to claim 9, characterized in that, The cached data block includes a data header, and the data header includes the number of times the data block is reused. The cached data block received by the cache includes: creating a printer-side cache linked list; receiving the third cached data block and caching the third cached data block; adding a third printer-side cache member block for the third cached data block to the printer-side cache linked list according to the data header of the third cached data block, wherein the third printer-side cache member block includes the number of times the data block is reused; After printing the third cached data block, the method further includes: modifying the data block reuse count in the third printer-side cache member block to the current value minus 1; checking whether the data block reuse count is 0, and deleting the third cached data block when the data block reuse count is 0.
11. An electronic device, characterized in that, The printer includes a memory for storing computer program instructions and a processor for executing the computer program instructions, wherein when the computer program instructions are executed by the processor, the printer is triggered to perform the method steps as claimed in any one of claims 1-7 or any one of claims 8-10.
12. A computer-readable storage medium, characterized in that, The computer-readable storage medium stores a computer program that, when run on a computer, causes the computer to perform the method as claimed in any one of claims 1-7 or any one of claims 8-10.
Citation Information
Patent Citations
Method and device for caching data in blocks and storage medium
CN112685334A
A printing apparatus, a method of efficiently storing bitmap print data and a computer readable storage medium encoded with an application program for efficiently storing bitmap print data
TW424201B