使用 Gemini API 分析文件 (例如 PDF)

您可以要求 Gemini 模型分析您提供的文件檔案 (例如 PDF 和純文字檔案),無論是內嵌 (base64 編碼) 或透過網址提供皆可。使用 Firebase AI Logic 時,您可以直接從應用程式提出這項要求。

這項功能可讓您執行下列操作:

  • 分析文件中的圖表和表格
  • 將資訊擷取為結構化輸出格式
  • 回答文件中的視覺和文字內容相關問題
  • 生成文件摘要
  • 轉錄文件內容 (例如轉為 HTML),同時保留版面配置和格式,以便用於下游應用程式 (例如 RAG 管道)

本指南說明如何根據文件輸入內容 (例如 PDF) 生成文字,但您也可以根據文件輸入內容生成圖片。

跳至程式碼範例 跳至串流回應的程式碼


查看其他指南,瞭解處理文件 (例如 PDF) 的其他選項
生成結構化輸出內容 多輪對話

事前準備

按一下您的Gemini API供應商,即可在這個頁面查看供應商專屬內容和程式碼。

如果尚未完成入門指南,請先完成。指南說明如何設定 Firebase 專案、將應用程式連結至 Firebase、新增 SDK、為所選 Gemini API 供應商初始化後端服務,以及建立 GenerativeModel 執行個體。

如要測試及疊代提示,建議使用 Google AI Studio。

支援這項功能的模型

本指南說明如何根據文件輸入內容 (例如 PDF) 生成文字,適用於下列 Gemini 模型:

  • gemini-4-argon
  • gemini-3.8-flash (以及舊版 gemini-3.7-flash、gemini-3.6-flash 和 gemini-3.5-flash)
  • gemini-3.5-flash-lite (以及舊版 gemini-3.1-flash-lite)

gemini-3.1-pro-preview 和一般用途的 Gemini 2.5 模型 (已淘汰) 也支援這項功能。

從 PDF 檔案生成文字 (Base64 編碼)

嘗試這個範例前,請先完成本指南的「事前準備」一節,設定專案和應用程式。
在該節中,您也需要點選所選Gemini API供應商的按鈕,這樣這個頁面才會顯示供應商專屬內容。

您可以透過文字和 PDF 提示 Gemini 模型 生成文字,並提供每個 輸入檔案的 mimeType 和檔案本身。請參閱本頁後續章節,瞭解輸入檔案的規定和建議。

Swift

您可以呼叫 generateContent(),根據文字和 PDF 的多模態輸入內容生成文字。


import FirebaseAILogic

// Initialize the Gemini Developer API backend service.
let ai = FirebaseAI.firebaseAI(backend: .googleAI())

// Create a `GenerativeModel` instance with a model that supports your use case.
let model = ai.generativeModel(modelName: "gemini-3.8-flash")


// Provide the PDF as `Data` with the appropriate MIME type
let pdf = try InlineDataPart(data: Data(contentsOf: pdfURL), mimeType: "application/pdf")

// Provide a text prompt to include with the PDF file
let prompt = "Summarize the important results in this report."

// To generate text output, call `generateContent` with the PDF file and text prompt
let response = try await model.generateContent(pdf, prompt)

// Print the generated text, handling the case where it might be nil
print(response.text ?? "No text in response.")

Kotlin

您可以呼叫 generateContent(),根據文字和 PDF 的多模態輸入內容生成文字。

如果是 Kotlin,這個 SDK 中的方法是暫停函式,需要從協同程式範圍呼叫。

// Initialize the Gemini Developer API backend service.
// Create a `GenerativeModel` instance with a model that supports your use case.
val model = Firebase.ai(backend = GenerativeBackend.googleAI())
                        .generativeModel("gemini-3.8-flash")


val contentResolver = applicationContext.contentResolver

// Provide the URI for the PDF file you want to send to the model
val inputStream = contentResolver.openInputStream(pdfUri)

if (inputStream != null) {  // Check if the PDF file loaded successfully
    inputStream.use { stream ->
        // Provide a prompt that includes the PDF file specified above and text
        val prompt = content {
            inlineData(
                bytes = stream.readBytes(),
                mimeType = "application/pdf" // Specify the appropriate PDF file MIME type
            )
            text("Summarize the important results in this report.")
        }

        // To generate text output, call `generateContent` with the prompt
        val response = model.generateContent(prompt)

        // Log the generated text, handling the case where it might be null
        Log.d(TAG, response.text ?: "")
    }
} else {
    Log.e(TAG, "Error getting input stream for file.")
    // Handle the error appropriately
}

Java

您可以呼叫 generateContent(),根據文字和 PDF 的多模態輸入內容生成文字。

如果是 Java,這個 SDK 中的方法會傳回 ListenableFuture。

// Initialize the Gemini Developer API backend service.
// Create a `GenerativeModel` instance with a model that supports your use case.
GenerativeModel ai = FirebaseAI.getInstance(GenerativeBackend.googleAI())
        .generativeModel("gemini-3.8-flash");

// Use the GenerativeModelFutures Java compatibility layer which offers
// support for ListenableFuture and Publisher APIs
GenerativeModelFutures model = GenerativeModelFutures.from(ai);


ContentResolver resolver = getApplicationContext().getContentResolver();

// Provide the URI for the PDF file you want to send to the model
try (InputStream stream = resolver.openInputStream(pdfUri)) {
    if (stream != null) {
        byte[] audioBytes = stream.readAllBytes();
        stream.close();

        // Provide a prompt that includes the PDF file specified above and text
        Content prompt = new Content.Builder()
              .addInlineData(audioBytes, "application/pdf")  // Specify the appropriate PDF file MIME type
              .addText("Summarize the important results in this report.")
              .build();

        // To generate text output, call `generateContent` with the prompt
        ListenableFuture<GenerateContentResponse> response = model.generateContent(prompt);
        Futures.addCallback(response, new FutureCallback<GenerateContentResponse>() {
            @Override
            public void onSuccess(GenerateContentResponse result) {
                String text = result.getText();
                Log.d(TAG, (text == null) ? "" : text);
            }
            @Override
            public void onFailure(Throwable t) {
                Log.e(TAG, "Failed to generate a response", t);
            }
        }, executor);
    } else {
        Log.e(TAG, "Error getting input stream for file.");
        // Handle the error appropriately
    }
} catch (IOException e) {
    Log.e(TAG, "Failed to read the pdf file", e);
} catch (URISyntaxException e) {
    Log.e(TAG, "Invalid pdf file", e);
}

Web

您可以呼叫 generateContent(),根據文字和 PDF 的多模態輸入內容生成文字。


import { initializeApp } from "firebase/app";
import { getAI, getGenerativeModel, GoogleAIBackend } from "firebase/ai";

// TODO(developer): Replace the following with your app's Firebase configuration
// See: https://firebase.google.com/docs/web/learn-more#config-object
const firebaseConfig = {
  // ...
};

// Initialize FirebaseApp
const firebaseApp = initializeApp(firebaseConfig);

// Initialize the Gemini Developer API backend service.
const ai = getAI(firebaseApp, { backend: new GoogleAIBackend() });

// Create a `GenerativeModel` instance with a model that supports your use case.
const model = getGenerativeModel(ai, { model: "gemini-3.8-flash" });


// Converts a File object to a Part object.
async function fileToGenerativePart(file) {
  const base64EncodedDataPromise = new Promise((resolve) => {
    const reader = new FileReader();
    reader.onloadend = () => resolve(reader.result.split(','));
    reader.readAsDataURL(file);
  });
  return {
    type: "inlineData",
    inlineData: { data: await base64EncodedDataPromise, mimeType: file.type },
  };
}

async function run() {
  // Provide a text prompt to include with the PDF file
  const prompt = "Summarize the important results in this report.";

  // Prepare PDF file for input
  const fileInputEl = document.querySelector("input[type=file]");
  const pdfPart = await fileToGenerativePart(fileInputEl.files);

  // To generate text output, call `generateContent` with the text and PDF file
  const result = await model.generateContent([prompt, pdfPart]);

  // Log the generated text, handling the case where it might be undefined
  console.log(result.response.text() ?? "No text in response.");
}

run();

Dart

您可以呼叫 generateContent(),從文字和 PDF 的多模態輸入內容生成文字。


import 'package:firebase_ai/firebase_ai.dart';
import 'package:firebase_core/firebase_core.dart';
import 'firebase_options.dart';

// Initialize FirebaseApp
await Firebase.initializeApp(
  options: DefaultFirebaseOptions.currentPlatform,
);

// Initialize the Gemini Developer API backend service.
// Create a `GenerativeModel` instance with a model that supports your use case.
final model =
      FirebaseAI.googleAI().generativeModel(model: 'gemini-3.8-flash');


// Provide a text prompt to include with the PDF file
final prompt = TextPart("Summarize the important results in this report.");

// Prepare the PDF file for input
final doc = await File('document0.pdf').readAsBytes();

// Provide the PDF file as `Data` with the appropriate PDF file MIME type
final docPart = InlineDataPart('application/pdf', doc);

// To generate text output, call `generateContent` with the text and PDF file
final response = await model.generateContent([
  Content.multi([prompt,docPart])
]);

// Print the generated text
print(response.text);

Unity

您可以呼叫 GenerateContentAsync(),根據文字和 PDF 的多模態輸入內容生成文字。


using Firebase;
using Firebase.AI;

// Initialize the Gemini Developer API backend service.
var ai = FirebaseAI.GetInstance(FirebaseAI.Backend.GoogleAI());

// Create a `GenerativeModel` instance with a model that supports your use case.
var model = ai.GetGenerativeModel(modelName: "gemini-3.8-flash");


// Provide a text prompt to include with the PDF file
var prompt = ModelContent.Text("Summarize the important results in this report.");

// Provide the PDF file as `data` with the appropriate PDF file MIME type
var doc = ModelContent.InlineData("application/pdf",
      System.IO.File.ReadAllBytes(System.IO.Path.Combine(
        UnityEngine.Application.streamingAssetsPath, "document0.pdf")));

// To generate text output, call `GenerateContentAsync` with the text and PDF file
var response = await model.GenerateContentAsync(new [] { prompt, doc });

// Print the generated text
UnityEngine.Debug.Log(response.Text ?? "No text in response.");

瞭解如何選擇適合用途和應用程式的模型 。

逐句回覆

嘗試這個範例前,請先完成本指南的「事前準備」一節,設定專案和應用程式。
在該節中,您也需要點選所選Gemini API供應商的按鈕,這樣這個頁面才會顯示供應商專屬內容。

您可以使用串流處理部分結果,不必等待模型生成完整結果,進而加快互動速度。如要串流回覆,請呼叫 generateContentStream。



輸入文件的規定和建議

請注意,以內嵌資料形式提供的檔案會在傳輸過程中編碼為 base64,這會增加要求的大小。如果要求過大,您會收到 HTTP 413 錯誤。

請參閱「支援的輸入檔案和相關規定」頁面,進一步瞭解下列事項:

支援的文件 MIME 類型

Gemini 多模態模型支援下列文件 MIME 類型:

  • PDF - application/pdf
  • 文字 - text/plain

每項要求的限制

PDF 會視為圖片,因此 PDF 的單一頁面會視為一張圖片。提示詞中允許的頁數上限,取決於 Gemini 多模態模型可支援的圖片數量。

  • 每項要求的檔案數量上限:3,000 個
  • 每個檔案的頁數上限:1,000 頁
  • 每個檔案的大小上限:50 MB



你還可以做些什麼?

試用其他功能

瞭解如何控管內容生成

您也可以使用 Google AI Studio 測試提示和模型設定,甚至取得生成的程式碼片段。

進一步瞭解支援的模型

瞭解適用於各種用途的模型,以及配額和定價。


提供「Firebase AI Logic」使用體驗的意見回饋