主页 > IT业界  > 

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

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

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

#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; }
标签:

使用GDI+、文件和目录和打印API,批量将图片按文件名分组打包成PDF由讯客互联IT业界栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“使用GDI+、文件和目录和打印API,批量将图片按文件名分组打包成PDF