@page "/pdf-form-extractor"
@using System.IO
@using BLAIzor.Models
@using BLAIzor.Services
@using Microsoft.AspNetCore.Components.Forms
@using System.Text
@using UglyToad.PdfPig
@inject ContentEditorAIService ContentEditorAIService
PDF Form Extractor
@if (!string.IsNullOrEmpty(PdfText))
{
Extracted Text:
}
@if (ExtractedFields.Any())
{
Extracted Fields:
@foreach (var field in ExtractedFields)
{
- @field.GroupName: @field.Fields.Count (@field.Repeatable)
}
}
@code {
private string PdfText = string.Empty;
private List ExtractedFields = new();
private async Task HandleFileSelected(InputFileChangeEventArgs e)
{
var file = e.File;
if (file == null || !file.ContentType.Contains("pdf")) return;
var tempPath = Path.Combine(Path.GetTempPath(), file.Name);
await using (var stream = file.OpenReadStream())
await using (var fileStream = File.Create(tempPath))
{
await stream.CopyToAsync(fileStream);
}
PdfText = ExtractPdfText(tempPath);
// Call OpenAI to analyze and extract structured fields
ExtractedFields = await CallAiForFieldExtraction(PdfText);
}
private string ExtractPdfText(string filePath)
{
var sb = new StringBuilder();
using (var document = PdfDocument.Open(filePath))
{
foreach (var page in document.GetPages())
{
sb.AppendLine(page.Text);
}
}
return sb.ToString();
}
// private async Task> CallAiForFieldExtraction(string plainText)
// {
// var jsonResult = await ContentEditorService.AnalyzeFormFieldsFromText(plainText);
// Console.Write($"Pdf form result: {jsonResult}");
// try
// {
// var fields = System.Text.Json.JsonSerializer.Deserialize>(jsonResult, new System.Text.Json.JsonSerializerOptions
// {
// PropertyNameCaseInsensitive = true
// });
// return fields ?? new List();
// }
// catch
// {
// // fallback if something goes wrong
// return new List();
// }
// }
private async Task> CallAiForFieldExtraction(string plainText)
{
var jsonResult = await ContentEditorAIService.AnalyzeGroupedFormFieldsFromText(plainText);
Console.WriteLine($"📄 PDF form AI response: {jsonResult}");
try
{
var groups = System.Text.Json.JsonSerializer.Deserialize>(jsonResult, new System.Text.Json.JsonSerializerOptions
{
PropertyNameCaseInsensitive = true
});
return groups ?? new List();
}
catch (Exception ex)
{
Console.WriteLine($"❌ Error parsing AI JSON: {ex.Message}");
return new List();
}
}
}