printf("Job %d printed %d pages\n", job->id, job->completed_time - job->creation_time) 获取不到页数
时间: 2024-03-03 20:53:45 浏览: 52
很抱歉,我的之前的回答有误。在CUPS中,`job->completed_time`和`job->creation_time`分别表示打印任务完成时间和创建时间,不能用于计算打印页数。正确的方法是从打印任务的打印文件中获取打印页数。
以下是一个使用CUPS接口获取打印任务打印页数的示例代码:
```c
#include <stdio.h>
#include <cups/cups.h>
int main() {
int num_jobs;
cups_job_t *jobs, *job;
int i;
// 获取所有已完成的打印任务
num_jobs = cupsGetJobs(&jobs, NULL, 0, CUPS_WHICHJOBS_COMPLETED);
// 查询每个打印任务的打印页数,并输出结果
for (i = 0; i < num_jobs; i++) {
job = cupsGetJob(jobs[i].id, NULL, 0);
// 获取打印文件
const char *filename = cupsGetOption("job-originating-user-name", job->options);
FILE *fp = fopen(filename, "r");
if (fp == NULL) {
printf("Failed to open file %s\n", filename);
cupsFreeJob(job, 1);
continue;
}
// 统计打印页数
int pages = 0;
char buffer[1024];
while (fgets(buffer, sizeof(buffer), fp)) {
if (strstr(buffer, "%%Pages:")) {
pages = atoi(strstr(buffer, "%%Pages:") + 8);
break;
}
}
// 输出结果
printf("Job %d printed %d pages\n", job->id, pages);
fclose(fp);
cupsFreeJob(job, 1);
}
cupsFreeJobs(num_jobs, jobs);
return 0;
}
```
该代码使用CUPS提供的API函数`cupsGetJobs`和`cupsGetJob`获取已完成的打印任务的ID和打印文件名,然后打开每个打印文件,从文件中获取打印页数,并输出结果。
需要注意的是,该代码需要在编译时链接CUPS库,例如:
```
gcc -o print_pages print_pages.c -lcups
```
另外,CUPS API在不同版本的CUPS中可能略有不同,如果您的CUPS版本不同,可能需要相应调整代码。
阅读全文