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

如何用Pdfium在VB.NET中打印实际尺寸的A6标签(去除空白)

解决Pdfium打印A4中嵌入的A6标签实际尺寸打印问题

我从第三方获取的运单标签是A6尺寸,但被嵌入在A4格式的PDF页面中。我用VB.NET脚本通过API获取文件,希望用Pdfium在无交互、无预览的情况下打印。需求是把A4页面左上角的A6标签按实际尺寸打印到A6标签打印机,但使用CutMargin模式时,整个A4页面会被压缩到A6标签上,请问如何去除空白或实现实际尺寸打印?

原代码:

Dim document As PdfDocument = PdfDocument.Load(pdfPath)
        'Using document As PdfDocument = PdfDocument.Load(pdfPath)
        ' Erstelle einen neuen PrintDocument
        Using printDoc = document.CreatePrintDocument(PdfiumViewer.PdfPrintMode.CutMargin)
            ' Setze den Drucker
            printDoc.PrinterSettings.PrinterName = printerName
            printDoc.Print()

        End Using

解决方案思路

CutMargin模式会将整个PDF页面缩放到打印介质尺寸,这不符合需求。我们需要指定打印A4页面中的A6区域,并使用ActualSize模式保证尺寸准确,或者先裁剪PDF生成纯A6页面再打印。

方法一:打印时直接指定裁剪区域

通过设置打印文档的可打印区域,只选取A4页面左上角的A6部分,同时强制使用A6纸张尺寸:

Dim document As PdfDocument = PdfDocument.Load(pdfPath)
Using printDoc = document.CreatePrintDocument(PdfiumViewer.PdfPrintMode.ActualSize)
    printDoc.PrinterSettings.PrinterName = printerName
    
    ' 转换A6尺寸到PDF点(1mm≈2.83465点)
    Dim a6WidthPoints = 105 * 2.83465
    Dim a6HeightPoints = 148 * 2.83465
    Dim originalPage = document.Pages(0)
    
    ' PDF坐标原点在左下角,所以左上角区域的Y范围是 原页面高度 - A6高度 到 原页面高度
    Dim printArea = New RectangleF(0, originalPage.Height - a6HeightPoints, a6WidthPoints, a6HeightPoints)
    
    ' 设置可打印区域为左上角的A6范围
    printDoc.DefaultPageSettings.PrintableArea = printArea
    ' 强制打印机使用A6纸张
    printDoc.DefaultPageSettings.PaperSize = New PaperSize(PaperName.A6, a6WidthPoints, a6HeightPoints)
    
    printDoc.Print()
End Using

方法二:先裁剪PDF生成A6文档再打印

先从原A4页面中裁剪出左上角的A6区域,生成新的PDF文档后再打印,避免打印时的区域计算误差:

Dim originalDoc As PdfDocument = PdfDocument.Load(pdfPath)
Using newDoc = New PdfDocument()
    Dim originalPage = originalDoc.Pages(0)
    Dim a6Width = 105 * 2.83465
    Dim a6Height = 148 * 2.83465
    
    ' 裁剪原页面的左上角A6区域(PDF坐标:左下为原点,所以Y轴从原页面高度减A6高度开始)
    Dim cropRect = New PdfRectangle(0, originalPage.Height - a6Height, a6Width, originalPage.Height)
    newDoc.AddPage(originalPage, cropRect)
    
    ' 打印新生成的A6文档
    Using printDoc = newDoc.CreatePrintDocument(PdfiumViewer.PdfPrintMode.ActualSize)
        printDoc.PrinterSettings.PrinterName = printerName
        printDoc.DefaultPageSettings.PaperSize = New PaperSize(PaperName.A6, a6Width, a6Height)
        printDoc.Print()
    End Using
End Using
originalDoc.Dispose()

注意事项

  • 确认目标打印机支持A6纸张,且已正确配置(若代码中强制指定纸张尺寸,需确保打印机能识别)。
  • 若运单标签不在第一页,调整代码中的页面索引(document.Pages(0))即可。
  • PDF的坐标系统以页面左下角为原点,所以计算裁剪区域的Y坐标时需要用原页面高度减去A6高度,才能定位到左上角区域。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 19:50:20