@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:
} @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(); } } }