0
我試圖發送一個使用JQ上傳的PDF文件到一個PHP文件,該文件使用CLI和pdf2svg將其轉換爲svg文件,最終目的是返回該svg文件它可以放入svg編輯器。通過POST發送上傳的PDF文件變得腐敗
目前,我有這樣的: 在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流是從帖子中取出,並保存。在上傳和保存在服務器上的pdf文件變得損壞之間的不安之處。它保存了一個pdf文件,但是當打開該文件爲空時,最終結果是在exec()中寫入服務器的svg文件也是空的。
有沒有人有任何想法/知道這樣做的更好方法?
一件事是字符編碼。一切都需要有相同的編碼(JavaScript,PHP腳本,數據庫等) – GordonM
編輯器運行UTF-8,添加標題('Content-Type:text/html; charset = utf-8');到頂部的php文件,沒有喜悅。 – tobynew
'reader.readAsText(file)'聽起來很糟糕--- PDF是二進制文件,讀取文本可能會破壞它們的內容。 – mkl