Création d'un PDF

Bonjour,

Je souhaiterai créer un pdf alors j’ai trouvé un sur le site Pub.dev
J’ai fait cet exemple seulement

  1. Après le lettre H rien ne s’affiche je pense qu’il y un OVERFLOW
    savez-vous comment le résoudre? merci
  2. je cherche aussi un moyen pour le pas répéter les lignes
    pw.Text("Texte A",textScaleFactor: 5),
    savez-vous comment faire?

voici le code merci si je peux avoir un coup de main

// ignore_for_file: public_member_api_docs

import 'dart:typed_data';
import 'dart:ui';
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:pdf/pdf.dart';
import 'package:pdf/widgets.dart' as pw;
import 'package:printing/printing.dart';

void main() => runApp(
     const MyApp('Impression des lettres de l\alphabet')
);

class MyApp extends StatelessWidget {
  const MyApp(this.title);

  final String title;

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text(title)),
        body: PdfPreview(
          build: (format) => _generatePdf(format, title),
        ),
      ),
    );
  }

  Future<Uint8List> _generatePdf(PdfPageFormat format, String title) async {
    final pdf = pw.Document();

    pdf.addPage(
      pw.Page(
        pageFormat: format,
        build: (context) {
          return pw.Column(
            children: <pw.Widget>[
              pw.Header(level: 0 , text : 'Liste des lettres de l\'alphabet'),
              pw.Header(level: 3 , text : ' '),
              pw.Header(level: 3 , text : ' '),

              pw.Text("Texte A",textScaleFactor: 5),
              pw.Text("Texte B",textScaleFactor: 5),
              pw.Text("Texte C",textScaleFactor: 5),
              pw.Text("Texte D",textScaleFactor: 5),
              pw.Text("Texte E",textScaleFactor: 5),
              pw.Text("Texte F",textScaleFactor: 5),
              pw.Text("Texte G",textScaleFactor: 5),
              pw.Text("Texte H",textScaleFactor: 5),
              pw.Text("Texte I",textScaleFactor: 5),
              pw.Text("Texte J",textScaleFactor: 5),
              pw.Text("Texte K",textScaleFactor: 5),
              pw.Text("Texte L",textScaleFactor: 5),
              pw.Text("Texte M",textScaleFactor: 5),
              pw.Text("Texte N",textScaleFactor: 5),
              pw.Text("Texte O",textScaleFactor: 5),
              pw.Text("Texte P",textScaleFactor: 5),

              pw.Text(
                  'Page ${context.pageNumber} of ${context.pagesCount}',
                  style: pw.Theme.of(context)
                      .defaultTextStyle
                      .copyWith(color: PdfColors.grey)),

            ],
          );
        },
      ),
    );

    return pdf.save();
  }
}
1 J'aime

Bonjour,

Y a pas de trop de réponse :frowning: dommage
Peut-être je me suis mal exprimé.

Bonne journée

Je pense qu’il faut créer une liste avec toutes les lettres (ou le texte complet
puis je ferais un foreach.

List<String> list = ["Texte A", "Texte B", "Texte C", "Texte D", "Texte E", ]
list.forEach((element) { 
    pw.Text(element ,textScaleFactor: 5),
});

Bonsoir Joel

Merci encore pour ta réponse.
Mon problème principal est de gérer l’overflow d’une page PDF je ne trouve pas dans l’API sur ce lien
https://pub.flutter-io.cn/packages/printing/install

Comment faire si tu as une idée merci pour ton.

désolé, sur ce point je ne peux pas t’aider

C’est pas grave Merci quand même Joel

Peut-être que ces exemples pourraient t’aider.

Pour avoir le code source de l’exemple il faut cliquer sur le bouton orange en bas à droite.

Bonjour Stephan

Merci pour ta réponse.

L’exemple que j’ai fourni ainsi que le lien c’est ce qui correspond à ton lien c’est le même PDF.
Dans leur exemple aussi il ne test pas l’overflow pour aller à la page suivante ils savent exactement le nombre de ligne qu’ils ont par page ils font ensuite eux même en dur le saut de page mais comment deviner si on imprime un enregistrement d’un fichier avec 10 lignes / 1 ligne / 40 lignes etc… par exemple il est là mon problème. y a surement une astuce oui mais laquelle? :wink:

Par des calculs, dans l’exemple aussi, il utilise l’élément pageTheme pour fixer la taille de leur container.

Le plus simple est quand même de créer « des modèles » de pdf que tu souhaites générer.
Tu peux ensuite insérer le contenu dynamique en limitant le nombre de caractères maximum.

Pour le cas du CV, si je le prenais en modèle, je garderais tous les containers et changerais seulement le contenu à l’intérieur (nom, prénom, expériences, etc.).

Ta mise en page doit être fixé avant.

Merci Stephan,
Je pense que je vais mettre ça de côté pour l’instant je débute et y a plein d’autres choses que je connais pas :wink:
Merci encore pour ton aide

Exactement, il faut commencer par les débuts, cela évitera beaucoup de frustrations :slight_smile: