开启Microsoft Print To PDF开启自定纸张 C#

有时需要测试打印效果,Microsoft Print To PDF不能设定自定义指定大小,所以写了个软件实现,以下是C#部分代码

cs 复制代码
          private void btn_开启自定纸张_Click(object sender, EventArgs e)
        {
            try
            {
                // 读取注册表值
                string driverDirectory = ReadRegistryValue();
                if (string.IsNullOrEmpty(driverDirectory))
                {
                    LogMessage("无法获取打印机驱动目录!");
                    return;
                }
                string V4Dir = "C:\\Windows\\System32\\spool\\V4Dirs\\";
                // 查找并修改GPD文件
                ModifyGpdFiles_AddStr($"{V4Dir}{driverDirectory}");

                LogMessage("自定义纸张设置已开启");
            }
            catch (Exception ex)
            {
                LogMessage($"操作失败: {ex.Message}");
            }
        }

      private void ModifyGpdFiles_AddStr(string driverDirectory)
        {
            if (!Directory.Exists(driverDirectory))
            {
                LogMessage($"驱动目录不存在: {driverDirectory}");
                return;
            }

            string[] gpdFiles = Directory.GetFiles(driverDirectory, "*.gpd");
            if (gpdFiles.Length == 0)
            {
                LogMessage($"在目录中未找到GPD文件: {driverDirectory}");
                return;
            }

            string customSizeOption = 
@"*Option: CUSTOMSIZE
{
*rcNameID: =USER_DEFINED_SIZE_DISPLAY
*MinSize: PAIR(0, 0)
*MaxSize: PAIR(5346000, 7560000)
*MaxPrintableWidth: 5346000
}";
            foreach (string gpdFile in gpdFiles)
            {
                try
                {
                    string content = File.ReadAllText(gpdFile, Encoding.Default);

                    // 检查是否已存在CUSTOMSIZE选项
                    if (!content.Contains("*Option: CUSTOMSIZE"))
                    {
                        // 查找*Option: A5部分
                        int optionA5Index = content.IndexOf("*Option: A4");
                        if (optionA5Index >= 0)
                        {
                            // 在A5选项前插入自定义纸张选项
                            string modifiedContent = content.Insert(optionA5Index, customSizeOption + Environment.NewLine);
                            File.WriteAllText(gpdFile, modifiedContent, Encoding.Default);
                            LogMessage($"已在A5选项前添加内容: {gpdFile}");
                        }
                        else
                        {
                            LogMessage($"未找到A5选项,跳过文件: {gpdFile}");
                        }
                    }
                    else
                    {
                        LogMessage($"{gpdFile}文件已包含自定义纸张设置");
                    }
                }
                catch (Exception ex)
                {
                    LogMessage($"处理文件时出错 {Path.GetFileName(gpdFile)}: {ex.Message}");
                }
            }
        }

效果

相关推荐
Dreams°1231 天前
进阶实战:Wan2.2-T2V-A5B 实现可点击跳转的互动式教育视频
算法·microsoft·ai·音视频
开开心心_Every1 天前
家长控制电脑软件:定时锁屏管理使用时长
网络协议·tcp/ip·游戏·微信·pdf·excel·语音识别
开开心心就好1 天前
免费抽奖工具支持批量导入+自定义主题
linux·运维·服务器·macos·pdf·phpstorm·1024程序员节
软件资深者2 天前
Win10/Win11可装的Win7经典小游戏合集
windows·microsoft·windows11
Sinokap2 天前
微软自研 AI 芯片 Maia 200 正式亮相:算力竞争进入“基础设施内卷”阶段
人工智能·microsoft
赋创小助手2 天前
Maia 200 技术拆解:微软云端 AI 推理加速器的设计取舍
服务器·人工智能·科技·深度学习·神经网络·microsoft·自然语言处理
pass_port_csdn2 天前
zotero搬家,迁移换机/重装100% 完美克隆指南:文献PDF、插件配置、文献分类、标签、笔记等所有信息全克隆
笔记·pdf·zotero
开开心心_Every2 天前
电脑定时休息软件:久坐提醒养成活动习惯
游戏·微信·pdf·excel·语音识别·散列表·启发式算法
vlln2 天前
【调研报告】PDF解析技术现状与趋势:从人类阅读到大模型适配的需求
pdf
FreeBuf_2 天前
微软紧急更新修复Office 0Day漏洞(CVE-2026-21509)
microsoft