news 2026/9/6 17:41:52

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/9/7 2:10:17

基于最优指派策略的弹道导弹目标数据关联算法

本文仅供学习使用&#xff0c;如有侵权&#xff0c;请私信联系本人删除Data Association Algorithm for Ballistic MissileTarget based on Optimal Assignment Strategy基于最优指派策略的弹道导弹目标数据关联算法文章脉络全文概述本文针对弹道导弹目标在突防过程中面临的密集…

作者头像 李华
网站建设 2026/9/7 6:46:41

通达信主图MACD

{}高1:REF(HHV(H,150),3); 低1:REF(LLV(L,150),3); H3:高1-(高1-低1)*0.5; 中轴:REFDATE(H3,DATE); B1:EMA(C,12); B2:EMA(C,26); B3:B1-B2; WDIF:EMA(EMA(EMA(C,3),3),3)B3,COLORWHITE; WDEA:EMA(WDIF,9),COLORMAGENTA,LINETHICK3; MACD:2*(WDIF-WDEA);{} STICKLINE(MACD>0…

作者头像 李华
网站建设 2026/9/6 8:04:41

Mistral 3 模型解析与部署实战:从 Large 3 到 Mini-stral

总部位于巴黎的 Mistral AI 宣布推出其最新一代 ​开源权重模型家族​&#xff0c;包括 Mistral Large 3 以及另外三款小型、稠密模型。所有模型均采用 Apache​ 2.0 许可证 发布&#xff0c;这意味着它们可以​自由用于商业用途、自行托管以及微调​。 Mistral 可以说是欧洲“…

作者头像 李华
网站建设 2026/9/6 7:10:03

2025网络安全学习路线 非常详细 推荐学习

关键词&#xff1a;网络安全入门、渗透测试学习、零基础学安全、网络安全学习路线 首先咱们聊聊&#xff0c;学习网络安全方向通常会有哪些问题 1、打基础时间太长 学基础花费很长时间&#xff0c;光语言都有几门&#xff0c;有些人会倒在学习 linux 系统及命令的路上&#…

作者头像 李华
网站建设 2026/9/7 8:25:10

测试必知:线上出现BUG,该怎么办!

在讲解故障处理思路前&#xff0c;先讲一个故障场景&#xff08;以呼叫中心系统作为一例子&#xff09;&#xff1a; 业务人员反映呼叫中心系统运行缓慢&#xff0c;部份电话在自助语言环节系统处理超时&#xff0c;话务转人工座席&#xff0c;人工座席出现爆线情况。 运维人…

作者头像 李华
网站建设 2026/9/7 8:29:00

【C++】学生管理系统设计与实现丨SQLite数据库版本

摘要 本文详细介绍了一个使用C和SQLite数据库开发的学生管理系统的设计与实现。该系统采用模块化设计&#xff0c;结合了面向对象编程思想和数据库技术&#xff0c;实现了学生信息的增删改查、成绩统计分析、数据持久化等功能。系统具有结构清晰、功能完整、数据安全等特点&am…

作者头像 李华