cups 接口如何根据任务id获取到打印任务信息
时间: 2023-08-18 14:09:13 浏览: 196
在CUPS中,可以使用`cupsGetJobs()`函数来获取系统中所有打印作业的列表。该函数返回一个由`cups_job_t`结构体组成的数组,其中每个结构体表示一个打印作业。每个`cups_job_t`结构体包含以下字段:
- `job_id`:打印作业的唯一标识符。
- `dest`:打印作业的目标打印机。
- `title`:打印作业的标题。
- `user`:提交打印作业的用户。
- `state`:打印作业的状态。
- `size`:打印作业的大小(以字节为单位)。
- `completed_time`:打印作业完成的时间戳。
要根据任务ID获取特定打印作业的信息,可以使用`cupsGetJob()`函数。该函数需要传递要检索的打印作业的ID和一个指向`cups_job_t`结构体的指针。如果函数成功,则会将作业信息填充到该结构体中。
相关问题
如何使用根据打印任务id 使用cups接口 获取到打印份数
您可以使用CUPS API中的cupsGetJobs函数获取打印任务的信息,其中包括打印份数。具体操作步骤如下:
1. 首先,您需要打开一个CUPS连接,可以使用cupsConnect函数进行连接。
2. 然后,您可以使用cupsGetJobs函数获取打印任务的信息。该函数需要传入一个打印机名称和一个打印任务ID。例如,如果您要获取打印机名称为“myprinter”的打印任务ID为123的打印任务的信息,可以使用以下代码:
```
cups_dest_t *dest;
cups_job_t *job;
int num_jobs;
dest = cupsGetDest("myprinter", NULL, num_dests, dests);
job = cupsGetJobs(dest->name, 123, 1, NULL, 0);
if (job != NULL) {
printf("Print job %d has %d copies\n", job->id, job->copies);
cupsFreeJob(job);
}
```
在这个例子中,cupsGetDest函数用于获取打印机名称为“myprinter”的打印机的信息,cupsGetJobs函数用于获取打印机名称为“myprinter”的打印任务ID为123的打印任务的信息,其中job->copies表示打印任务的份数。
3. 最后,您需要关闭CUPS连接,可以使用cupsDisconnect函数进行关闭。
注意,以上代码仅为示例,实际使用时需要根据具体情况进行修改。同时,如果您想获取多个打印任务的信息,可以多次调用cupsGetJobs函数。
如何使用根据打印任务id 使用cups接口 获取到打印页数
使用 CUPS API 获取打印作业的页数,可以按照以下步骤进行:
1. 使用 `cupsGetJobs()` 函数获取到打印作业的列表,该函数返回一个 `cups_jobs_t` 结构体指针,指向一个包含打印作业信息的数组。
```c
cups_jobs_t *jobs = cupsGetJobs(NULL, NULL, 0, NULL);
```
2. 遍历 `jobs` 数组,查找指定 ID 的打印作业,并获取其 URI (Uniform Resource Identifier)。
```c
const char *job_uri = NULL;
for (int i = 0; i < jobs->num_jobs; i++) {
if (jobs->jobs[i].id == job_id) {
job_uri = jobs->jobs[i].job_uri;
break;
}
}
```
3. 使用 `cupsGetJobAttributes()` 函数获取指定作业的属性列表,其中包括打印页数。通过 `ippFindAttribute()` 函数查找 `job-media-sheets-completed` 属性,该属性表示已打印的页数。
```c
ipp_t *attrs = cupsGetJobAttributes(job_uri, NULL, 0);
ipp_attribute_t *attr = ippFindAttribute(attrs, "job-media-sheets-completed", IPP_TAG_INTEGER);
if (attr != NULL) {
int page_count = attr->values[0].integer;
printf("Job %d page count: %d\n", job_id, page_count);
}
```
完整的代码示例如下:
```c
#include <stdio.h>
#include <cups/cups.h>
int main(int argc, char *argv[]) {
int job_id = 123; // 假设要查询的作业 ID 为 123
// 获取打印作业列表
cups_jobs_t *jobs = cupsGetJobs(NULL, NULL, 0, NULL);
// 查找指定 ID 的打印作业,并获取其 URI
const char *job_uri = NULL;
for (int i = 0; i < jobs->num_jobs; i++) {
if (jobs->jobs[i].id == job_id) {
job_uri = jobs->jobs[i].job_uri;
break;
}
}
// 获取指定作业的属性列表,查找打印页数属性
ipp_t *attrs = cupsGetJobAttributes(job_uri, NULL, 0);
ipp_attribute_t *attr = ippFindAttribute(attrs, "job-media-sheets-completed", IPP_TAG_INTEGER);
if (attr != NULL) {
int page_count = attr->values[0].integer;
printf("Job %d page count: %d\n", job_id, page_count);
}
// 释放内存
cupsFreeJobs(jobs);
ippDelete(attrs);
return 0;
}
```
注意:使用 CUPS API 需要链接 libcups 库,编译时需要加上 `-lcups` 选项。
阅读全文