cid_app/test/generate_fea_preview_test.dart

95 lines
5.5 KiB
Dart
Raw Normal View History

2026-04-28 15:00:01 +02:00
import 'dart:io';
import 'dart:ui';
import 'package:flutter_test/flutter_test.dart';
import 'package:syncfusion_flutter_pdf/pdf.dart';
void main() {
test('Genera Preview Pagina 2 FEA', () async {
PdfDocument document = PdfDocument();
PdfPage page = document.pages.add();
final Size pageSize = page.getClientSize();
// Draw Header
final PdfFont titleFont = PdfStandardFont(PdfFontFamily.helvetica, 18, style: PdfFontStyle.bold);
final PdfFont subTitleFont = PdfStandardFont(PdfFontFamily.helvetica, 10, style: PdfFontStyle.italic);
final PdfFont boldFont = PdfStandardFont(PdfFontFamily.helvetica, 12, style: PdfFontStyle.bold);
final PdfFont regularFont = PdfStandardFont(PdfFontFamily.helvetica, 11);
double y = 0;
// Title
String title = "ATTESTATO DI FIRMA ELETTRONICA AVANZATA (FEA)";
page.graphics.drawString(title, titleFont,
bounds: Rect.fromLTWH(0, y, pageSize.width, 30),
format: PdfStringFormat(alignment: PdfTextAlignment.center));
y += 25;
String subtitle = "Ai sensi dell'art. 20 del D.Lgs. 7 marzo 2005, n. 82 (CAD) e del DPCM 22 Febbraio 2013.";
page.graphics.drawString(subtitle, subTitleFont,
bounds: Rect.fromLTWH(0, y, pageSize.width, 30),
format: PdfStringFormat(alignment: PdfTextAlignment.center));
y += 50;
// Draw separator
page.graphics.drawLine(PdfPen(PdfColor(100, 100, 100), width: 1), Offset(0, y), Offset(pageSize.width, y));
y += 20;
// Split into two columns for Conducente A and B
double colWidth = (pageSize.width / 2) - 20;
// Conducente A
double currentY = y;
page.graphics.drawString("VEICOLO A (Blu)", boldFont, bounds: Rect.fromLTWH(0, currentY, colWidth, 20), brush: PdfSolidBrush(PdfColor(0, 0, 200)));
currentY += 25;
page.graphics.drawString("Conducente: Mario Rossi", regularFont, bounds: Rect.fromLTWH(0, currentY, colWidth, 20));
currentY += 20;
page.graphics.drawString("Codice Fiscale: RSSMRA80A01H501U", regularFont, bounds: Rect.fromLTWH(0, currentY, colWidth, 20));
currentY += 20;
page.graphics.drawString("Cellulare Verificato: +39 333 1234567", boldFont, bounds: Rect.fromLTWH(0, currentY, colWidth, 20), brush: PdfSolidBrush(PdfColor(0, 128, 0)));
currentY += 20;
page.graphics.drawString("Data/Ora Verifica: 28/04/2026 14:35:12", regularFont, bounds: Rect.fromLTWH(0, currentY, colWidth, 20));
currentY += 20;
page.graphics.drawString("ID Transazione OTP: fb-otp-849201a", regularFont, bounds: Rect.fromLTWH(0, currentY, colWidth, 20));
currentY += 30;
page.graphics.drawString("Firma Elettronica Autografa:", boldFont, bounds: Rect.fromLTWH(0, currentY, colWidth, 20));
currentY += 20;
page.graphics.drawRectangle(pen: PdfPen(PdfColor(200, 200, 200)), bounds: Rect.fromLTWH(0, currentY, colWidth, 100));
page.graphics.drawString("[ Disegno della Firma A ]", subTitleFont, bounds: Rect.fromLTWH(0, currentY + 40, colWidth, 20), format: PdfStringFormat(alignment: PdfTextAlignment.center));
// Conducente B
currentY = y;
page.graphics.drawString("VEICOLO B (Giallo)", boldFont, bounds: Rect.fromLTWH(pageSize.width / 2 + 10, currentY, colWidth, 20), brush: PdfSolidBrush(PdfColor(200, 150, 0)));
currentY += 25;
page.graphics.drawString("Conducente: Luigi Verdi", regularFont, bounds: Rect.fromLTWH(pageSize.width / 2 + 10, currentY, colWidth, 20));
currentY += 20;
page.graphics.drawString("Codice Fiscale: VRDLGI90B02F205Z", regularFont, bounds: Rect.fromLTWH(pageSize.width / 2 + 10, currentY, colWidth, 20));
currentY += 20;
page.graphics.drawString("Cellulare Verificato: +39 340 9876543", boldFont, bounds: Rect.fromLTWH(pageSize.width / 2 + 10, currentY, colWidth, 20), brush: PdfSolidBrush(PdfColor(0, 128, 0)));
currentY += 20;
page.graphics.drawString("Data/Ora Verifica: 28/04/2026 14:36:05", regularFont, bounds: Rect.fromLTWH(pageSize.width / 2 + 10, currentY, colWidth, 20));
currentY += 20;
page.graphics.drawString("ID Transazione OTP: fb-otp-112399b", regularFont, bounds: Rect.fromLTWH(pageSize.width / 2 + 10, currentY, colWidth, 20));
currentY += 30;
page.graphics.drawString("Firma Elettronica Autografa:", boldFont, bounds: Rect.fromLTWH(pageSize.width / 2 + 10, currentY, colWidth, 20));
currentY += 20;
page.graphics.drawRectangle(pen: PdfPen(PdfColor(200, 200, 200)), bounds: Rect.fromLTWH(pageSize.width / 2 + 10, currentY, colWidth, 100));
page.graphics.drawString("[ Disegno della Firma B ]", subTitleFont, bounds: Rect.fromLTWH(pageSize.width / 2 + 10, currentY + 40, colWidth, 20), format: PdfStringFormat(alignment: PdfTextAlignment.center));
y = currentY + 150;
// Footer Disclaimer
page.graphics.drawLine(PdfPen(PdfColor(100, 100, 100), width: 1), Offset(0, y), Offset(pageSize.width, y));
y += 20;
String disclaimer = "Il presente documento è sigillato crittograficamente in modo inalterabile.\n"
"Qualsiasi modifica apportata al file dopo l'apposizione del sigillo invaliderà le firme.\n"
"Le identità dei firmatari sono state verificate tramite associazione univoca "
"tra il numero di telefono cellulare e il codice OTP inserito sul dispositivo al momento della firma.";
page.graphics.drawString(disclaimer, subTitleFont, bounds: Rect.fromLTWH(0, y, pageSize.width, 100), format: PdfStringFormat(alignment: PdfTextAlignment.center));
// Salva il file
final file = File('/Volumes/NVME-2TB/Sviluppo/development/cid_app/test/pagina_2_fea_preview.pdf');
file.writeAsBytesSync(await document.save());
document.dispose();
});
}