95 lines
5.5 KiB
Dart
95 lines
5.5 KiB
Dart
|
|
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();
|
||
|
|
});
|
||
|
|
}
|