[Reporting Services] bestandsnaam PDF

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • PdeBie
  • Registratie: Juni 2004
  • Laatst online: 15:37
Hoi allen,

ik genereer orderbonnen en facturen op een daarvoor ingerichte pagina 'print.aspx'. Deze pagina rendert met reporting services een PDF met daarin de gegevens van de opgevraagde order/factuur (welke via de querystring wordt mee gegeven).

Deze PDF wordt direct op het scherm getoond in de browser door o.a. de volgende regels:
C#:
1
2
3
4
this.Response.AddHeader("Content-disposition", String.Format("inline; filename={0}", filename));
this.Response.BinaryWrite(bytes);
this.Response.Flush();
this.Response.End();


filename is een dynamisch gegenereerde text op basis van wat order/factuur gegevens, bijv:
C#:
1
filename = String.Format("Invoice_{0}.pdf", invoicenumber);


Adobe Reader wordt binnen de browser geopend en toont de PDF.
Als ik echter vervolgens binnen Adobe Reader de PDF op wil slaan, slaat hij deze op met de naam van de pagina 'print.pdf' in plaats van 'invoice_{0}.pdf'.

Als ik de pdf niet in de browser open, maar als download aanbied (Content-disposition attachment i.p.v. inline) krijg ik wel de juiste bestandsnaam aan de file gekoppeld.

Hoop dat het een beetje duidelijk is.
Iemand een idee hoe ik dit kan oplossen?

Acties:
  • 0 Henk 'm!

  • HuHu
  • Registratie: Maart 2005
  • Niet online
Een korte zoektocht op Google geeft de volgende URL: http://itext-general.2136...obe-reader-td2155623.html

Lijkt er op dat het dus niet kan, tenzij je de URL kunt aanpassen naar mijnpagina.nl/print/invoice_{0}.pdf en je dit server-side afhandelt.

Acties:
  • 0 Henk 'm!

  • PdeBie
  • Registratie: Juni 2004
  • Laatst online: 15:37
ik heb uiteraard zelf ook gegoogled en daarbij kwam ik deze site tegen:
http://stackoverflow.com/...-save-filename-in-acrobat
Set the file name in ContentType as well. This should solve the problem.

C#:
1
2
3
context.Response.ContentType = "application/pdf; name=" + fileName;
// the usual stuff
context.Response.AddHeader("content-disposition", "inline; filename=" + fileName);

After you set content-disposition header, also add content-length header, then use binarywrite to stream the PDF.
C#:
1
2
context.Response.AddHeader("Content-Length", fileBytes.Length.ToString());
context.Response.BinaryWrite(fileBytes);
Dit werkt in zowel Firefox als Chrome. Helaas niet in IE.

Acties:
  • 0 Henk 'm!

  • PdeBie
  • Registratie: Juni 2004
  • Laatst online: 15:37
na overleg met collega's besloten dit even te laten voor wat het is. Dus wellicht kom ik er later nog eens op terug.

  • Pizzalucht
  • Registratie: Januari 2011
  • Laatst online: 07-10 23:21

Pizzalucht

Snotneus.

Ik gebruikte deze code om het te laten werken in alle browsers, het is PHP, maar misschien kun je er iets mee:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
header("Content-Type: audio/x-mpeg, audio/x-mpeg-3, audio/mpeg3");

$invalid_chars = array("'", "\"", ":", "/", "\\", "*", "?", "<", ">", "|");
$file_title = str_replace($invalid_chars, "", $file_title);

if (preg_match("/MSIE/",$_SERVER['HTTP_USER_AGENT'])){
    
    header('Content-Disposition: attachment; filename="' . trim(addslashes(rawurlencode($file_title))) . '.mp3"');
} else {
    
    header('Content-Disposition: attachment; filename="' . trim(addslashes($file_title)) . '.mp3"');
}


De oplossing zit er wellicht bij:
* Foute karakters uit de bestandsnaam filteren
* De bestadsnaam omsluiten met quotes
* Een url encode doen wanneer de request van IE komt

[ Voor 39% gewijzigd door Pizzalucht op 12-09-2012 00:14 ]


  • HuHu
  • Registratie: Maart 2005
  • Niet online
@Pizzalucht; het gaat om PDF documenten en niet om MP3. Er zit gewoon een fout in Adobe Reader wat er voor zorgt dat de standaard oplossing niet werkt.

  • Pizzalucht
  • Registratie: Januari 2011
  • Laatst online: 07-10 23:21

Pizzalucht

Snotneus.

HuHu schreef op woensdag 12 september 2012 @ 09:44:
@Pizzalucht; het gaat om PDF documenten en niet om MP3. Er zit gewoon een fout in Adobe Reader wat er voor zorgt dat de standaard oplossing niet werkt.
Dat snap ik, maar het werkt precies hetzelfde, alleen de mimetype is anders ;)

pdebie geeft al aan dat het hem inmiddels gelukt is in Firefox en Chrome, ik geef hem een aantal mogelijkheden waarom het mogelijk niet werkt in IE :)

  • HuHu
  • Registratie: Maart 2005
  • Niet online
Ook jouw oplossing werkt niet in IE voor PDF documenten, de mogelijkheden die je suggereert zullen het niet oplossen. Dat is nu juist het probleem.
Pagina: 1