0

我目前正在开发一个基于 Adob​​es Scene7 的 web2print 项目。打印产品 (pdf) 的完整 url 非常长,超过了所有浏览器对 url 长度的限制。所以为了得到最终的印刷品,我假设我必须通过 POST 方法以不同的方式提交 url。似乎有两种方法:首先,使用html表单(method=post)并将所有url参数创建为(隐藏)输入字段。其次,使用 post 进行 ajax 调用(例如 jQuery.ajax)。

实际上,如果我在浏览器中打开打印 url,则准备好的 pdf 将在浏览器中打开。所以我需要一种方法通过 POST 将很长的 url 发送到服务器并打开我从它返回的 PDF。测试 ajax 版本我遇到了同源策略并得到一个错误,因为我调用了一个不在本地服务器上的 url。这一定是web2print项目的标准情况,这是怎么处理的?

提前谢谢米贝克

4

1 回答 1

0

我解决了问题。我分两步完成。首先,我使用 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 和参数不会作为一个 url 发布,而是通过使用 CURLOPT_POST 和 CURLOPT_POSTFIELDS 分开。可以使用 file_put_contents 将服务器响应(pdf)写入文件。如果 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 回答