0

私は現在、AdobesScene7に基づくweb2printプロジェクトに取り組んでいます。印刷物(pdf)への完全なURLは非常に長く、URLの長さのすべてのブラウザー制限を超えています。したがって、最終的な印刷製品を入手するには、POSTメソッドを介して別の方法でURLを送信する必要があると思います。2つの方法があるようです。まず、htmlフォーム(method = post)を使用し、すべてのurlパラメーターを(非表示の)入力フィールドとして作成します。次に、postを使用してajax呼び出し(jQuery.ajaxなど)を行います。

実際、ブラウザで印刷URLを開くと、準備ができたpdfがブラウザ内で開かれます。そのため、POSTを介して非常に長いURLをサーバーに送信し、そこから取得したPDFを開く方法が必要です。ajaxバージョンをテストすると、ローカルサーバー上にないURLを呼び出すため、same-origin-policyに遭遇し、エラーが発生します。これはweb2printプロジェクトの標準的な状況である必要がありますが、これはどのように処理されますか?

事前にThxMichbeck

4

1 に答える 1

0

私は問題を解決しました。私はそれを2つのステップで行いました。まず、ajax を使用して、ベース URL と URL パラメーターをローカル サーバー上の php スクリプトに送信します。jQuery で簡単に実行できます。

jQuery.ajax({
    type : "POST",
    url : './includes/php/userdata.php',
    data: { method: 'get_print_version',
            url: base_url,                  
            parameter: query_parameter,
            num: num_parameter },
    error: function(error) {
        console.log("Print version failed");
  },
  success: function(reault) {
    console.log("What is the result?");
  }         
});             

サーバー スクリプトは、cURL を使用してデータを最終サーバーに送信します。したがって、ベース URL とパラメーターは 1 つの URL として投稿されるのではなく、CURLOPT_POST と CURLOPT_POSTFIELDS を使用して分離されます。サーバーの応答 (pdf) は、file_put_contents を使用してファイルに書き込むことができます。PDF が大きくなると、ここでメモリ制限エラーが発生します。cURL からの回答を pdf ファイルに直接書き込むよりも優れています。

if ($_method == 'get_print_version')
{
    $url = $_REQUEST['url'];
    $parameter = $_REQUEST['parameter'];
    $num = $_REQUEST['num'];

    $post = curl_init();

    curl_setopt($post, CURLOPT_URL, $url);
    curl_setopt($post, CURLOPT_POST, $num);
    curl_setopt($post, CURLOPT_POSTFIELDS, $parameter);

    /* write calendar directly to file */
    $pdf = fopen('./Calendar.pdf', 'w');
    curl_setopt($post, CURLOPT_FILE, $pdf);

    curl_exec($post);
    curl_close($post);          

    echo $result;           
}
于 2012-11-19T14:12:34.027 に答える