Flutter PDF处理插件pdf_gemini的使用

Flutter PDF处理插件pdf_gemini的使用

该插件提供了与PDF文件交互、使用Google Gemini API进行聊天以及管理上传文件的简单方法。

特性

  • 将PDF文件上传到Gemini
  • 使用Google Gemini API对PDF文件进行提示并获取生成响应
  • 轻量级且易于集成到任何Flutter应用中

安装

在命令行中运行以下命令:

flutter pub add pdf_gemini

使用

步骤1: 导入包

在Dart文件中导入包:

import 'package:pdf_gemini/pdf_gemini.dart';

步骤2: 提供API密钥

当使用API服务时,实例化服务类并传递您的API密钥。以下是示例代码:

void main() async {
  const geminiApiKey = 'your_api_key_here';
  final genaiClient = GenaiClient(geminiApiKey: geminiApiKey);

  try {
    final testFile = File('');
    final data = await genaiClient.promptDocument(
      'file_name', 
      'pdf', 
      testFile.readAsBytesSync(), 
      'Your prompt',
    );
    print(data.text);
  } catch (e) {
    print('Error: $e');
  }
}

示例说明:

  • 'your_api_key_here'替换为实际的API密钥。
  • promptDocument() 方法接受文档和提示输入,并返回生成的响应(文本:text, 引用:sources)。
  • 如果请求失败,请确保捕获异常。

测试

为了确保包按预期工作,您可以编写测试以模拟API响应。以下是简单的测试示例:

import 'dart:io';

import 'package:flutter_test/flutter_test.dart';
import 'package:pdf_gemini/pdf_gemini.dart';

void main() {
  group('PDFChatClient', () {
    const geminiApiKey = '';
    final genaiClient = GenaiClient(geminiApiKey: geminiApiKey);

    test('Prompt PDF Test', () async {
      // 创建临时测试文件
      final testFile = File('your_file_path').readAsBytesSync();

      try {
        await genaiClient.promptDocument('file_name', 'pdf', testFile, 'your_prompt');
      } catch (e) {
        fail('Failed: $e');
      }
    });
  });
}

示例代码

以下是完整的示例代码:

// ignore_for_file: avoid_print

import 'dart:io';
import 'package:pdf_gemini/pdf_gemini.dart';
import 'package:pdf_gemini/src/genai_generated_response_model.dart'; // 确保此包包含在pubspec.yaml中

void main() async {
  // 替换为实际的Gemini API密钥
  const String geminiApiKey = 'YOUR_GEMINI_API_KEY';

  // 创建GenaiClient实例
  final genaiClient = GenaiClient(geminiApiKey: geminiApiKey);

  // 示例文件数据(替换为实际文件数据)
  File file = File('' /* 您的文件路径 */);
  String fileName = 'example.pdf';
  String fileType = 'pdf';

  try {
    // 上传文件并获取GenAI文件
    GenaiFile uploadedFile = await genaiClient.genaiFileManager.uploadFile(
      fileName,
      fileType,
      file.readAsBytesSync(),
    );

    print('上传的文件: ${uploadedFile.displayName}');

    // 使用上传的文件生成内容
    String prompt = "能否在这首诗中添加几行?";
    GenaiGeneratedResponseModel response = await genaiClient.promptDocument(
      uploadedFile.displayName,
      uploadedFile.mimeType,
      file.readAsBytesSync(),
      prompt,
    );

    print('生成的文本: ${response.text}');

    if (response.citationUri != null) {
      print('引用URI: ${response.citationUri}');
    }

    // 获取所有已上传的文件
    List<GenaiFile> uploadedFiles = await genaiClient.genaiFileManager.getUploadedFiles();

    print('已上传的文件:');
    for (var file in uploadedFiles) {
      print('- ${file.displayName} (${file.sizeBytes} 字节)');
    }
  } catch (e) {
    print('错误: $e');
  }
}

更多关于Flutter PDF处理插件pdf_gemini的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter PDF处理插件pdf_gemini的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是一个关于如何在Flutter中使用pdf_gemini插件来处理PDF文件的代码示例。pdf_gemini是一个功能强大的Flutter插件,用于生成和操作PDF文档。请注意,由于pdf_gemini的具体API可能会随时间变化,以下代码基于插件的一般使用方式编写,请查阅最新的官方文档以获取最准确的信息。

首先,确保在pubspec.yaml文件中添加pdf_gemini依赖:

dependencies:
  flutter:
    sdk: flutter
  pdf_gemini: ^最新版本号  # 替换为实际的最新版本号

然后,运行flutter pub get以获取依赖。

接下来是一个简单的Flutter应用示例,展示如何使用pdf_gemini生成一个PDF文件并保存到设备中:

import 'package:flutter/material.dart';
import 'package:pdf_gemini/pdf_gemini.dart';
import 'package:path_provider/path_provider.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('PDF Gemini Example'),
        ),
        body: Center(
          child: ElevatedButton(
            onPressed: _generatePdf,
            child: Text('Generate PDF'),
          ),
        ),
      ),
    );
  }

  Future<void> _generatePdf() async {
    // 获取外部存储目录的路径
    final directory = await getExternalStorageDirectory();
    final path = directory!.path + '/example.pdf';

    // 创建PDF文档
    final document = PdfDocument();
    final page = document.addPage();

    // 在页面上添加内容
    final canvas = page.getCanvas();
    final paint = Paint()
      ..color = Colors.black
      ..style = PaintingStyle.fill;
    canvas.drawRect(Rect.fromLTWH(0, 0, page.width, page.height), paint);

    final textPaint = Paint()
      ..color = Colors.white
      ..textSize = 24.0;
    canvas.drawText('Hello, PDF Gemini!', 50.0, 50.0, textPaint);

    // 保存PDF文件
    final file = File(path);
    await file.writeAsBytes(await document.save());

    // 显示成功消息
    ScaffoldMessenger.of(context).showSnackBar(
      SnackBar(content: Text('PDF generated at $path')),
    );
  }
}

在这个示例中,我们做了以下几件事:

  1. pubspec.yaml文件中添加了pdf_gemini依赖。
  2. 创建了一个简单的Flutter应用,其中包含一个按钮,用于触发PDF生成。
  3. 当按钮被点击时,调用_generatePdf函数。
  4. _generatePdf函数中,首先获取外部存储目录的路径,然后创建一个新的PDF文档并添加一页。
  5. 在页面上绘制一个矩形和文本内容。
  6. 将生成的PDF文档保存到指定的路径。
  7. 显示一个SnackBar,通知用户PDF文件的保存位置。

请注意,为了访问外部存储,您需要在AndroidManifest.xml中添加适当的权限声明,并在运行时请求这些权限(对于Android 6.0及以上版本)。此外,iOS的权限管理也有所不同,请确保您的应用有适当的权限来写入文件。

这个示例只是一个起点,pdf_gemini提供了许多其他功能,如添加图像、绘制复杂的形状、设置不同的字体和样式等。您可以查阅官方文档以了解更多高级用法。

回到顶部