xref: /haiku/src/tests/kits/interface/pictureprint/DumpPrintJob.cpp (revision 91b6c45560608cdc3ed0886b8f0b394f98f8efd7)
1 /*
2  * Copyright 2002-2007, Haiku.
3  * Distributed under the terms of the MIT License.
4  *
5  * Authors:
6  *		Michael Pfeiffer
7  */
8 
9 #include <stdio.h>
10 #include <PrintJob.h>
11 
12 #include "PicturePrinter.h"
13 #include "PrintJobReader.h"
14 
printArguments(const char * application)15 void printArguments(const char* application) {
16 	printf("Usage: %s [--pictures] files\n", application);
17 	printf("Prints the contents of the specified spool files to stdout.\n"
18 		"Arguments:\n"
19 		"  --pictures  print contents of pictures\n");
20 }
21 
main(int argc,char * argv[])22 int main(int argc, char* argv[]) {
23 	BApplication app("application/x-vnd.Haiku.dump-print-job");
24 
25 	bool printPicture = false;
26 	bool hasFiles = false;
27 
28 	for (int i = 1; i < argc; i ++) {
29 		const char* arg = argv[i];
30 		if (strcmp(arg, "--pictures") == 0) {
31 			printPicture = true;
32 			continue;
33 		}
34 
35 		hasFiles = true;
36 		BFile jobFile(arg, B_READ_WRITE);
37 		if (jobFile.InitCheck() != B_OK) {
38 			fprintf(stderr, "Error opening file %s!\n", arg);
39 			continue;
40 		}
41 
42 		PrintJobReader reader(&jobFile);
43 		if (reader.InitCheck() != B_OK) {
44 			fprintf(stderr, "Error reading spool file %s!", arg);
45 			continue;
46 		}
47 
48 		printf("Spool file: %s\n", arg);
49 		printf("Job settings message:\n");
50 		reader.JobSettings()->PrintToStream();
51 
52 		int32 pages = reader.NumberOfPages();
53 		printf("Number of pages: %d\n", (int)pages);
54 		for (int page = 0; page < pages; page ++) {
55 			printf("Page: %d\n", page+1);
56 			PrintJobPage pjp;
57 			if (reader.GetPage(page, pjp) != B_OK) {
58 				fprintf(stderr, "Error reading page!\n");
59 				break;
60 			}
61 
62 			BPicture picture;
63 			BPoint pos;
64 			BRect rect;
65 			printf("Number of pictures: %ld\n", pjp.NumberOfPictures());
66 			while (pjp.NextPicture(picture, pos, rect) == B_OK) {
67 				printf("Picture position = (%f, %f) bounds = [l: %f t: %f r: %f b: %f]\n",
68 					pos.x, pos.y,
69 					rect.left, rect.top, rect.right, rect.bottom);
70 
71 				if (printPicture) {
72 					printf("Picture:\n");
73 					PicturePrinter printer;
74 					printer.Iterate(&picture);
75 				}
76 			}
77 		}
78 	}
79 
80 	if (!hasFiles)
81 		printArguments(argv[0]);
82 }
83