在Linux环境下获取打印机打印队列中的文件的路径

最近工作需要用到libcups,想获取被打印文件的路径,可以最终获取到的都是文件名,请问有没有朋友知道怎样获取到打印机中打印队列中文件的具体路径呢?

引用 皆我百晓生 小程序回复内容作答:
可以使用CUPS API中的函数来获取打印队列中文件的具体路径。具体步骤如下:

  1. 首先,需要安装libcups库。在Ubuntu中可以使用以下命令安装:
sudo apt-get install libcups2-dev
  1. 在C代码中,包含以下头文件:
#include <cups/cups.h>
#include <cups/file.h>
  1. 初始化CUPS API:
cupsInitialize(NULL, NULL, 0);
  1. 获取打印队列中的文件列表:
int numJobs;
cups_job_t *jobs = cupsGetJobs(&numJobs, NULL, 0, CUPS_WHICHJOBS_ALL);
  1. 遍历文件列表,获取每个文件的路径:
for (int i = 0; i < numJobs; ++i) {
    cups_job_t *job = cupsGetJob(jobs[i].id, NULL, 0);
    const char *filePath = cupsFileWhere(job->dest);
    printf("File path: %s\n", filePath);
    cupsFreeJob(job);
}
  1. 释放资源:
cupsFreeJobs(numJobs, jobs);
cupsTerminate();

注意:上述代码仅提供了获取打印队列中文件路径的基本逻辑,实际使用时需要进行错误处理和适当的调整。

希望以上信息对你有所帮助!

【以下回答由 GPT 生成】

您可以使用C++代码来获取打印机打印队列中文件的路径。下面是一个示例代码,使用libcups库来实现:

#include <cups/cups.h>

int main() {
    // 初始化cups连接
    cups_dest_t *dests, *current_dest;
    int num_dests = cupsGetDests(&dests);

    // 遍历所有打印机
    for (int i = 0; i < num_dests; i++) {
        current_dest = dests + i;

        // 获取打印队列信息
        cups_job_t *jobs;
        int num_jobs = cupsGetJobs(&jobs, current_dest->name, 0, CUPS_WHICHJOBS_ALL);

        // 遍历打印队列中的文件
        for (int j = 0; j < num_jobs; j++) {
            cups_job_t *current_job = jobs + j;

            // 打印文件的路径
            const char *job_file_path = current_job->filename;

            // 输出文件路径
            printf("File Path: %s\n", job_file_path);
        }

        // 释放打印队列信息
        cupsFreeJobs(num_jobs, jobs);
    }


    // 释放cups连接
    cupsFreeDests(num_dests, dests);

    return 0;
}

请注意,您需要在编译时链接libcups库。例如,使用gcc编译器编译代码:g++ -o print_queue print_queue.cpp -lcups

这段代码将遍历所有打印机的打印队列,并输出每个文件的路径。您可以根据需要进行进一步的处理和修改。希望能对您有所帮助!


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^