Pdfcrowd错误:[26]无法打开文件“data.php”

时间:2016-04-14 09:36:44

标签: php pdf-generation

我必须将一个导出文件转换为pdf。因为我正在使用PDFcrowed 但是如果我使用convertFile和convertURL就会出现一个问题,它会工作并转换成pdf如果我有传递php文件的路径。它会给出一个错误。 的 invoices.php

<?php
require 'pdfcrowd.php';

try
{   
    // create an API client instance
    $client = new Pdfcrowd("priyankaahire", "b50ca6e682a7194f24bf2081470d074f");

    $pdf = $client->convertFile('data.php');
    // set HTTP response headers
    header("Content-Type: application/pdf");
    header("Cache-Control: max-age=0");
    header("Accept-Ranges: none");
    header("Content-Disposition: attachment; filename=\"google_com.pdf\"");

    // send the generated PDF 
    echo $pdf;
}
catch(PdfcrowdException $why)
{
    echo "Pdfcrowd Error: " . $why;
}
?>

data.php

<table border="1">
    <tr>
        <th>NO.</th>
        <!-- <th>MAWBNO</th>-->
        <th>HAWBNO</th>
        <th>Consignee Name</th>
        <th>Consignee Address</th>
        <th>Sender Name</th>
        <th>Sender Address</th>
    </tr>
    <?php
    //connection to mysql
    mysql_connect("localhost", "root", ""); //server , username , password
    mysql_select_db("shepherddb");

    //query get data
    $sql = mysql_query("SELECT ship_hawbno,cust_fname,cust_street from shipment,customers
     where shipment.ship_consignee_id=customers.cust_id or shipment.ship_shipper_id=customers.cust_id and shipment.ship_id=2");
    $no = 1;
    while($data = mysql_fetch_array($sql)){
        echo '
        <tr>
            <td>'.$no.'</td>
            <td>'.$data['ship_hawbno'].'</td>
            <td>'.$data['cust_fname'].'</td>
            <td>'.$data['cust_street'].'</td>
            <td>'.$data['cust_fname'].'</td>
            <td>'.$data['cust_street'].'</td>
        </tr>
        ';
        $no++;
    }
    ?>
</table>

1 个答案:

答案 0 :(得分:2)

使用->convertFile()方法,您必须传递本地HTML filePath。您的错误很明确:

  
      
  1. 文件丢失。
  2.   
  3. 您错误拼写了文件名。
  4.   
  5. 您使用相对文件路径(例如&#39; index.html&#39;)但当前正在工作中   目录是您预期的其他地方:&#39; $ {cwd}&#39;
      通常,使用绝对文件路径而不是相对文件路径更安全。
  6.   

在您的特定情况下,data.php不在执行脚本的同一目录中。请改用绝对文件路径

请注意:

使用此方法,您将原始php文件发送到 PDFcrowd (可以看到您的PHP代码,包括最终的敏感数据)。转换过程将忽略所有php代码,并将在页面中转换仅纯HTML

换句话说,如果您的test.php页面与此类似:

<html>
    <head><title>Test</title></head>
    <body>
        <div style="border:1px solid black;">Hello <?php echo 'World'; ?></div>
    </body>
</html>

在浏览器中,您会看到:

┌─────────────┐
│ Hello World │
└─────────────┘

但是,在->convertFile( '/Absolute/Path/to/test.php' )之后,您转换的pdf文件将如下所示:

┌───────┐
│ Hello │
└───────┘

如果你想转换已处理的php文件,你可以尝试这样的事情:

$html = file_get_contents( 'http://localhost/path/to/your/test.php' );
file_put_contents( '/Absolute/Path/To/tempfile.html', $html );
$pdf = $client->convertFile( '/Absolute/Path/To/tempfile.html' );

换句话说,您首先要检索网址,然后将其保存到文件中,然后转换保存的文件。

另外,您可以使用->convertURI()代替->convertFile()

$pdf = $client->convertURI( 'http://www.example.com/path/to/your/test.php' );

在这种情况下,您必须更换www.example.com&#39;使用有效的主机名可访问的IP 地址(因此, localhost, 192.168.0.108)。< / p>