使用GDI+、文件和目录和打印API,批量将图片按文件名分组打包成PDF

代码写了两个小时,速度太慢(包括学习文档的时间)

cpp 复制代码
#include <stdio.h>
#include <Windows.h>
#include <gdiplus.h>
#include <string.h>
using namespace Gdiplus;
#pragma comment(lib, "Gdiplus.lib")
enum {
	IDLEN=30,
	FNAME=IDLEN+5,//.pdf
};

int main(void) {
	GdiplusStartupInput gsi;
	ULONG_PTR tok;
	GdiplusStartup(&tok,&gsi,nullptr);
	HDC print=CreateDCA("WINSPOOL","Microsoft Print to PDF",nullptr,nullptr);

	SetCurrentDirectoryA("D:\\pic2pdf");
	WIN32_FIND_DATAW fd;
	HANDLE hf=FindFirstFileW(L"*.jpg",&fd);
	if (hf) {
		puts("找到了jpg文件");

		wchar_t f[FNAME];
		wchar_t* p=wcschr(fd.cFileName,L'_');
		wcsncpy(f,fd.cFileName,p-fd.cFileName);
		wcscpy(p-fd.cFileName+f,L".pdf");

		DOCINFOW doc{};
		doc.cbSize=sizeof doc;
		doc.lpszDocName=doc.lpszOutput=f;
		StartDocW(print,&doc);
		StartPage(print);
		Graphics g(print);

		while (true) {
			Image img(fd.cFileName);
			g.DrawImage(&img,0,0);
			EndPage(print);

			if (FindNextFileW(hf,&fd)) {
				wchar_t f1[FNAME];
				p=wcschr(fd.cFileName,L'_');
				wcsncpy(f1,fd.cFileName,p-fd.cFileName);
				wcscpy(p-fd.cFileName+f1,L".pdf");
				if (wcscmp(f,f1)) {
					EndDoc(print);
					wprintf(L"%s\n",f);
					wcscpy(f,f1);
					StartDocW(print,&doc);
				}
			} else {
				EndDoc(print);
				wprintf(L"%s\n",f);
				break;
			}
		};
	}
	return 0;
}
相关推荐
fs哆哆19 分钟前
PDF工具(绿色单文件,免费)
pdf
AA陈超1 小时前
虚幻引擎5 GAS开发俯视角RPG游戏 P06-14 属性菜单 - 文本值行
c++·游戏·ue5·游戏引擎·虚幻
云知谷1 小时前
【经典书籍】C++ Primer 第15章类虚函数与多态 “友元、异常和其他高级特性” 精华讲解
c语言·开发语言·c++·软件工程·团队开发
weixin_582985182 小时前
OpenCV cv::Mat.type() 以及类型数据转换
c++·opencv·计算机视觉
想学全栈的菜鸟阿董5 小时前
CrewAI 核心概念 团队(Crews)篇
windows
梦昼初DawnDream5 小时前
防火墙规则设置
linux·服务器·windows
oioihoii5 小时前
深入理解 C++ 现代类型推导:从 auto 到 decltype 与完美转发
java·开发语言·c++
报错小能手5 小时前
项目——基于C/S架构的预约系统平台 (1)
开发语言·c++·笔记·学习·架构
lingran__5 小时前
算法沉淀第十天(牛客2025秋季算法编程训练联赛2-基础组 和 奇怪的电梯)
c++·算法
TextIn智能文档云平台5 小时前
如何让AI更好地理解中文PDF中的复杂格式?
人工智能·pdf