【发布时间】:2020-04-28 16:21:35
【问题描述】:
我正在使用flutter中的打印包:https://pub.dev/packages/printing
该文档展示了如何从头开始创建 PDF。我已经有一个 URL 的 PDF。有没有办法检索它并与包装一起打印?还是有其他包的替代方法?
【问题讨论】:
我正在使用flutter中的打印包:https://pub.dev/packages/printing
该文档展示了如何从头开始创建 PDF。我已经有一个 URL 的 PDF。有没有办法检索它并与包装一起打印?还是有其他包的替代方法?
【问题讨论】:
来自插件文档使用 path_provider 库保存 pdf 文件:
final output = await getTemporaryDirectory();
final file = File("${output.path}/example.pdf");
await file.writeAsBytes(pdf.save());
使用 iOS 或 Android 打印服务打印文档
await Printing.layoutPdf(
onLayout: (PdfPageFormat format) async => pdf.save());
【讨论】:
我尝试了以下方法来实现打印功能:
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');
这需要一个额外的步骤来打印(点击浏览器的“功能”图标然后打印)
import 'package:url_launcher/url_launcher.dart';
if (await canLaunch(url)) {
await launch(url);
}
这需要一个额外的步骤来打印(点击浏览器的“功能”图标然后打印)
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,安装后请运行flutter clean***
这个包有点过时,但它适用于我用滚筒 80 尺寸的 pdf 打印。使用Swift UIKit包,兼容性好。
我的方案是打印一个无限高的滚筒 80 尺寸 pdf,打印包不适用于它无法正确预览 pdf。所以我改用最后一种打印方式,这对我有用。如果只是打印 A4 或普通尺寸的 PDF,打印包还是不错的选择。
【讨论】: