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

Flutter桌面应用如何通过打印机打印图片?

Flutter桌面应用实现图片打印功能

1. 依赖配置

在项目的pubspec.yaml中添加printing和pdf依赖(printing依赖pdf生成可打印文档):

dependencies:
  flutter:
    sdk: flutter
  printing: ^5.12.0
  pdf: ^3.10.0

执行flutter pub get完成依赖安装。

2. 核心实现步骤

加载图片

支持从Asset、本地文件或网络加载图片,以下是Asset图片的加载示例:

final imageBytes = await rootBundle.load('assets/your_image.png');
final pdfImage = PdfImage.file(
  pdf.document,
  bytes: imageBytes.buffer.asUint8List(),
);

生成含图片的PDF文档

用pdf包创建包含目标图片的打印页面:

final pdf = Document();
pdf.addPage(
  Page(
    pageFormat: PdfPageFormat.a4,
    build: (context) => Center(
      child: Image(pdfImage, fit: BoxFit.contain),
    ),
  ),
);

触发打印

提供两种打印方式:

// 方式1:带预览界面的打印
PdfPreview(
  build: (context) => pdf,
);

// 方式2:直接触发打印(无预览)
await Printing.layoutPdf(
  onLayout: (format) async => pdf.save(),
);

3. 完整示例代码

import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:pdf/pdf.dart';
import 'package:pdf/widgets.dart' as pw;
import 'package:printing/printing.dart';

class ImagePrinter extends StatefulWidget {
  const ImagePrinter({super.key});

  @override
  State<ImagePrinter> createState() => _ImagePrinterState();
}

class _ImagePrinterState extends State<ImagePrinter> {
  Future<void> printTargetImage() async {
    // 加载Asset图片
    final imageData = await rootBundle.load('assets/test_print_image.png');
    final pdf = pw.Document();

    // 构建打印页面
    pdf.addPage(
      pw.Page(
        pageFormat: PdfPageFormat.a4,
        build: (pw.Context context) {
          return pw.Center(
            child: pw.Image(
              pw.PdfImage.file(
                pdf.document,
                bytes: imageData.buffer.asUint8List(),
              ),
              fit: pw.BoxFit.contain,
            ),
          );
        },
      ),
    );

    // 启动打印
    await Printing.layoutPdf(
      onLayout: (PdfPageFormat format) async => pdf.save(),
    );
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text('图片打印')),
      body: Center(
        child: ElevatedButton(
          onPressed: printTargetImage,
          child: const Text('开始打印'),
        ),
      ),
    );
  }
}

4. 注意事项

  • 图片权限与路径:本地文件图片需确保应用可读取对应路径,桌面平台一般无需额外权限,但要确认路径拼写正确。
  • 网络图片处理:需先将网络图片下载为字节数据,再转换为PdfImage使用。
  • 平台适配:不同桌面打印机可能需要调整图片缩放比例,可通过BoxFit或固定尺寸优化打印效果。
  • 版本兼容:确保printing和pdf版本匹配,避免因版本冲突导致异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 13:20:00