我尝试了以下几种方式来实现打印功能:
-
直接获取远程数据字节
搭配时下流行的套餐printing https://pub.dev/packages/printing
var data = await http.get(url);
await Printing.layoutPdf(onLayout: (_) => data.bodyBytes);
但我发现这种方式在打印滚筒尺寸纸张(POS打印机)时会出现打印区域错乱的问题
var data = await http.get(url);
await Printing.sharePdf(bytes: data.bodyBytes, filename: 'my-document.pdf');
这个需要额外的步骤来打印(点击浏览器的“功能”图标然后打印)
-
从浏览器查看并本地打印
看看这个包网址启动器 https://pub.dev/packages/url_launcher
import 'package:url_launcher/url_launcher.dart';
if (await canLaunch(url)) {
await launch(url);
}
这个需要额外的步骤来打印(点击浏览器的“功能”图标然后打印)
-
下载远程文件并保存,使用flutter_pdf_printer包。
使用这个包flutter_pdf_printer https://pub.dev/packages/flutter_pdf_printer and 路径提供者 https://pub.dev/packages/path_provider
var data = await http.get(url);
final output = await getTemporaryDirectory();
final file = File('${output.path}/your_file_name_${new DateTime.now().microsecondsSinceEpoch}.pdf');
await file.writeAsBytes(data.bodyBytes);
await FlutterPdfPrinter.printFile(file.path);
*** 此套餐将有频道注册者issue https://github.com/cadaniel/flutter_pdf_printer/issues/3#issuecomment-806264501,请运行flutter clean
安装后***
这个包有点过时了,但它适合我用滚筒打印 80 尺寸的 pdf。它使用Swift UIKit包,具有良好的兼容性。
Summary
我的场景是打印无限高度的滚筒 80 尺寸的 pdf,打印包不起作用,因为它无法正确预览 pdf。所以我改成了最后一种打印方式,这对我来说很有效。如果您只是打印 A4 或常规尺寸的 PDF,打印包仍然是不错的选择。