pdf_merger_flutter 1.0.0+4 copy "pdf_merger_flutter: ^1.0.0+4" to clipboard
pdf_merger_flutter: ^1.0.0+4 copied to clipboard

A Flutter package that allows developers to easily merge multiple PDF files into a single document with a simple and intuitive API.

example/lib/main.dart

import 'package:file_picker/file_picker.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:pdf_merger_flutter/pdf_merger_flutter.dart';

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

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(title: 'PDF Merger', home: PDFMergeScreen());
  }
}

class PDFMergeScreen extends StatefulWidget {
  const PDFMergeScreen({super.key});

  @override
  PDFMergeScreenState createState() => PDFMergeScreenState();
}

class PDFMergeScreenState extends State<PDFMergeScreen> {
  final TextEditingController _fileNameController = TextEditingController();
  final List<String> _pdfUrls = [];
  final List<Uint8List> _pdfBytesList = [];
  bool _isLoading = false;

  Future<void> _combinePDFs() async {
    if (_fileNameController.text.isEmpty) {
      ScaffoldMessenger.of(
        context,
      ).showSnackBar(SnackBar(content: Text('Enter a file name')));
      return;
    }

    setState(() {
      _isLoading = true;
    });

    try {
      final Uint8List mergedBytes = await MyPdfService.combinePDFs(
        localBytes: _pdfBytesList,
      );
      await MyPdfService.openMerged(
        mergedBytes,
        "${_fileNameController.text}.pdf",
      );
    } catch (e) {
      if (context.mounted) {}
    } finally {
      setState(() {
        _isLoading = false;
      });
    }
  }

  void _pickFilesToAdd() async {
    final FilePickerResult? result = await FilePicker.platform.pickFiles(
      type: FileType.custom,
      allowedExtensions: ['pdf'],
      withData: true,
    );

    if (result != null) {
      setState(() {
        // if (kIsWeb) {
        _pdfBytesList.add(result.files.first.bytes!);
        // }
        _pdfUrls.addAll(result.files.map((file) => file.path!));
      });
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('PDF Merger')),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          children: [
            if (_pdfUrls.isNotEmpty)
              TextField(
                controller: _fileNameController,
                decoration: InputDecoration(labelText: 'Enter file name'),
              ),
            SizedBox(height: 16),
            ElevatedButton(
              onPressed: _pickFilesToAdd,
              child: Text('Pick PDFs'),
            ),
            Expanded(
              child: ListView.builder(
                itemCount: _pdfUrls.length,
                itemBuilder: (context, index) {
                  return ListTile(
                    title: Text('PDF ${index + 1}'),
                    subtitle: Text(_pdfUrls[index]),
                  );
                },
              ),
            ),
            if (_pdfUrls.length > 1)
              ElevatedButton(
                onPressed: _combinePDFs,
                child: _isLoading
                    ? CircularProgressIndicator()
                    : Text('Merge PDFs'),
              ),
          ],
        ),
      ),
    );
  }
}
0
likes
160
points
8
downloads

Publisher

unverified uploader

Weekly Downloads

A Flutter package that allows developers to easily merge multiple PDF files into a single document with a simple and intuitive API.

Repository (GitHub)
View/report issues

Documentation

API reference

License

MIT (license)

Dependencies

cupertino_icons, file_picker, flutter, open_app_file, path_provider, syncfusion_flutter_pdf

More

Packages that depend on pdf_merger_flutter