[flutter] 플러터 Table 위젯에서 테이블 데이터 PDF 파일로 내보내기

이번 포스트에서는 Flutter 애플리케이션에서 Table 위젯을 사용하여 테이블 데이터를 PDF 파일로 내보내는 방법을 알아보겠습니다. PDF 파일로 데이터를 내보내는 것은 가끔 필요한 작업인데요, Flutter에서는 이를 쉽게 할 수 있는 패키지들을 활용할 수 있습니다.

필요한 패키지 추가

먼저, 이 작업을 수행하기 위해 몇 가지 패키지가 필요합니다. pdf 패키지는 PDF 파일을 생성하는 데 사용되며, path_provider 패키지는 파일 시스템 접근을 제공합니다. path 패키지는 파일 시스템 경로를 조작하는 데 사용됩니다. fluttertoast 패키지는 간단한 알림을 표시할 때 사용됩니다.

dependencies:
  flutter:
    sdk: flutter
  pdf: ^2.0.0
  path_provider: ^2.0.1
  fluttertoast: ^8.0.7

pubspec.yaml 파일에 위와 같이 패키지들을 추가해줍니다.

Table 위젯에서 데이터 가져오기

Table 위젯을 사용하여 데이터를 표시한 후, 해당 데이터를 PDF로 내보내기 위해서는 pdf 패키지를 이용해야 합니다. 필요한 데이터를 Table 위젯으로 표시한 후, 해당 데이터를 PDF로 내보내는 버튼을 구현합니다.

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

class ExportPdfPage extends StatefulWidget {
  @override
  _ExportPdfPageState createState() => _ExportPdfPageState();
}

class _ExportPdfPageState extends State<ExportPdfPage> {
  List<List<dynamic>> tableData = [
    ['Name', 'Age', 'City'],
    ['John Doe', 30, 'New York'],
    ['Jane Smith', 25, 'San Francisco'],
  ];

  Future<void> _exportToPdf() async {
    final pdf = pw.Document();
    pdf.addPage(
      pw.Page(
        build: (pw.Context context) {
          return pw.Table.fromTextArray(
            context: context,
            data: tableData,
          );
        },
      ),
    );

    final output = await getExternalStorageDirectory();
    final pdfPath = '${output.path}/table_data.pdf';
    final file = File(pdfPath);
    file.writeAsBytesSync(await pdf.save());
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Export to PDF'),
      ),
      body: Column(
        children: <Widget>[
          Expanded(
            child: SingleChildScrollView(
              child: Table(
                border: TableBorder.all(),
                children: tableData.map((row) {
                  return TableRow(children: row.map((cell) {
                    return Container(
                      alignment: Alignment.center,
                      child: Padding(
                        padding: const EdgeInsets.all(8.0),
                        child: Text(
                          cell.toString(),
                          style: TextStyle(fontSize: 16.0),
                        ),
                      ),
                    );
                  }).toList());
                }).toList(),
              ),
            ),
          ),
          ElevatedButton(
            onPressed: () {
              _exportToPdf();
            },
            child: Text('Export to PDF'),
          ),
        ],
      ),
    );
  }
}

위 코드에서는 pdf 패키지의 pw.Document를 사용하여 PDF를 생성하고, pw.Table.fromTextArray를 사용하여 테이블 데이터를 PDF로 추가합니다. 그 후 path_provider 패키지를 사용하여 외부 저장소에 PDF 파일을 저장합니다. 내보내기 버튼을 누르면 _exportToPdf 메서드가 호출되어 PDF 파일이 생성되고 저장됩니다.

이제, 위 코드를 실행하고 데이터를 테이블에 추가한 후 ‘Export to PDF’ 버튼을 클릭하여 PDF 파일을 내보내보세요!

결론

이번 포스트에서는 Flutter Table 위젯을 사용하여 테이블 데이터를 PDF 파일로 내보내는 방법에 대해 알아보았습니다. 이를 통해 사용자가 테이블 형식으로 표시된 데이터를 PDF 형식으로 쉽게 공유하고 저장할 수 있습니다. 필요에 따라 데이터를 PDF로 내보내는 기능을 추가하여 유용한 기능을 제공할 수 있을 것입니다.