pdf_merger 0.0.3 copy "pdf_merger: ^0.0.3" to clipboard
pdf_merger: ^0.0.3 copied to clipboard

outdated

A new Flutter plugin for merge List of PDF files. It supports both android and IOS. Before call this package make sure you allow permission and file picker see example.

example/lib/main.dart

import 'dart:io';

import 'package:ext_storage/ext_storage.dart';
import 'package:file_picker/file_picker.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:get/get.dart';
import 'package:path_provider/path_provider.dart';
import 'package:pdf_merger/pdf_merger.dart';
import 'package:permission_handler/permission_handler.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  List<PlatformFile> files;
  List<String> filesPath;

  @override
  void initState() {
    super.initState();
    files = [];
    filesPath = [];
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Plugin example app'),
        ),
        body: Center(
          child: Container(
            margin: EdgeInsets.all(25),
            child: TextButton(
              style: ButtonStyle(overlayColor:
                  MaterialStateProperty.resolveWith<Color>(
                      (Set<MaterialState> states) {
                if (states.contains(MaterialState.focused)) return Colors.red;
                if (states.contains(MaterialState.hovered)) return Colors.green;
                if (states.contains(MaterialState.pressed)) return Colors.blue;
                return null; // Defer to the widget's default.
              })),
              child: Text(
                "Select Files",
                style: TextStyle(fontSize: 20.0),
              ),
              onPressed: () {
                multipleFilePicker();
              },
            ),
          ),
        ),
      ),
    );
  }

  multipleFilePicker() async {
    bool isGranted = await checkPermission();

    if (isGranted) {
      try {
        FilePickerResult result = GetPlatform.isIOS
            ? await FilePicker.platform.pickFiles(allowMultiple: true)
            : await FilePicker.platform.pickFiles(
                allowMultiple: true,
                type: FileType.custom,
                allowedExtensions: ['pdf']);

        if (result != null) {
          files.addAll(result.files);

          // IS PDF check added for IOS for picking add file
          bool isPDF = true;
          for (int i = 0; i < result.files.length; i++) {
            if (isPDF) {
              isPDF = GetUtils.isPDF(files[i].path);
              filesPath.add(result.files[i].path);
            }
          }

          if (isPDF) {
            if (files.length > 1) {
              //Can pass output file name
              String dirPath = await getFilePath("TestPDFMerger");
              initPlatformState(dirPath);
            }
          } else {
            filesPath = [];
            print("Only PDF file selection allow");
          }
        } else {
          // User canceled the picker
        }
      } on Exception catch (e) {
        print('never reached' + e.toString());
      }
    }
  }

  // Platform messages are asynchronous, so we initialize in an async method.
  Future<void> initPlatformState(outputDirPath) async {
    // Platform messages may fail, so we use a try/catch PlatformException.
    try {
      String response = await PdfMerger.platformVersion(
          paths: filesPath, outputDirPath: outputDirPath);
      print("File" + response);

      if (response == "Success") {
        // File save successfully
      } else {
        // File not save in call-back response == "Error"
      }
    } on PlatformException {
      print('Failed to get platform version.');
    }
  }

  Future<bool> checkPermission() async {
    await PermissionHandler().requestPermissions([PermissionGroup.storage]);
    PermissionStatus permission = await PermissionHandler()
        .checkPermissionStatus(PermissionGroup.storage);
    print(permission);
    if (permission == PermissionStatus.neverAskAgain) {
      print("Go to Settings and provide media access");
      return false;
    } else if (permission == PermissionStatus.granted) {
      return true;
    } else {
      return false;
    }
  }

  Future<String> getFilePath(String fileStartName) async {
    String path;
    if (GetPlatform.isIOS) {
      Directory appDocDir = await getApplicationDocumentsDirectory();
      print(appDocDir.path);
      path = appDocDir.path;
    } else {
      path = await ExtStorage.getExternalStoragePublicDirectory(
          ExtStorage.DIRECTORY_DOWNLOADS);
    }

    return path + "/" + fileStartName + "ABC" + ".pdf";
  }
}
27
likes
0
pub points
86%
popularity

Publisher

unverified uploader

A new Flutter plugin for merge List of PDF files. It supports both android and IOS. Before call this package make sure you allow permission and file picker see example.

Repository (GitHub)
View/report issues

License

unknown (LICENSE)

Dependencies

flutter

More

Packages that depend on pdf_merger