如何解决如何在flutter中为pdf动态添加内部导航
我正在开发一个 Flutter 应用程序,它使用 pdf 库 (https://pub.dev/packages/pdf/changelog) 在 Flutter 中生成 PDF 文件。我需要创建一个包含目录的 pdf 文件。它们应该与实际内容相关联,并在点击时导航到各自的页面。我在网上找不到任何使用 pdf 库执行此操作的文档。 PDF 将被写入文件,因此 Flutter 中的 PDF 查看器对我也没有用。有人可以帮我吗
[更新] 我尝试在我的代码中使用 Link 和 Anchor。但它似乎不起作用。我做错了什么吗?
reportView(context) async {
final Document pdf = Document();
final ByteData fontData =
await rootBundle.load("assets/fonts/Open_Sans/OpenSans-Regular.ttf");
final Font ttf = Font.ttf(fontData);
final textStyle = TextStyle(font: ttf);
final Wrap item = Wrap(children: await _buildPdfBlock(textStyle));
pdf.addPage(
MultiPage(
pageFormat:
PdfPageFormat.letter.copyWith(marginBottom: 1.5 * PdfPageFormat.cm),crossAxisAlignment: CrossAxisAlignment.start,build: (Context context) => [item],),);
_index(
context,pdf,textStyle,);
_contents(context,textStyle);
final String dir = (await getApplicationDocumentsDirectory()).path;
final String path = '$dir/App_' + '.pdf';
final File file = File(path);
print(path);
await file.writeAsBytes(pdf.save());
await Share.shareFiles([path]);
}
Future<List<Widget>> _buildPdfBlock(TextStyle textStyle) async {
List<Widget> list = [];
Column column = Column(
mainAxisAlignment: MainAxisAlignment.start,crossAxisAlignment: CrossAxisAlignment.center,children: [
Header(level: 1,child: Text("PDF Generation",style: textStyle)),Text("Hello World",style: textStyle)
]);
list.add(column);
return list;
}
void _index(dynamic context,Document pdf,TextStyle textStyle) {
List<Widget> indexList = [];
var indexNumber = 1;
for (var i = indexNumber; i < 10; i++) {
Text indexText = Text(indexNumber.toString() + ". " + "Hello$indexNumber",style: textStyle);
Link(
child: indexText,destination: indexNumber.toString() + ". " + "Hello$indexNumber");
indexList.add(indexText);
indexNumber++;
}
pdf.addPage(
MultiPage(
pageFormat:
PdfPageFormat.letter.copyWith(marginBottom: 1.5 * PdfPageFormat.cm),build: (Context context) => indexList,);
}
void _contents(dynamic context,TextStyle textStyle) {
List<Widget> contentList = [];
var contentNumber = 1;
for (var i = contentNumber; i < 10; i++) {
Header contentIndex = Header(
child: Text(contentNumber.toString() + ". " + "Hello$contentNumber",style: textStyle));
Text content = Text(" " +
loremIpsum(words: 60,paragraphs: 3,initWithLorem: true));
Anchor(
name: contentNumber.toString() + ". " + "Hello$contentNumber",child: contentIndex);
contentList.add(contentIndex);
contentList.add(content);
contentNumber++;
}
pdf.addPage(
MultiPage(
pageFormat:
PdfPageFormat.letter.copyWith(marginBottom: 1.5 * PdfPageFormat.cm),build: (Context context) => contentList,);
}
[UPDATE] 它现在可以工作了,我的实现是错误的。感谢您的帮助
解决方法
您可以使用 PDF 中的 dart_pdf
和 Anchor
在代码中使用 Link
创建这样的页面:
首先在要链接到的页面上创建一个 Anchor
:
Anchor(name: 'my_first_anchor'),
然后你可以在你的目录中引用那个锚点:
Link(destination: 'my_first_anchor'),
显然锚名称必须是唯一的。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。