Я хочу получить общее количество страниц из файла PDF - PullRequest
0 голосов
/ 16 марта 2020

Я пытаюсь добиться функциональности в своем приложении Flutter. Я хочу получить общее количество страниц в файле PDF. Все зрители, которых я проверял, пока только предоставляют просмотр и не предоставляют никакого способа получения общего количества страниц. Я сейчас использую flutter_full_pdf_viewer библиотеку для просмотра. Пожалуйста, руководство.

1 Ответ

1 голос
/ 19 марта 2020

Вы можете использовать пакет https://pub.dev/packages/pdf_render
Этот пакет содержит атрибут pageCount
Вы можете использовать filePath или assetName для расположения файла PDF

фрагмент кода

PdfDocumentLoader(
            //filePath: "yourFilePath",
            assetName: 'assets/hello.pdf',
            documentBuilder: (context, pdfDocument, pageCount) => LayoutBuilder(
              builder: (context, constraints) => ListView.builder(
                controller: controller,
                itemCount: pageCount,
                itemBuilder: (context, index) => Container(
                  margin: EdgeInsets.all(margin),
                  padding: EdgeInsets.all(padding),
                  color: Colors.black12,
                  child: PdfPageView(
                    pageNumber: index + 1,

рабочая демонстрация

enter image description here

полный пример кода

import 'package:flutter/material.dart';
import 'package:pdf_render/pdf_render_widgets.dart';

void main() => runApp(new MyApp());

class MyApp extends StatelessWidget {
  /// render at 100 dpi
  static const scale = 100.0 / 72.0;
  static const margin = 4.0;
  static const padding = 1.0;
  static const wmargin = (margin + padding) * 2;
  static final controller = ScrollController();

  @override
  Widget build(BuildContext context) {
    return new MaterialApp(
      home: new Scaffold(
        appBar: new AppBar(
          title: const Text('Pdf_render example app'),
        ),
        backgroundColor: Colors.grey,
        body: Center(
          child: PdfDocumentLoader(
            //filePath: "yourFilePath",
            assetName: 'assets/hello.pdf',
            documentBuilder: (context, pdfDocument, pageCount) => LayoutBuilder(
              builder: (context, constraints) => ListView.builder(
                controller: controller,
                itemCount: pageCount,
                itemBuilder: (context, index) => Container(
                  margin: EdgeInsets.all(margin),
                  padding: EdgeInsets.all(padding),
                  color: Colors.black12,
                  child: PdfPageView(
                    pageNumber: index + 1,
                    calculateSize: (pageWidth, pageHeight, aspectRatio) => Size(constraints.maxWidth - wmargin, (constraints.maxWidth - wmargin) / aspectRatio),

                    customizer: (context, page, size) => Stack(
                      alignment: Alignment.bottomCenter,
                      children: <Widget>[
                        if (page != null) page,
                        Text('${index + 1}', style: TextStyle(fontSize: 50)) // adding page number on the bottom of rendered page
                      ],)
                  )
                )
              )
            ),
          )
        )
      ),
    );
  }
}
...