Ver Mensaje Individual
  #210 (permalink)  
Antiguo 24/07/2007, 03:51
dblanco
 
Fecha de Ingreso: enero-2004
Mensajes: 207
Antigüedad: 20 años, 3 meses
Puntos: 1
pdf.Output

otra cosa para todos aquellos que no consiguen guardar el archivo, aunque le den privilegios de escritura al directorio destino.

Hay que modificar la función fopen del archivo includes/basics.asp de la siguiente forma:

linea 37 (v. 1.01 beta), originalmente pone

Código:
case "w" : v = 2;c=true;p=name;break;
sustituir por

Código:
case "w" : v = 2;c=true;p=Server.MapPath(name);break;
Pero es que además esta librería está pensada para que cuando guardamos lo haga directamente en el servidor sin aparecer el browser, a no ser que cuando llamemos a la función pdf.Output pongamos dejemos el nombre del fichero en blanco, con lo cual por defecto utiliza el nombre del archivo que llama a la función.

A mí personalmente, no me es útil tener un .pdf en el servidor, sino que deseo que cuando genero un .pdf sea para que el cliente lo guarde y como no me gusta que utilice el nombre de la página, sino es que le especifico, he modificado un poco la función Output del archivo fpdf.asp.

La cosa quedaría así, a partir de la línea 869 (v. 1.01 beta):

Código:
		//if(xfile==""){
			if(xdownload){
						Response.ContentType = "application/octet-stream";
						Response.AddHeader("Content-disposition", "attachment; filename=" + xfile);
					}
					else
					{
						Response.ContentType = "application/pdf"
						Response.AddHeader("Content-Disposition","inline");
					}
			if (!this.hasBinary){
				Response.Write(this.buffer)}
			else{
				xfile=Server.MapPath(lib.fso.GetTempName())
				xf=lib.fopen(xfile,"wb");
				if(xf.number)this.Error("Unable to create output file: " + xfile);
				lib.fwrite(xf,this.buffer);
				lib.fclose(xf);
				outB = Server.CreateObject("ADODB.Stream")
				outB.Type = 1
				outB.Open()
				outB.LoadFromFile (xfile)
				Response.BinaryWrite(outB.Read())
				outB.Close()
				lib.fso.DeleteFile(xfile);
				}
		//}
			//else

				//{
				//xf=lib.fopen(xfile,"wb");
				//if(xf.number)this.Error("Unable to create output file: " + xfile);
				//lib.fwrite(xf,this.buffer);
				//lib.fclose(xf);
				//}
Se podrían dejar la 2 opciones, osea que guarde al servidor o guarde donde queramos, con por ejemplo otro parámetro más donde especifiquemos que opción preferimos, cosa que sería fácilmente implementable, comparando ese nuevo parámetro con true o false y la opción que deseemos iría al ultimo else que acabamos de convertir en comentarios.

Buenos pues esto es todo, saludos.