0

我试图将使用 JQ 上传的 pdf 文件发送到使用 CLI 和 pdf2svg 将其转换为 svg 文件的 PHP 文件,最终目的是返回该 svg 文件,以便可以将其放入 svg 编辑器。

目前我有这个: 在 svg-editor.js 中:

if(file.type.indexOf("pdf") != -1){
    //convert to svg
    //load svg string
    var reader = new FileReader();
    reader.onloadend = function(e) {
        $.post("pdfuploads/pdfconvert.php", { 'pdf[]': [e.target.result] })
            .done(function(data){
                alert("Data Loaded: " + data );
                svgCanvas.importSvgString(data, true);
                svgCanvas.ungroupSelectedElement()
                svgCanvas.ungroupSelectedElement()
                svgCanvas.groupSelectedElements()
                svgCanvas.alignSelectedElements("m", "page")
                svgCanvas.alignSelectedElements("c", "page")
            });
    };
reader.readAsText(file);
}

上面检查了正在加载的文件的扩展名,如果是 pdf 则将其发布到 php 文件中。(一切正常)

在我的 php 文件中(它与 drupal 绑定):

<?php

$dir = getcwd();
define('DRUPAL_ROOT', $_SERVER['DOCUMENT_ROOT']); //added to make sure its defined as we're outside the use of index.php
chdir(DRUPAL_ROOT);
require_once './includes/bootstrap.inc';
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
chdir($dir);
global $base_url;

$time = microtime();

$handle = fopen("pdfupload-".$time.".pdf", "wb"); 
if (fwrite($handle, file_get_contents($_POST['pdf'][0])) === FALSE) { 
$error = "Cannot write to file";
exit; 
} 
fclose($handle);
//$file = file_put_contents('pdfupload-'.$time.'.pdf', $_POST['pdf'][0]);
$svg = exec("/usr/local/bin/pdf2svg pdfupload-".$time.".pdf output_page-".$time."%d.svg all");

cg_utils_watch('file pdf value','', $error);
cg_utils_watch('file svg value','', $svg);

echo "<pre>";
print_r($svg);
echo "</pre>";

return $svg;

忽略日志记录和 $svg 不返回 svg 文件的事实——

pdf流取自post,并保存。不幸的是,上传和保存在服务器上的 pdf 文件损坏了。它保存一个 pdf 文件,但是当打开该文件时它是空的,最终结果是 exec() 中写入服务器的 svg 文件也是空的。

有没有人有任何想法/知道这样做的更好方法?

4

1 回答 1

0

好的,事实证明上面评论中的 mkl 是正确的,问题出reader.readAsText(file)在线路上。

这是在发布之前触发的,因此 PDF 文件以文本形式发布。

在此之后:http: //www.develop.com/htmlfivefileapi我将 JQ 更改为以下内容:

if(file.type.indexOf("pdf") != -1){
    //convert to svg
    //load svg string
    var reader = new FileReader();
    reader.onloadend = function(e) {
        $.post("pdfuploads/pdfconvert.php", { 'pdf[]': [e.target.result] })
        .done(function(data){
            alert("Data Loaded: " + data );
            svgCanvas.importSvgString(data, true);
            svgCanvas.ungroupSelectedElement()
            svgCanvas.ungroupSelectedElement()
            svgCanvas.groupSelectedElements()
            svgCanvas.alignSelectedElements("m", "page")
            svgCanvas.alignSelectedElements("c", "page")
        });
    };
    reader.readAsDataURL(file);
}

现在它就像一个魅力:)

于 2013-10-04T13:27:46.797 回答