木辛老师来了,本节课咱们一起来看看如何在Flutter中图片转PDF功能吧!
请点击右上角“关注”按钮关注我们哟:跟着木辛老师学习Flutter基础编程知识,变身快乐的编程达人吧~
PDF大家都用过吧(用过的都说好,谁用谁知道),它是一种很流行的格式,全称叫做便携式文档格式。
(没用过?不知道是啥?不好用?)
那好吧,萝卜白菜各有所爱,如果你需要那种不用修改内容,但是需要更好的分享以及打印效果的话,强烈推荐你使用PDF。试过就会爱上,爱上就不会丢弃!
既然,很有可能你会爱上PDF,那么今天通过这个教案就来看一下如何制作PDF把。
有这么两种方法:
第一种,逐个字符的将内容敲进文本文档或者MS word里边
第二种,或者使用今天我们讲到的知识点,直接对文档进行拍照,然后使用今天学习的代码直接转成PDF文件。
第一种还是第二种,怎么选择就看你咯。
好啦,来看看我们的方法。
使用pdf插件
pdf是一个flutter的扩展包,他被分成两个部分
第一个部分,一个底层的负责pdf生成的库
第二部分,想Flutter一样的组件系统,是一个简单易用的创建pdf的工具
据我局限的知识存量来说,它的使用是非常简单。它可以创建包括图形、图片、文本等等组织形式的多页文档,是全方位立体式的强有力的工具,并且用TrueType字体渲染。
如此牛牛的扩展包怎么用捏?
第一步:装他、装他、还是装他
在你的项目根目录下,修改pubspec.yaml文件内容:
dependencies:
pdf: ^3.6.5
同步!
你也可以使用如下命令直接安装它的最新版本
flutter pub add pdf
第二步:写代码
用之前要先导入
import 'package:pdf/pdf.dart';
import 'package:pdf/widgets.dart' as pw;
然后实例化
final pdf = pw.Document();
最后,就可以往这个文档中添加一页内容。同时,要指定这个文档的页面格式,在指定位置构建内容。
pdf.addPage(pw.Page(
pageFormat: PdfPageFormat.a4,
build: (pw.Context context) {
return pw.Center(
child: pw.Text("Hello World"),
); // Center
})); // Page
如果你想使用一张图片,那么还需要实例化MemoryImage,并读取文件图片数据。
final image = pw.MemoryImage(
File('test.webp').readAsBytesSync(),
);
之后,就可将这个图片数据添加到PDF文档中了,就像下方代码那样:
pdf.addPage(pw.Page(build: (pw.Context context) {
return pw.Center(
child: pw.Image(image),
); // Center
})); // Page
你也可以指定ttf(TrueType Font)
final Uint8List fontData = File('open-sans.ttf').readAsBytesSync();
final ttf = pw.Font.ttf(fontData.buffer.asByteData());
pdf.addPage(pw.Page(
pageFormat: PdfPageFormat.a4,
build: (pw.Context context) {
return pw.Center(
child: pw.Text('Hello World', style: pw.TextStyle(font: ttf, fontSize: 40)),
); // Center
})); // Page
写完了,一定不要忘记保存文件
// On Flutter, use the [path_provider](https://pub.dev/packages/path_provider) library:
// final output = await getTemporaryDirectory();
// final file = File("${output.path}/example.pdf");
final file = File("example.pdf");
await file.writeAsBytes(await pdf.save());
好了,在木辛老师的讲义中,知识就是这么简单!通过这些简单有趣的知识,你就可以创造出很多功能强大的工具或者软件,还等什么,赶紧去干起来吧!
请大家关注木辛老师的课程哟,获取更多编程知识和编程技巧。接下来,木辛老师和大家一步一步地学习Flutter知识吧。
快乐编程,快乐成长!
咱们下节课再见,88~