我试图将使用 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 文件也是空的。
有没有人有任何想法/知道这样做的更好方法?