Code
Code
dart';
void main() {
runApp(const MyApp());
}
// This class is the configuration for the state. It holds the values (in this
// case the title) provided by the parent (in this case the App widget) and
// used by the build method of the State. Fields in a Widget subclass are
// always marked "final".
@override
State<MyHomePage> createState() => _MyHomePageState();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
backgroundColor: Theme.of(context).colorScheme.inversePrimary,
title: Text(
widget.title,
style: TextStyle(
color: Colors.white,
fontStyle: FontStyle.italic,
),
),
leading: Icon(
Icons.menu,
color: Colors.white,
),
actions: [
Container(
margin: EdgeInsets.fromLTRB(0, 0, 15, 0),
child: Icon(
Icons.add,
color: Colors.white,
),
),
],
),
body: Column(
children: <Widget>[
Container(
width: 100,
height: 100,
color: Colors.red,
),
Container(
width: 100,
height: 100,
color: Colors.blue,
)
],
),
);
}
}
mes recherches
Développeurs Siro
Développeurs Siro
Suivre
Commencer
Pour commencer à générer des documents PDF dans une application Flutter, nous
utiliserons un package populaire appelé PDF . Ce package fournit un moyen simple de
créer des fichiers PDF par programme.
COPIE
COPIE
flutter create my_pdf_app
Accédez au répertoire du projet :
COPIE
COPIE
cd my_pdf_app
Étape 2 : Ajoutez les packages nécessaires
Nous avons besoin de 3 packages pour que notre exemple simple fonctionne :
pdf : permet de créer un document complet de plusieurs pages avec des graphiques,
des images et du texte à l'aide des polices TrueType
COPIE
COPIE
flutter pub add easy_pdf_viewer path_provider pdf
Vous pouvez ouvrir votre pubspec.yamlfichier pour confirmer si le pdfpackage a été
ajouté en tant que dépendance :
COPIE
COPIE
dependencies:
flutter:
sdk: flutter
easy_pdf_viewer: ^1.0.7
path_provider: ^2.1.1
pdf: ^3.10.4
Étape 3 : Créez les classes/fichiers nécessaires
Nous créons d’abord un main_screen.dartfichier pour notre page principale que nous
pouvons placer dans screensle répertoire d’une application propre.
COPIE
COPIE
import 'package:flutter/material.dart';
@override
State<MainScreen> createState() => MainScreenState();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
backgroundColor: Theme.of(context).colorScheme.inversePrimary,
title: const Text('My PDF App'),
),
body: Center(
child: ElevatedButton(
onPressed: () async {
// our action of PDF Generation goes here
},
child: const Text('Generate PDF'),
),
),
);
}
}
Ajustons notre main.dartpointage vers la classe MainScreen
COPIE
COPIE
import 'package:flutter/material.dart';
import 'screens/main_screen.dart';
void main() {
runApp(const MyApp());
}
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'My PDF App',
theme: ThemeData(
colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
useMaterial3: true,
),
home: const MainScreen(),
);
}
}
Créons un pdf_utils.dartfichier sous utilsle répertoire
COPIE
COPIE
import 'dart:io';
class PdfUtils {
PdfUtils._();
COPIE
COPIE
import 'dart:io';
import 'package:pdf/pdf.dart';
import 'package:pdf/widgets.dart' as pw;
class PdfUtils {
PdfUtils._();
static Future<File> generatePDF() async {
final pdfFile = File();
pdf.addPage(
pw.Page(
margin: const pw.EdgeInsets.all(10),
pageFormat: PdfPageFormat.a4,
build: (pw.Context context) {
return pw.Center(
child: pw.Text(
"This is a text!",
style: pw.TextStyle(
fontSize: 30,
color: PdfColors.red900,
fontWeight: pw.FontWeight.bold,
),
),
);
},
),
);
return pdfFile;
}
}
Décomposons le code étape par étape :
Génération PDF :
COPIE
COPIE
pdf.addPage(
pw.Page(
margin: const pw.EdgeInsets.all(10),
pageFormat: PdfPageFormat.a4,
build: (pw.Context context) {
return pw.Center(
child: pw.Text(
"This is a text!",
style: pw.TextStyle(
fontSize: 30,
color: PdfColors.red900,
fontWeight: pw.FontWeight.bold,
),
),
);
},
),
);
Cet extrait de code ajoute une page au document PDF à l'aide de la méthode pdfdu
package addPage. Il définit les propriétés de la page, telles que les marges, le
format de la page (A4 dans ce cas) et le contenu à afficher sur la page. Dans cet
exemple, la page contient un élément de texte centré avec un style spécifique.
Cependant, lorsque vous l'exécuterez, ce code n'affichera rien tant que vous
n'aurez pas effectué les actions suivantes décrites ci-dessous.
COPIE
COPIE
import 'dart:io';
import 'dart:developer' as logger show log;
import 'package:path_provider/path_provider.dart';
import 'package:pdf/pdf.dart';
import 'package:pdf/widgets.dart' as pw;
class PdfUtils {
PdfUtils._();
pdf.addPage(
pw.Page(
margin: const pw.EdgeInsets.all(10),
pageFormat: PdfPageFormat.a4,
build: (pw.Context context) {
return pw.Center(
child: pw.Text(
"This is a text!",
style: pw.TextStyle(
fontSize: 30,
color: PdfColors.red900,
fontWeight: pw.FontWeight.bold,
),
),
);
},
),
);
Cela commence par créer un nouvel pw.Documentobjet, qui représentera notre document
PDF.
Obtenir le répertoire de documents :
COPIE
COPIE
import 'package:easy_pdf_viewer/easy_pdf_viewer.dart';
import 'package:flutter/material.dart';
import '../utils/pdf_utils.dart';
@override
State<MainScreen> createState() => MainScreenState();
}
void openPdfViewer() {
final pdfViewer = PDFViewer(document: pdfDoc);
Navigator.push(
context,
MaterialPageRoute(builder: (context) => pdfViewer),
);
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
backgroundColor: Theme.of(context).colorScheme.inversePrimary,
title: const Text('My PDF App'),
),
body: Center(
child: ElevatedButton(
onPressed: () async {
final pdf = await PdfUtils.generatePDF();
pdfDoc = await PDFDocument.fromFile(pdf);
openPdfViewer();
},
child: const Text('Generate PDF'),
),
),
);
}
}
Dans ce code, lorsque j'appuie sur le bouton "Générer un PDF", la
generatePDFfonction est appelée, qui génère le document PDF. Pour afficher le PDF,
vous pouvez utiliser des packages tels que easy_pdf_viewer, qui permettent aux
utilisateurs de visualiser les fichiers PDF dans l'application dans un écran séparé
appelé PDFViewer.
Conclusion
Comme vous l'avez vu, générer un document PDF est aussi simple que d'écrire une
arborescence de widgets normale, sauf que vous devez travailler avec pw.Document
dans tous vos widgets. Les widgets habituels auxquels vous êtes habitué doivent
être dérivés du pw qui est un alias du package pdf. De plus, vous n'aurez pas
besoin d'autorisations en écriture sur votre appareil, qu'il soit Android ou iOS,
si vous avez l'intention d'enregistrer le PDF dans le répertoire de documents de
l'application, qui est un répertoire spécifique à la plate-forme.
Vous pouvez trouver le code source de l'application que j'ai créée lors de la
rédaction de ce tutoriel sur Github :
Battement
Android
IOS
pdf
Écrit par
Développeurs Siro
Développeurs Siro
Ingénieur logiciel et rédacteur technique, meilleur en développement d'applications
mobiles Flutter, développement full stack avec Mern. D'autres domaines sont comme
Android, .Net et Qt
Suivre
PLUS D'ARTICLES
Archive
·
Politique de confidentialité
·
Termes
Écrire sur Hashnode
Propulsé par Hashnode - Accueil pour les rédacteurs et lecteurs techniques