【图片合并转换PDF】如何将每个文件夹下的图片转化成PDF并合并成一个文件?下面基于C++的方式教你实现

ops/2025/2/11 8:02:15/

医院在为患者进行诊断和治疗过程中,会产生大量的医学影像图片,如 X 光片、CT 扫描图、MRI 图像等。这些图片通常会按照检查时间或者检查项目存放在不同的文件夹中。为了方便医生查阅和患者病历的长期保存,需要将每个患者文件夹下的图片合并成一个 PDF 文件。

使用方式:医院的档案管理人员将患者的影像资料文件夹整理好,运行程序生成包含所有影像图片的 PDF 病历,便于在不同科室之间共享和远程医疗会诊。

要在 C++ 中实现将每个文件夹下的图片转化为 PDF 并合并成一个文件,可以使用一些第三方库,比如Magick++用于处理图片,Poppler用于处理 PDF(虽然 Poppler 主要用于 PDF 读取,但结合其他操作也可用于创建 PDF)。

以下是一个示例代码,使用Magick++库来将图片转换为 PDF 并合并:

首先,确保你已经安装了Magick++库。在 Ubuntu 上,可以使用以下命令安装:

bash

sudo apt-get install libmagick++-dev

下面是示例代码:

cpp

#include <iostream>
#include <vector>
#include <Magick++.h>
#include <filesystem>namespace fs = std::filesystem;// 获取指定目录下的所有图片文件路径
std::vector<fs::path> getImageFiles(const fs::path& directory) {std::vector<fs::path> imageFiles;for (const auto& entry : fs::recursive_directory_iterator(directory)) {if (entry.is_regular_file() && (entry.path().extension() == ".jpg" || entry.path().extension() == ".jpeg" || entry.path().extension() == ".png")) {imageFiles.push_back(entry.path());}}return imageFiles;
}// 将图片转换为PDF并合并
void imagesToCombinedPDF(const std::vector<fs::path>& imagePaths, const fs::path& outputPDF) {Magick::ImageList images;for (const auto& path : imagePaths) {try {Magick::Image image(path.string());image.magick("PDF");images.append(image);} catch (Magick::Exception& e) {std::cerr << "Error processing image " << path << ": " << e.what() << std::endl;}}if (!images.empty()) {try {images.write(outputPDF.string());std::cout << "Successfully created combined PDF: " << outputPDF << std::endl;} catch (Magick::Exception& e) {std::cerr << "Error writing combined PDF: " << e.what() << std::endl;}}
}int main() {Magick::InitializeMagick(nullptr);fs::path outputPDF = "combined.pdf";std::vector<fs::path> allImageFiles;// 假设当前目录下有多个文件夹,获取所有文件夹下的图片for (const auto& entry : fs::directory_iterator(".")) {if (entry.is_directory()) {auto imageFiles = getImageFiles(entry.path());allImageFiles.insert(allImageFiles.end(), imageFiles.begin(), imageFiles.end());}}imagesToCombinedPDF(allImageFiles, outputPDF);return 0;
}

这个代码实现了以下功能:

  1. getImageFiles函数用于获取指定目录及其子目录下的所有图片文件路径。
  2. imagesToCombinedPDF函数将这些图片转换为 PDF 格式,并合并到一个 PDF 文件中。
  3. main函数中,首先初始化Magick++库,然后遍历当前目录下的所有文件夹,获取所有图片文件路径,最后将这些图片合并成一个 PDF 文件。

请根据实际需求调整代码,例如图片格式支持、目录遍历逻辑等。


http://www.ppmy.cn/ops/157477.html

相关文章

【系统架构设计师】嵌入式系统之JTAG接口

目录 1. 说明2. 主要功能2.1 硬件调试2.2 边界扫描测试2.3 系统内编程&#xff08;ISP&#xff09;2.4 配置和重新配置2.5 实时监控 3. 核心组件和引脚4. 应用场景5. 使用注意事项6. 例题6.1 例题1 1. 说明 1.嵌入式系统中的JTAG&#xff08;Joint Test Action Group&#xff…

PLSQL: 存储过程,用户自定义函数[oracle]

注意: raise notice是高斯的输出语句; DBMS_OUT_PUT.PUT_LINE是oracle的输出语句 存储过程 Stored Procedure 存储过程可以封装数据访问逻辑&#xff0c;使得应用程序可以通过调用存储过程来执行这些逻辑&#xff0c;而不是直接执行SQL语句。这有助于提高代码的可重用性、可…

深入浅出:机器学习的全面解析

深入浅出&#xff1a;机器学习的全面解析 引言 机器学习&#xff08;Machine Learning, ML&#xff09;作为人工智能的一个重要分支&#xff0c;近年来取得了显著进展&#xff0c;并在多个领域中得到了广泛应用。本文将从基础概念、核心算法、应用场景以及未来发展趋势等方面…

跨越边界,大模型如何助推科技与社会的完美结合?

点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入&#xff01; 概述 2024年&#xff0c;大模型技术已成为人工智能领域的焦点。这不仅仅是一项技术进步&#xff0c;更是一次可能深刻影响社会发展方方面面的变革。大模型的交叉能否推动技术与社会的真正融合&#xff1f;2025年…

【通俗解释,入门级】DeepSeek - R1 - Zero:强化学习提升LLM推理能力的奥秘

DeepSeek - R1 - Zero&#xff1a;强化学习提升LLM推理能力的奥秘 第一节&#xff1a;强化学习在DeepSeek - R1 - Zero中的基本概念与公式解释【通俗解释】 强化学习在DeepSeek - R1 - Zero里就像是一位“聪明的探险家”&#xff0c;在各种可能的推理路径中探索&#xff0c;通…

kafka专栏解读

kafka专栏文章的编写将根据kafka架构进行编写&#xff0c;即先编辑kafka生产者相关的内容&#xff0c;再编写kafka服务端的内容&#xff08;这部分是核心&#xff0c;内容较多&#xff0c;包含kafka分区管理、日志存储、延时操作、控制器、可靠性等&#xff09;&#xff0c;最后…

SQLMesh系列教程-2:SQLMesh入门项目实战

假设你已经了解SQLMesh是什么&#xff0c;以及其他应用场景。如果没有&#xff0c;我建议你先阅读《SQLMesh系列教程-1&#xff1a;数据工程师的高效利器-SQLMesh》。 在本文中&#xff0c;我们将完成一个小项目或教程&#xff0c;以帮助你开始使用SQLMesh。你可以选择一步一步…

51单片机俄罗斯方块清屏函数

/************************************************************************************************************** * 名称&#xff1a;LED_Clr * 功能&#xff1a;清屏 * 参数&#xff1a;NULL * 返回&#xff1a;NULL * 备注&#xff1a;temp数组为动态显示数据&#xff…