news 2026/4/23 6:54:58

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/4/22 1:22:59

[服务器应用开发教程]第二节-使用java让服务器忙起来

第一部分&#xff1a;为什么是java&#xff1f;如何在liunx上安装java&#xff1f;最核心的一点&#xff1a;java“一次编写&#xff0c;到处运行” 的理念给予了它极为优异的跨平台性能。Java 支持 Linux、Windows、ARM/x86 等环境&#xff0c;并与 Kubernetes、Docker 无缝集…

作者头像 李华
网站建设 2026/4/19 0:26:43

太缺人了!投了AI应用开发岗,仅3小时,邀约不断!

有人发帖分享自己找工作过程中对市场的感知&#xff0c;并立即调整求职策略&#xff0c;从Java后端开发岗转投AI应用开发岗。 通过验证&#xff0c;ta发现&#xff1a;AI应用开发岗真的缺人&#xff0c;双非学历有机会&#xff0c;并且薪资待遇好。 晚上8点-11点&#xff0c;…

作者头像 李华
网站建设 2026/4/21 14:50:02

36、UNIX系统用户管理与公共关系策略

UNIX系统用户管理与公共关系策略 在UNIX系统管理中,用户管理和公共关系是至关重要的两个方面。良好的用户管理能够确保新用户顺利融入系统环境,高效开展工作;而有效的公共关系则有助于提升用户满意度,增强用户对系统管理员的信任。下面我们将详细探讨这两个方面的具体内容…

作者头像 李华
网站建设 2026/4/22 18:54:31

Kotaemon ERP系统对接:SAP/Oracle信息即时查询

Kotaemon ERP系统对接&#xff1a;SAP/Oracle信息即时查询 在大型企业中&#xff0c;每天都有成百上千的员工需要访问ERP系统来获取客户信用额度、订单状态或库存余量。但现实是&#xff0c;大多数人并不熟悉SAP事务码或Oracle EBS的菜单路径&#xff0c;更不用说写SQL查询了。…

作者头像 李华
网站建设 2026/4/20 1:14:47

dify+echart数据可视化

基于difyechart进行数据可视化文档提取器的大模型prompt参数提取器&#xff1a;将大模型提取的csv文档中数据转化为csvdata数据将大模型识别的数据转化为json数据参数提取器&#xff1a;转换为json数据代码执行器&#xff1a;通过解析json数据&#xff0c;填充到echart模版的中…

作者头像 李华
网站建设 2026/4/23 0:59:15

Java面试内卷加剧,普通程序员如何破局?

大家都知道&#xff0c;现在的Java面试是越来越难了&#xff01;主要原因无非是两个&#xff1a;Java比前两年坑少人多&#xff01;大量人才涌入&#xff0c;导致岗位竞争越来越大&#xff0c;面试也就越来越难&#xff01;另外一个&#xff0c;很多公司都宣布倒闭、裁员。加上…

作者头像 李华