使用flutter打印包,如何从URL打印PDF?

use*_*833 5 printing pdf flutter

我在 flutter 中使用打印包: https: //pub.dev/packages/printing

该文档展示了如何从头开始创建 PDF。我已经在 URL 上有一个 PDF。有没有办法检索它并与包裹一起打印?或者是否有其他软件包的替代方法?

Kai*_*Luo 5

我尝试了以下几种方式来实现打印功能:

  • 直接获取远程数据字节
    配合流行的包装印刷
var data = await http.get(url);
await Printing.layoutPdf(onLayout: (_) => data.bodyBytes);
Run Code Online (Sandbox Code Playgroud)

但我发现这种方式在打印滚筒尺寸纸张(POS打印机)时会出现打印区域错乱的问题

  • 共享(第一个的替代)
    使用 sharePdf 函数
var data = await http.get(url);
await Printing.sharePdf(bytes: data.bodyBytes, filename: 'my-document.pdf');
Run Code Online (Sandbox Code Playgroud)

这个需要额外的步骤来打印(点击浏览器的“功能”图标然后打印)

  • 从浏览器查看并本地打印
    查看这个包url_launcher
import 'package:url_launcher/url_launcher.dart';

if (await canLaunch(url)) {
  await launch(url);
}
Run Code Online (Sandbox Code Playgroud)

这个需要额外的步骤来打印(点击浏览器的“功能”图标然后打印)

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);
Run Code Online (Sandbox Code Playgroud)

*** 这个软件包会有频道注册问题,请flutter clean安装后运行***
这个软件包有点过时,但它可以让我用滚筒打印 80 尺寸的 pdf。它使用Swift UIKit包,具有良好的兼容性。

概括

我的方案是打印无限高度的滚筒 80 尺寸的 pdf,打印包不起作用,因为它无法正确预览 pdf。所以我改成了最后一种打印方式,这对我来说很有效。如果您只是打印 A4 或常规尺寸的 PDF,打印包仍然是不错的选择。


G g*_*ffo 0

来自插件文档要使用 path_provider 库保存 pdf 文件:

    final output = await getTemporaryDirectory();
final file = File("${output.path}/example.pdf");
await file.writeAsBytes(pdf.save());
Run Code Online (Sandbox Code Playgroud)

使用 iOS 或 Android 打印服务打印文档

await Printing.layoutPdf(
  onLayout: (PdfPageFormat format) async => pdf.save());
Run Code Online (Sandbox Code Playgroud)