Abra la respuesta JSON de Fpdf, en una ventana nueva, para guardar el PDF. - PHP
Frecuentes
Visto 13,279 veces
1
Estoy tratando de enviar una matriz Json usando una llamada AJAX a una función de controlador que procesa los datos usando una biblioteca FPDF que ya está implementada en Codeigniter. Puedo ver que se devuelven los datos PDF, pero ¿cómo haría para abrir estos datos PDF en una nueva ventana para poder guardar el PDF? No importa si no se puede ver el PDF, solo necesito guardar el archivo generado.
Aquí está el código que tengo hasta ahora:
Código Jquery
<script defer="defer" type="text/javascript">
$(document).ready(function() {
$('a#export').click(function(exportRecord) {
var postData = {
'record_type' : 1,
'title' : 'Some Title Here',
'content' : 'Some content here',
};
$.ajax({
url: "<?php echo base_url().'admin/pdf/createPDF';?>",
type:'POST',
data: postData,
dataType: 'json',
success: function(data){
window.open(
'data:application/pdf,'+encodeURIComponent(data),
'Batch Print',
'width=600,height=600,location=_newtab'
);
} // End of success function of ajax form
}); // End of ajax call
return false;
});
});
</script>
La función del controlador
<?php
function createPDF(){
$content = $this->input->post('content');
$font_directory = './assets/fpdf_fonts/';
set_realpath($font_directory);
define('FPDF_FONTPATH',$font_directory);
$data = $this->fpdf->Open();
$data = $this->fpdf->AddPage();
$data = $this->fpdf->SetFont('Arial','',8);
$data = $this->fpdf->Cell(80);
$data = $this->fpdf->Cell(0,0,$content,0,1,'R');
$data = $this->fpdf->Output();
}
La respuesta JSON
%PDF-1.3
3 0 obj
<</Type /Page
/Parent 1 0 R
/Resources 2 0 R
/Contents 4 0 R>>
endobj
4 0 obj
<</Filter /FlateDecode /Length 72>>
stream
x�3R��2�35W(�r
Q�w3T��30PISp
��陛)X��(��(hx����+���i*�d�����F
endstream
endobj
1 0 obj
<</Type /Pages
/Kids [3 0 R ]
/Count 1
/MediaBox [0 0 595.28 841.89]
>>
endobj
5 0 obj
<</Type /Font
/BaseFont /Helvetica
/Subtype /Type1
/Encoding /WinAnsiEncoding
>>
endobj
2 0 obj
<<
/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
/Font <<
/F1 5 0 R
>>
/XObject <<
>>
>>
endobj
6 0 obj
<<
/Producer (FPDF 1.7)
/CreationDate (D:20120309201958)
>>
endobj
7 0 obj
<<
/Type /Catalog
/Pages 1 0 R
>>
endobj
xref
0 8
0000000000 65535 f
0000000228 00000 n
0000000411 00000 n
0000000009 00000 n
0000000087 00000 n
0000000315 00000 n
0000000515 00000 n
0000000590 00000 n
trailer
<<
/Size 8
/Root 7 0 R
/Info 6 0 R
>>
startxref
639
%%EOF
""
3 Respuestas
1
Tal vez un poco tarde, ahí está mi respuesta. Tengo el sistema funcionando.
Por una razón que no entiendo, no funciona con la llamada ajax.
Esta publicación ayudó a hacer la magia: Solicitud de publicación de JavaScript como envío de formulario
HTML (aquí llamamos al generador de PDF en PHP con el parámetro POST):
post('GenerateStockLabelsWPDF.php', { CSVTable: JSON.stringify(encodeURIComponent(CSVtable))});
Luego PHP (para la muestra, es un texto fijo, puede adaptarlo obteniendo variable a través de _post):
<?php
include "php/fpdf/fpdf.php";
$pdf = new FPDF();
$pdf->Open();
$pdf->SetMargins(0, 0);
$pdf->SetAutoPageBreak(false);
$pdf->AddPage();
$content = 'thisis a test';
$pdf->SetXY(20, 20);
$pdf->SetFont('Helvetica', 'B', 10);
$pdf->MultiCell(150, 5, $content, 0, 'L');
$pdf->Output('Labels.pdf', 'D');
exit;
?>
Respondido el 20 de junio de 14 a las 14:06
0
¿Guardar el archivo generado dónde? ¿En la computadora de los usuarios? ¿En el servidor?
Parece $data
en el capítulo respecto a la createPFD
Método is el PDF.
Para lo primero consultar http://codeigniter.com/user_guide/helpers/download_helper.html
force_download('coolPDF.pdf', $data);
Para esto último, verifique http://codeigniter.com/user_guide/helpers/file_helper.html
write_file('/path/to/these/PDFs/fileName.pdf', $data);
respondido 11 mar '12, 15:03
0
Envío el parámetro a través de POST sin ajax y devuelvo el PDF en nuevas ventanas:
var form = document.createElement("form");
form.setAttribute("method", "post");
form.setAttribute("action", "admin/pdf/createPDF.aspx");
var hiddenField = document.createElement("input");
hiddenField.setAttribute("name", "record_type");
hiddenField.setAttribute("value", "1");
hiddenField.setAttribute("name", "title");
hiddenField.setAttribute("value", "Some Title Here");
hiddenField.setAttribute("name", "content");
hiddenField.setAttribute("value", "Some content here");
form.appendChild(hiddenField);
form.setAttribute("target", "_blank");
document.body.appendChild(form); // Not entirely sure if this is necessary
form.submit();
return;
Respondido 25 ago 14, 14:08
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas php jquery ajax codeigniter codeigniter-2 or haz tu propia pregunta.
para descargar el archivo en la computadora de los usuarios - daniel adarve
Bien, entonces el primero (
force_download('coolPDF.pdf', $data);
) hará el trabajo. - colector de aguas pluviales