You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用PrintDocument打印图片右侧被裁切,设无边距仍无效的解决方法

解决PrintDocument打印图片右侧裁切的问题

核心问题分析

你直接用e.Graphics.DrawImage(img, 0, 0)绘制图片时,忽略了两个关键限制:

  1. 多数打印机存在硬件最小边距限制,强制设置0边距不会生效,超出可打印区域的内容会被自动裁切
  2. 图片尺寸与纸张尺寸比例不匹配时,直接绘制会导致部分内容超出纸张范围

解决方案

1. 基于打印机实际可打印区域适配图片

修改PrintDocument_PrintPage方法的绘制逻辑,先获取打印机支持的可打印区域,再按比例缩放图片,确保内容完全落在区域内:

private void PrintDocument_PrintPage(object sender, PrintPageEventArgs e)
{
    int savePage = iv.Image.Page;
    try
    {
        iv.Image.Page = _printPage;
        _printPage++;

        using (Image img = RasterImageConverter.ConvertToImage(iv.Image, ConvertToImageOptions.None))
        {
            if (LeadToolsHelper.CanRunPrintPreview)
            {
                // 获取打印机实际可打印区域(已自动适配硬件边距限制)
                Rectangle printArea = e.MarginBounds;

                // 计算缩放比例,保持图片宽高比,避免拉伸变形
                float scaleX = (float)printArea.Width / img.Width;
                float scaleY = (float)printArea.Height / img.Height;
                float scaleFactor = Math.Min(scaleX, scaleY);

                // 计算居中绘制的坐标(若不需要居中,可直接用printArea.Left/Top)
                int drawX = printArea.Left + (int)((printArea.Width - img.Width * scaleFactor) / 2);
                int drawY = printArea.Top + (int)((printArea.Height - img.Height * scaleFactor) / 2);

                // 绘制缩放后的图片
                e.Graphics.DrawImage(img, drawX, drawY, 
                    (int)(img.Width * scaleFactor), 
                    (int)(img.Height * scaleFactor));
            }
        }

        e.HasMorePages = _printPage <= iv.Image.PageCount;
        if (_printPage > iv.Image.PageCount)
            _printPage = 1;
    }
    finally
    {
        iv.Image.Page = savePage;
    }
}

2. 确保纸张尺寸与图片匹配

如果图片是固定尺寸(比如A4),显式设置打印文档的纸张尺寸,避免打印机自动适配错误:

// 在初始化_printDocument时添加
_printDocument.DefaultPageSettings.PaperSize = new PaperSize(PaperName.A4, 827, 1169); 
// 注:参数单位为百分之一英寸,A4标准尺寸210mm×297mm对应827×1169

3. 边距设置的补充说明

不要强制设置0边距,因为大部分打印机不支持该操作。正确做法是使用e.MarginBounds获取打印机允许的最大可打印区域,该值已自动考虑硬件限制。

内容的提问来源于stack exchange,提问作者Arvo Bowen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 04:11:08