Report Server - PDF-Download in Browser

Hallo,
ich habe eine Frage zum Report Servers:

Ich möchte aus dem Browser das Erstellen eines Reports auslösen und diesen dann zum Download im Browser angezeigt bekommen (als erste Teststufe, später wird das dann in eine andere Webanwendung eingebaut).
Mittels der REST-API habe ich das jetzt auch schon alles soweit hinbekommen, dass dem Browser das PDF-Dokument zurück gegeben wird. Das sehe ich in der Entwicklerkonsole des Browser. Dort wird PDF angezeigt als Rückgabetyp und wenn ich mir die Antwortdaten in eine leere Datei kopiere und die in .PDF umbenenne, dann kann mir das PDF anschauen, wie ich es haben will.

Der Browser zeigt mir aber nicht das übliche Fenster an, das normalerweise bei PDF Dateien erscheint. Da passiert einfach gar nichts. Muss man dazu noch irgendwelche Einstellungen vornehmen, damit das funktioniert? Soweit ich das beurteilen kann sind die Headerdaten der Antwort eigentlich so, dass der Browser die empfangen Daten als PDF-Datei interpretieren müsste:
Cache-Control: no-cache,no-store
Content-Disposition: attachment; filename=Fernwartungsprotokoll.pdf; filename*=UTF-8’'Fernwartungsprotokoll.pdf
Content-Length: 13967
Content-Type: application/pdf
Date: Wed, 30 Oct 2024 12:26:29 GMT
Expires : Thu, 01 Jan 1970 00:00:00 GMT
Pragma: no-cache
Server: Microsoft-IIS/10.0

Oder gibt es ggf. auch noch eine andere Möglichkeit um das Erzeugen des Reports auszulösen? Dem Report muss allerdings ein Parameter übergeben werden, damit er die korrekten Daten ausgibt.

Vorab vielen Dank für die Rückmeldung.

Viele Grüße
Dominik Moersch

Hallo!
Mir ist nicht ganz klar, welches Fenster du genau meinst :slight_smile:
Mit welcher Programmiersprache machst du denn den API-Aufruf?

Grüße
HP

Da der Content-Disposition-Header mit attachment versehen ist, wird der Browser das PDF standardmäßig zum Download anbieten, anstatt es direkt anzuzeigen. Du müsstest das selber dann anzeigen im Browser, irgendwie sowas (ist nur ein Teil Rest müsstest selber schauen, also nur ein Ansatz)

function showPDF(response) {
    // Erstelle einen Blob mit dem Inhalt des PDF und dem passenden MIME-Type
    const pdfBlob = new Blob([response], { type: 'application/pdf' });
    
    // Erzeuge eine URL aus dem Blob
    const pdfUrl = URL.createObjectURL(pdfBlob);
    
    // Öffne das PDF in einem neuen Tab oder Frame
    window.open(pdfUrl, '_blank');
}

Hallo,
der Aufruf kommt nicht aus einer Programmierumgebung, den habe ich direkt im Browser zusammengebaut. Vom Aufruf her entspricht das den Beispielen zur Rest-Api in der Doku, die dort über die Kommandozeile per curl gemacht werden.

Hallo,
genau, wegen dem attachment/pdf hätte ich auch erwartet, dass mir der Browser das ganze zum Download anbietet. Er macht aber gar nicht. Er zeigt mir das Dokument nicht an, er bietet es mir nicht zum Download an. Es passiert einfach nichts.
Was genau mit dem PDF passiert wäre mir im ersten Schritt sogar noch relativ egal; anzeigen, downloaden, Auswahldialog. Mir würde schon reichen, wenn er mir das PDF in irgendeiner Art und Weise anzeigen würde.

Aber an Hand der Antwort gehe ich einmal davon aus, dass das eigentlich funktionieren sollte. Dann werde ich mal weiter auf die Suche gehen, woran das liegen könnte.

Viele Grüße
Dominik

Ja, das ist eben eine API. Dafür braucht es eine Programmiersprache oder ein Tool. Der Browser kann direkt lediglich HTTP-GET anfragen.
Evtl. kannst du dir die Url des Exports im RS selbst zusammen bauen.

z.B.
https://www.deinserver.de/combitReportServer/Report/Export/EB7E799E-74D9-425F-8CD0-8883D3C79D01

Das letzte ist die ID des Reports.
Evtl. kann man hier auch noch mehr Parameter mitgeben, so wie bei der REST-Api.

Zeig doch mal deinen Aufruf, oder mal das was Hans Peter geschrieben hat mal probieren.

Hier ist mal der Ausschnitt aus der Doku, hab ich gefunden, so speichert der Browser das ab z.B.

Bericht abrufen und in Datei speichern
ID der Berichtsvorlage: 2551186E-F854-4D1A-ACAE-8ABA02241AE2
Hier mit API-Token in URL, erste Datei des Berichts wird abgerufen und in der Datei “salesreport.pdf” gespeichert.
curl “https://combitreportserver/api/v1/report/2551186E-F854-4D1A-ACAE-
8ABA02241AE2/export?clientid=apiuser123&clienttoken=abc” > salesreport.pdf

Hallo,
danke für die Rückmeldung.

Mein Ansatz war, dass der Browser der kleinste gemeinsame Nenner ist und wenn es damit funktioniert, dann funktioniert es auch mit allem anderen.

Mein Aufruf ist eigentlich ziemlich genauso wie das curl Beispiel. Und wie schon geschrieben, das PDF kommt auch als Antwort zurück, der Browser will es aber nicht öffnen. Warum verstehe ich nicht.

Für meinen Endanwendungsfall ist das aber letztlich auch egal, da brauche ich keinen Browseraufruf, sondern es muss über die eingebauten Funktionen unserer LowCode-Plattform funktionieren. Dort verhält es sich aktuell allerdings genauso, das PDF wird mir nicht zum Download angeboten.

Dann muss ich jetzt mal versuchen, dass sich von denen jemand damit beschäftigt und schaut, ob die die Daten entsprechend zum Download anbieten können.

Viele Grüße und danke für die Hilfe
Dominik Moersch