Flutter PDF kullanımı

Flutter uygulamalarında PDF kullanımı ve PDF işlemleri pdf paketi ile yapılabilir. Bu paket ile Flutter uygulamalarında PDF oluşturabilirsiniz. İki farklı şekilde PDF dosyası oluşturmaya olanak sağlayan bu paket, düz text olarak PDF oluşturabilir veya tıpkı Flutter uygulamasında bir sayfa oluşturur gibi header, footer, body gibi elementleri kullanarak düzenli bir PDF generator kodu yazabilirsiniz. Bu paket ile yapabileceğiniz bir örnek burada yer almakta.

PDF paketi nasıl kullanılır?

Projemize öncelikle pdf paketini ekleyerek başlayalım. Daha sonra import edelim.

import 'package:pdf/widgets.dart' as pw;

Daha sonra bir document oluşturalım ve bir değişkene atayalım.

  final pdf = pw.Document();

Türkçe karakter kullanımı için projemize bir Open Font eklememiz gerekiyor. Bu font için Poppins-Regular’ı seçiyorum.

    final font1 = await rootBundle.load('fonts/Poppins/Poppins-Regular.ttf');

Daha sonra pdf değişkenimize sayfa ekleyerek başlayalım. Bir sayfa eklenirken birden farklı sayfa tipi eklenebilir fakat ben daima MultiPage olarak ekliyorum ki taşmalar durumunda bir sonraki sayfaya yazı, veri taşabilsin. Bu arada, oluşturulan PDF’in cihaza kaydedilmesi için Storage izni alınması gerekir. Bu izinleri almak için permission handler paketi kullanılabilir.

    pdf.addPage(
      pw.MultiPage(
        theme: pw.ThemeData.withFont(
          base: pw.Font.ttf(font1),
        ),
        pageFormat: PdfPageFormat.a4,
        build: (pw.Context context) {
          return [
            pw.Paragraph(
              textAlign: pw.TextAlign.left,
              text: (form1Uret()),
            ),
            pw.Paragraph(
              textAlign: pw.TextAlign.left,
              text: (form2Uret(xName, xSurname, yName, ySurname)),
            )
          ];
        },
      ),
    );

Tıpkı bir sayfa üretir gibi Widgetlar pw kütüphanesi ile kullanılabilir. Pw ile kullanılan bu özel widgetlar yalnızca PDF oluşturmak için kullanılır.

Daha sonra PDF oluşturulduktan sonra bunu kullanıcının cihazına kaydedebilirsiniz.

    if (await Permission.storage.isGranted) {
      final output = await getApplicationDocumentsDirectory();
      new Directory(output.path + '/' + 'dir')
          .create(recursive: true)
          .then((Directory directory) async {
        final file = File(
            "${output.path}/Sozlesme_${widget.date.day}-${widget.date.month}-${widget.date.year}.pdf");
        await file.writeAsBytes(await pdf.save());
        EasyLoading.showInfo('İndirme İşlemi Tamamlandı');
        print('Path of New Dir: ' + directory.path);
      });
    } 

Çok uzun yazıları nasıl PDF’e basacağım? Diye soruyorsanız…

Çok uzun yazıları PDF haline getirmek için üç tırnak paragrafı kullanabilirsiniz. 🙂

  pdf.addPage(
    pw.MultiPage(
      theme: pw.ThemeData.withFont(
        base: ttf,
        bold: ttf,
      ),
      pageFormat: PdfPageFormat.a4,
      orientation: pw.PageOrientation.portrait,
      crossAxisAlignment: pw.CrossAxisAlignment.start,
      build: (pw.Context context) => <pw.Widget>[
        pw.Wrap(
          children: list.map((e) {
            return pw.Paragraph(
              text: '''$e''',
              textAlign: pw.TextAlign.justify,
              style: pw.TextStyle(
                fontWeight: pw.FontWeight.bold,
                fontSize: 16.0,
                font: ttf,
              ),
            );
          }).toList(),
        ),
      ],
    ),
  );

Flutter PDF kullanımı konusunu kısaca işlediğim bu yazıda PDF işlemleri nasıl yapılır gösterdiğimi düşünüyorum. Bir sonraki yazım WordPress API ile ilgili olacak. 🙂


Okuyucuya Not

Merhaba okuyucu! Blogum son zamanlarda yüksek trafik almaya başladı ve bu durumdan memnunum fakat aynı zamanda siz ziyaretçileri tatmin edememekten endişeliyim. 🙂 Eğer yazılarım ile ilgili bir tavsiyeniz olursa mail adresimden bana ulaşabilir veya Twitter üzerinden direct message gönderebilirsiniz. Github’ta örnek olarak yaptığım projelere göz atmak isterseniz de bu linki kullanabilirsiniz. Umarım bu ziyaretinizle size bir şeyler katabilmişimdir.

Sağlıcakla kalın!