Improve error handling in PDF processing workflow

Refactored the PDF processing workflow to enhance error handling
and provide more descriptive exception messages. Added `try-catch`
blocks around the PDF/A-3b conversion and document saving steps
to handle potential failures.

Labeled the workflow steps for clarity:
- Step 1: Convert to PDF/A-3b
- Step 2: Buffer converted PDF
- Step 3: Embed attachment
- Step 4: Save document

Removed redundant `MemoryStream` initialization for the original
PDF and updated comments to improve code readability and
maintainability.
This commit is contained in:
OlgunR
2026-05-29 09:20:34 +02:00
parent 9adc9ac4ed
commit 1144c45826

View File

@@ -35,20 +35,28 @@ public class PdfResultPackageService(
// 3. Original auf PDF/A-3b hochstufen + Bericht anhängen // 3. Original auf PDF/A-3b hochstufen + Bericht anhängen
await Task.Run(() => await Task.Run(() =>
{ {
// Original in MemoryStream laden
using var inputStream = new MemoryStream(originalPdfBytes); using var inputStream = new MemoryStream(originalPdfBytes);
using var outputStream = new MemoryStream();
// PDF/A-3b Konvertierung // Schritt 1: PDF/A-3b Konvertierung
var converter = new PdfDocumentConverter(inputStream); PdfDocumentConverter converter;
converter.Convert(PdfCompatibility.PdfA3b); try
{
converter = new PdfDocumentConverter(inputStream);
converter.Convert(PdfCompatibility.PdfA3b);
}
catch (Exception ex)
{
throw new InvalidOperationException(
"Konvertierung nach PDF/A-3b fehlgeschlagen. " +
"Die Originaldatei ist möglicherweise beschädigt oder nicht konvertierbar.", ex);
}
// Konvertiertes PDF in MemoryStream speichern // Schritt 2: Konvertiertes PDF puffern
using var convertedStream = new MemoryStream(); using var convertedStream = new MemoryStream();
converter.SaveDocument(convertedStream); converter.SaveDocument(convertedStream);
convertedStream.Position = 0; convertedStream.Position = 0;
// Bericht als Anhang einbetten // Schritt 3: Anhang einbetten
using var processor = new PdfDocumentProcessor(); using var processor = new PdfDocumentProcessor();
processor.LoadDocument(convertedStream); processor.LoadDocument(convertedStream);
@@ -62,8 +70,17 @@ public class PdfResultPackageService(
Data = File.ReadAllBytes(reportPath) Data = File.ReadAllBytes(reportPath)
}); });
// Speichern // Schritt 4: Speichern
processor.SaveDocument(outputPath); try
{
processor.SaveDocument(outputPath);
}
catch (Exception ex)
{
throw new InvalidOperationException(
$"Result-PDF konnte nicht gespeichert werden unter '{outputPath}'. " +
"Prüfe ob das Verzeichnis existiert und beschreibbar ist.", ex);
}
}); });
logger.LogInformation( logger.LogInformation(