4

Docverterを使用して LaTeX/markdown ファイルを PDF に変換しようとしていますが、PHP を使用して CURLを実行し、API 経由で Docverter にアクセスするのに問題があります。私は完全なばかではないことを知っています。b/ci は、この Docverter の例のシェル スクリプトを適合させ、コマンド ライン (Mac OSX) から実行することで、これを機能させることができます。

PHP の使用exec():

$url=$_SERVER["DOCUMENT_ROOT"];
$file='/markdown.md';
$output= $url.'/markdown_to_pdf.pdf';
$command="curl --form from=markdown \ 
               --form to=pdf \ 
               --form input_files[]=@".$url.$file." \
               http://c.docverter.com/convert > ".$output;
exec("$command");

これはエラー メッセージを表示しませんが、機能しません。どこかにパスの問題がありますか?

更新 @Johnの提案に基づいて、ここに PHP を使用した例を示しますcurl_exec()from here。残念ながら、これも機能しませんが、少なくともエラー メッセージが表示されます。

$url = 'http://c.docverter.com/convert';
$fields_string ='';
$fields = array('from' => 'markdown',
        'to' => 'pdf',
        'input_files[]' => $_SERVER['DOCUMENT_ROOT'].'/markdown.md',
    );

    //url-ify the data for the POST
    foreach($fields as $key=>$value) { $fields_string .= $key.'='.$value.'&'; }
    rtrim($fields_string, '&');

    //open connection
    $ch = curl_init();

    //set the url, number of POST vars, POST data
    curl_setopt($ch,CURLOPT_URL, $url);
    curl_setopt($ch,CURLOPT_POST, count($fields));
    curl_setopt($ch,CURLOPT_POSTFIELDS, $fields_string);

    //execute post
    $result = curl_exec($ch);

    //close connection
    curl_close($ch);
4

1 に答える 1

12

私は自分の問題を解決しました。上記のコードには 2 つの主な問題がありました。

1)$fields配列が に対して正しくフォーマットされていませんでしたinput_files[]。MIME タイプの宣言が必要でした@/(以下のコードを参照)。

2)curl_exec()出力 (実際に新しく作成されたファイルの内容) を返す必要があり、true/falseこの関数のデフォルトの動作だけではありません。これは、curl オプションを設定することによって実現されますcurl_setopt($ch, CURLOPT_RETURNTRANSFER, true);(以下のコードを参照)。

完全な動作例

//set POST variables
$url = 'http://c.docverter.com/convert';
$fields = array('from' => 'markdown',
    'to' => 'pdf',
    'input_files[]' => "@/".realpath('markdown.md').";type=text/x-markdown; charset=UTF-8"
    );

//open connection
$ch = curl_init();

//set options 
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-type: multipart/form-data"));
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POSTFIELDS, $fields); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); //needed so that the $result=curl_exec() output is the file and isn't just true/false

//execute post
$result = curl_exec($ch);

//close connection
curl_close($ch);

//write to file
$fp = fopen('uploads/result.pdf', 'w');  //make sure the directory markdown.md is in and the result.pdf will go to has proper permissions
fwrite($fp, $result);
fclose($fp);
于 2013-02-15T23:14:16.057 に答える