+
+ @* Hinweis:
+ - Diese Seite zeigt aktuell das PDF per einfachem iframe (funktioniert zuverlässig).
+ - Nächster Commit: wir ersetzen iframe durch DevExpress WebDocumentViewer oder laden diesen zusätzlich.
+ - Der Link "DevExpress Viewer (experimental)" ist ein Platzhalter; wir implementieren die Route /Invoices/DocumentViewerDevExpress in einem der nächsten Schritte.
+ *@
+
\ No newline at end of file
diff --git a/DXApp.TemplateKitProject/Pages/Invoices/DocumentViewer.cshtml.cs b/DXApp.TemplateKitProject/Pages/Invoices/DocumentViewer.cshtml.cs
new file mode 100644
index 0000000..021c7fc
--- /dev/null
+++ b/DXApp.TemplateKitProject/Pages/Invoices/DocumentViewer.cshtml.cs
@@ -0,0 +1,17 @@
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.AspNetCore.Mvc.RazorPages;
+
+namespace DXApp.TemplateKitProject.Pages.Invoices;
+
+public class DocumentViewerModel : PageModel
+{
+ [BindProperty(SupportsGet = true)]
+ public int Id { get; set; }
+
+ public string PdfUrl => $"/Invoices/ViewPdf?id={Id}";
+
+ public void OnGet()
+ {
+ // Keine serverseitige Logik nötig für die erste Version.
+ }
+}
\ No newline at end of file
diff --git a/DXApp.TemplateKitProject/Pages/Invoices/ViewPdf.cshtml.cs b/DXApp.TemplateKitProject/Pages/Invoices/ViewPdf.cshtml.cs
index a13f182..83d5017 100644
--- a/DXApp.TemplateKitProject/Pages/Invoices/ViewPdf.cshtml.cs
+++ b/DXApp.TemplateKitProject/Pages/Invoices/ViewPdf.cshtml.cs
@@ -18,7 +18,6 @@ public class ViewPdfModel : PageModel
public async Task OnGetAsync(int id)
{
- // Sicherheit: defensive checks, gleiche Logik wie CustomReportStorageWebExtension
var invoice = await _db.ZugferdInvoices
.AsNoTracking()
.FirstOrDefaultAsync(i => i.Id == id);
@@ -35,6 +34,10 @@ public class ViewPdfModel : PageModel
var bytes = await System.IO.File.ReadAllBytesAsync(invoice.ResultFilePath);
_logger.LogInformation("ViewPdf: Invoice {Id} ausgeliefert ({Size} Bytes).", id, bytes.Length);
- return File(bytes, "application/pdf", $"{Path.GetFileName(invoice.ResultFilePath)}");
+ // Wichtig: keine "attachment" Content-Disposition setzen
+ // wir setzen inline (oder lassen es weg) damit Browser im Viewer darstellt
+ Response.Headers["Content-Disposition"] = $"inline; filename=\"{Path.GetFileName(invoice.ResultFilePath)}\"";
+
+ return File(bytes, "application/pdf");
}
}
\ No newline at end of file