无法使用AJAX

时间:2016-05-31 10:05:52

标签: javascript php jquery ajax tcpdf

我想获取HTML文件的PDF,我正在使用TCPDF生成PDF和AJAX来发送信息。现在,我只是试图在页面上获得一个SVG的PDF,当我完成这项工作后,我将完成其余的工作。

问题是TCPDF生成PDF但不是下载它,而是将其传递给javascript cosole。当我不使用AJAX时,它的工作非常完美。

这是AJAX代码:

// Get the d3js SVG element
var tmp  = document.getElementById("elemPD5graf");
var svg = tmp.getElementsByTagName("svg")[0];

// Extract the data as SVG text string
var svg_xml = (new XMLSerializer).serializeToString(svg);  

var j = jQuery.noConflict();
var parameters = { datos : svg_xml };
j.ajax({
    type: 'POST',
    url: 'generarPDF.php',
    data : parameters,
    success: function(result) {
        console.log(result);
    }
});

这是PHP代码:

<?php
// Include the main TCPDF library (search for installation path).
require_once('..\tcpdf\tcpdf.php');
// create new PDF document
$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);

// set default header data
$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 058', PDF_HEADER_STRING);

// set header and footer fonts
$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN));
$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA));

// set default monospaced font
$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED);

// set margins
$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT);
$pdf->SetHeaderMargin(PDF_MARGIN_HEADER);
$pdf->SetFooterMargin(PDF_MARGIN_FOOTER);

// set auto page breaks
$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);

// set image scale factor
$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO);

// ---------------------------------------------------------

// set font
$pdf->SetFont('helvetica', '', 10);

// add a page
$pdf->AddPage();

// NOTE: Uncomment the following line to rasterize SVG image using the ImageMagick library.
//$pdf->setRasterizeVectorImages(true);
$svg2 = $_POST['datos'];

$pdf->ImageSVG($file='@'.$svg2, $x=15, $y=30, $w='', $h='', $link='http://www.tcpdf.org', $align='', $palign='', $border=1, $fitonpage=false);

// ---------------------------------------------------------

//Close and output PDF document
$pdf->Output('nuevo.pdf', 'D');
//============================================================+
// END OF FILE
//============================================================+
?>

提前感谢您的帮助。

3 个答案:

答案 0 :(得分:2)

Unable to create output file

$ destination可以采用以下值之一:

  

I:将文件内联发送到浏览器(默认)。给出的名字   当选择&#34;另存为&#34;时使用名称链接上的选项   生成PDF。

     

D:发送到浏览器并强制下载给定名称的文件   按名称。

     

F:保存到名称为name的名称的本地服务器文件。

     

S:将文档作为字符串返回(名称被忽略)。

     

FI:相当于F + I选项

     

FD:相当于F + D选项

     

E:将文档作为base64 mime多部分电子邮件附件(RFC   2045)

错误$name表示TCPDF无法将您的文档写入您的文件夹。在GLES20.glTexParameterf(GL_TEXTURE_EXTERNAL_OES, GLES20.GL_TEXTURE_MAG_FILTER, GLES20.GL_LINEAR); 中提供有效路径。

答案 1 :(得分:0)

由于你的行

,pdf会打印到Javascript控制台
console.log(result);

可能的解决方案:

  • 将pdf保存在服务器上的临时文件中,并将URL返回到此文件,然后将其分配给location.href
  • 不要使用Ajax,而是使用<form>
  • 您可以尝试document.write(result)

答案 2 :(得分:0)

尝试在POST调用中下载PDF时出现同样的问题, 试着直接打电话给你generarPDF.php页面(使用GET),并且会很正常地工作。