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

使用PdfiumViewer横向打印PDF时内容截断,寻求技术解决方案

横向打印PDF内容截断的解决思路

这个问题在PdfiumViewer用户中比较常见,核心是横向打印时页面尺寸、缩放与打印机物理限制的适配问题,以下是几个可行的修复方案:

1. 手动控制打印缩放适配

通过PrintPage事件计算缩放比例,强制PDF内容适配打印机的可打印区域,避免截断:

public void PrintPDF(string printerName, string filePath)
{
    var printerSettings = new PrinterSettings
    {
        PrinterName = printerName
    };

    var pageSettings = new PageSettings(printerSettings)
    {
        Landscape = true,
        Margins = new Margins(0, 0, 0, 0),
    };

    using (var document = PdfDocument.Load(filePath))
    {
        using (var printDocument = document.CreatePrintDocument())
        {
            printDocument.PrinterSettings = printerSettings;
            printDocument.DefaultPageSettings = pageSettings;
            printDocument.PrintController = new StandardPrintController();

            printDocument.PrintPage += (sender, e) =>
            {
                var pdfPage = document.Pages[e.PageSettings.PrinterSettings.FromPage - 1];
                var pdfSize = new SizeF(pdfPage.Width, pdfPage.Height);
                var printArea = e.PageSettings.PrintableArea;

                // 计算适配比例,取宽高中较小的那个避免溢出
                var scale = Math.Min(printArea.Width / pdfSize.Width, printArea.Height / pdfSize.Height);
                
                // 应用缩放
                e.Graphics.ScaleTransform(scale, scale);
                // 可选:添加偏移让内容居中
                var offsetX = (e.PageBounds.Width - pdfSize.Width * scale) / 2;
                var offsetY = (e.PageBounds.Height - pdfSize.Height * scale) / 2;
                e.Graphics.TranslateTransform(offsetX, offsetY);
            };

            printDocument.Print();
        }
    }
}

2. 使用内置的FitToPage打印模式

PdfiumViewer提供了现成的缩放模式,直接调用重载方法创建PrintDocument即可:

using (var printDocument = document.CreatePrintDocument(PdfPrintMode.FitToPage))
{
    printDocument.PrinterSettings = printerSettings;
    printDocument.DefaultPageSettings = pageSettings;
    printDocument.PrintController = new StandardPrintController();
    printDocument.Print();
}

3. 指定匹配的纸张尺寸

如果PDF有固定页面尺寸(比如A4横向),手动设置纸张参数避免打印机自动切换不匹配的规格:

// 手动设置A4横向纸张尺寸(单位:百分之一英寸)
pageSettings.PaperSize = new PaperSize(PaperName.A4, 1169, 827);
pageSettings.Landscape = true;

4. 考虑打印机物理边距限制

多数打印机存在不可打印的物理边距,即使设置Margins为0也无法突破。可以:

  • 检查打印机驱动设置,启用“无边距打印”选项(如果支持)
  • 在PrintPage事件中微调内容偏移,避开不可打印区域

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 20:12:43