pdf_compressor_pro 0.1.2
pdf_compressor_pro: ^0.1.2 copied to clipboard
A simple cross-platform (iOS/Android) PDF compressor for Flutter.
example/lib/main.dart
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:pdf_compressor_pro/pdf_compressor.dart';
void main() => runApp(const MaterialApp(home: DemoPage()));
class DemoPage extends StatefulWidget {
const DemoPage({super.key});
@override
State<DemoPage> createState() => _DemoPageState();
}
class _DemoPageState extends State<DemoPage> {
final TextEditingController _pathCtrl = TextEditingController();
String log = 'Enter a full PDF file path and press Compress';
Future<void> _compress() async {
final path = _pathCtrl.text.trim();
if (path.isEmpty) {
setState(() => log = 'Please enter a file path ending with .pdf');
return;
}
if (!File(path).existsSync()) {
setState(() => log = 'File not found:\n$path');
return;
}
setState(() => log = 'Compressing...\n$path');
try {
final res = await PdfCompressor.compressPdf(
path,
level: CompressionLevel.medium,
);
setState(() => log = '''
Original: ${res.originalSizeMB.toStringAsFixed(2)} MB
Compressed: ${res.compressedSizeMB.toStringAsFixed(2)} MB
Output: ${res.compressedPath}
Exists: ${File(res.compressedPath).existsSync()}
''');
} catch (e) {
setState(() => log = 'Error: $e');
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: const Text('pdf_compressor_pro example')),
body: Padding(
padding: const EdgeInsets.all(16),
child: Column(
children: [
TextField(
controller: _pathCtrl,
decoration: const InputDecoration(
border: OutlineInputBorder(),
labelText: 'Absolute PDF file path',
),
maxLines: 2,
),
const SizedBox(height: 12),
ElevatedButton(onPressed: _compress, child: const Text('Compress')),
const SizedBox(height: 12),
Expanded(child: SingleChildScrollView(child: Text(log))),
],
),
),
);
}
}