news 2026/6/15 19:14:54

PDF压缩

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
PDF压缩

winnzip项目pdf压缩部分

/** * 压缩PDF文件 * @param inputFile 输入PDF文件路径 * @param outputFile 输出PDF文件路径 * @param compressionLevel 压缩等级: 0=小尺寸, 1=中等尺寸, 2=大尺寸 * @param lossless 是否无损压缩 * @return 压缩是否成功 */

使用Ghostscript命令行方式进行pdf压缩,这个东西自己找,开源的。

检查文件是否存在

static bool fileExists(const std::string& filePath) { DWORD const attr = GetFileAttributes(CommonTool::charToWchar(filePath).c_str()); return (attr != INVALID_FILE_ATTRIBUTES && !(attr & FILE_ATTRIBUTE_DIRECTORY)); }

如果文件属性有效并且不是一个目录即存在,返回验证结果。

构造gs命令

static std::string constructGSCommand(const std::string& inputFile, const std::string& outputFile, int compressionLevel, bool lossless) { std::string command = "gswin64c.exe -sDEVICE=pdfwrite \"-dCompatibilityLevel=1.4\" -dNOPAUSE -dBATCH -dQUIET"; // 根据压缩等级设置压缩参数 switch (compressionLevel) { case 0: // Small size command += " -dPDFSETTINGS=/screen -dEmbedAllFonts=true"; break; case 1: // Medium size command += " -dPDFSETTINGS=/ebook -dEmbedAllFonts=true"; break; case 2: command += " -dPDFSETTINGS=/printer"; break; default: command += " -dPDFSETTINGS=/default"; break; } // 如果是无损压缩,使用默认设置 if (lossless) { command += " -dAutoFilterColorImages=false -dColorImageFilter=/FlateEncode"; } command += " -sOutputFile=\"" + outputFile + "\" \"" + inputFile + "\""; spdlog::debug("Constructed gs command: {}", command); return command; }

参数输入文件,输出文件,压缩等级,是否无损压缩,根据参数进行字符串拼接。

执行命令行

static int executeCommand(const std::string& command) { STARTUPINFO si; PROCESS_INFORMATION pi; ZeroMemory(&si, sizeof(si)); si.cb = sizeof(si); ZeroMemory(&pi, sizeof(pi)); std::array<WCHAR, 1024> buffer{}; wcscpy_s(buffer.data(), buffer.size(), CommonTool::charToWchar(command).c_str()); // 创建不带窗口的进程 if (!CreateProcess(nullptr, buffer.data(), nullptr, nullptr, FALSE, CREATE_NO_WINDOW, nullptr, nullptr, &si, &pi)) { spdlog::error("Failed to create process for command: {}", command); return -1; } // 等待进程结束 WaitForSingleObject(pi.hProcess, INFINITE); DWORD exit_code = 0; GetExitCodeProcess(pi.hProcess, &exit_code); // 关闭句柄 CloseHandle(pi.hProcess); CloseHandle(pi.hThread); return static_cast<int>(exit_code); }

压缩PDF的主函数

static int compressPDF(const std::string& inputFile, const std::string& outputFile, int compressionLevel, bool lossless) { try { // 检查输入文件是否存在 if (!fileExists(inputFile)) { spdlog::error("Input file does not exist: {}", inputFile); return false; } std::string const command = constructGSCommand(inputFile, outputFile, compressionLevel, lossless); // 执行命令 int const result = executeCommand(command); return result; } catch (const std::exception& e) { spdlog::error("Exception during PDF compression: {}", e.what()); return -1; } }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/15 17:53:59

Kotaemon科研项目申报书辅助撰写

Kotaemon科研项目申报书辅助撰写 在高校和科研院所&#xff0c;每年一度的国家自然科学基金申报季总伴随着高强度的写作压力。研究人员不仅要构思创新性强的科学问题&#xff0c;还需将复杂的技术路线转化为符合评审规范的文本表达。许多青年学者面对“立项依据怎么写”“创新点…

作者头像 李华
网站建设 2026/6/15 15:34:21

通达信庄散资金流 源码

{}JJ:(HIGHLOWCLOSE)/3; QJ0:AMOUNT/IF(HIGHLOW,4,HIGH-LOW); 主买:ABS(QJ0*(JJ-MIN(CLOSE,OPEN))),COLORRED,LINETHICK0; 主卖:(QJ0*(MIN(OPEN,CLOSE)-LOW)),COLORLIBLUE,LINETHICK0; 散买:(QJ0*(HIGH-MAX(OPEN,CLOSE))),LINETHICK0; 散卖:ABS(QJ0*(MAX(CLOSE,OPEN)-JJ)),COLO…

作者头像 李华
网站建设 2026/6/14 7:13:56

MindSpore案例分享:基于端侧图像分类的智慧园艺应用

一、项目背景与痛点某智慧园艺科技公司在开发智能植物养护系统时&#xff0c;面临核心挑战&#xff1a;需在摄像头设备上实时识别30种常见花卉&#xff0c;以提供针对性养护建议。传统方案采用云端推理&#xff0c;但受网络延迟、隐私及成本限制&#xff0c;难以满足用户对实时…

作者头像 李华
网站建设 2026/6/15 13:46:20

从AI应用需求出发,一文全面理解提示词、上下文工程及RAG

如果prompt、上下文、记忆、知识库、RAG这些概念在你的脑海里也有一些些零碎和杂糅&#xff0c;那么我们不妨一起尝试厘清。 2025年被称为“智能体元年”&#xff0c;在智能体的概念还没有深入人心之前&#xff0c;我们所使用的聊天型应用主要是基于大模型而提供的&#xff0c…

作者头像 李华
网站建设 2026/6/15 3:36:24

FlyMcu-串口下载程序

FlyMcu-串口下载程序让工程生成hex文件勾选Create Hex File编译后就可以在工程目录的Objects目录下找到Hex文件了使用FlyMcu下载程序搜索串口打开对应的hex文件切换boot引脚&#xff0c;使其为boot1点击开始编程&#xff0c;就可成功下载运行程序切换为boot0按一下Reset按键

作者头像 李华
网站建设 2026/6/14 1:43:50

法治政府建设相关标语

全面建设职能科学、权责法定、执法严明、公开公正、智能高效、廉洁诚信、人民满意的法治政府

作者头像 李华