2010-01-06 36 views
24

Tengo un script php que genera un informe en pdf. Cuando vamos a guardar el documento pdf, el nombre de archivo que Acrobat sugiere es report_pdf, ya que el script php se llama report_pdf.php. Me gustaría asignar un nombre dinámico al archivo pdf, por lo que no tengo que escribir el nombre apropiado para el informe cada vez que lo guardo.usando el encabezado() para reescribir el nombre de archivo en la URL para el pdf dinámico

Preguntar en un grupo de noticias, alguien sugirió este, donde filename="July Report.pdf" es el nombre del informe previsto

<? 
header('Content-Type: application/pdf'); 
header('Content-disposition: filename="July Report.pdf"'); 

Pero no funciona. ¿Lo estoy haciendo mal, o funcionará esto? ¿Es este un trabajo para mod_rewrite?


Así que he intentado tanto

header('Content-disposition: inline; filename="July Report.pdf"'); 

y

header('Content-disposition: attachment; filename="July Report.pdf"'); 

(no al mismo tiempo) y no trabajan para mí. ¿Esto es un problema con mi servidor web? Por esta url, aquí está mi código:

<? 
header('Content-disposition: inline; filename="July Report.pdf"'); 

// requires the R&OS pdf class 
require_once('class.ezpdf.php'); 
require_once('class.pdf.php'); 

// make a new pdf object 
$pdf = new Cpdf(); 
// select the font 
$pdf->selectFont('./fonts/Helvetica'); 
$pdf->addText(30,400,30,'Hello World'); 
$pdf->stream(); 

?> 
+1

Si desea que el archivo se descargue (y no ampliable en el navegador), añadir los siguientes: encabezado ('Content-Transfer-Encoding: binary'); header ('Content-Type: application/force-download'); De lo contrario, aún debe incluir el encabezado de línea ('Content-Type: application/pdf') para que su navegador sepa cómo abrir el archivo. – eCaroth

+0

Además, es posible que le falte la longitud del contenido del archivo; algunos navegadores abren los archivos correctamente sin esto y otros no. Para obtener esto, descargue todos los resultados en un buffer de salida, luego imprima los encabezados y especifique uno como 'Content-Length:' ** el strlen del buffer de salida *** – eCaroth

+0

Comente temporalmente esas líneas de cabecera php y vea la salida . NO debe contener ningún error php. Aplique los encabezados después de corregir los errores si es así. –

Respuesta

37

Probar:

header('Content-Disposition: attachment; filename="July Report.pdf"'); 

o

header('Content-Disposition: inline; filename="July Report.pdf"'); 

Otra opción sería utilizar el $_SERVER['PATH_INFO'] t o pasar su "Report.pdf Julio" - un enlace de ejemplo podría ser:

<a href="report_pdf.php/July%20Report.pdf?month=07"> 

Ese archivo debe predeterminado para guardar como "Julio Report.pdf" - y debe comportarse exactamente como su edad script php hizo, el cambio solo el código que produce el enlace al pdf.

+1

Los probé, sin suerte :(. ¿Es un problema con mi servidor web? – user151841

+0

Ese truco href funcionó! Ahora, ¿qué pasa con% 20 en el nombre del archivo cuando voy a guardarlo?;) – user151841

4

debe ser:

header('Content-disposition: attachment;filename="July Report.pdf"'); 
0

¿Intentó eliminar espacios del nombre de archivo con guiones? Entonces, creo que su nombre debe ser así; nombre de archivo = Julio-Report.pdf

2

Basado en https://github.com/rospdf/pdf-php/raw/master/readme.pdf (Página 19) La corriente-método acepta una matriz como parámetro:

stream([array options]) utiliza para la salida, esto establecerá las cabeceras necesarias y la salida de la código pdf La matriz de opciones se puede utilizar para establecer una serie de cosas acerca de la salida:

'Content-Disposition'=>'filename' establece el nombre del archivo, ...

Este código funciona bien para mí

$ezOutput = $pdf->ezStream(array("Content-Disposition"=>"YourFileName.pdf")); 

En mi caso yo uso ezStream() pero creo que stream() debería dar el mismo resultado.

+1

En realidad, el aceptado no trabaja para mi. ¡Este realmente funciona! ¡Por lo tanto, gracias! –

1

Por el nombre que aparece en la ficha del título en el navegador

que tenía el mismo problema, entonces encontré que es falta de metadatos dentro de mi .pdf. Utilicé herramientas ("herramientas PDF de debenu") para editar propiedades de PDF como autor, título, etc. ... Solo cambio el título del campo vacío por el título que quiero, cargo el nuevo pdf y ahora, con el mismo código, mismo script el navegador muestra el nombre correcto!

Para el nombre cuando pides para salvar documento

es lo que u especifican en nombre de fichero de cabecera =

+0

Al establecer el título del PDF en los metadatos también se corrige el nombre de archivo que se muestra en la esquina superior izquierda al visualizar el PDF en Chrome. Para aquellos que usan FPDF para generar archivos PDF de forma dinámica, use '$ pdf-> SetTitle ('Your Title');'. ¡Gracias! – jessica

Cuestiones relacionadas