2013-10-02 45 views
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文件也是空的。

有沒有人有任何想法/知道這樣做的更好方法?

+0

一件事是字符編碼。一切都需要有相同的編碼(JavaScript,PHP腳本,數據庫等) – GordonM

+0

編輯器運行UTF-8,添加標題('Content-Type:text/html; charset = utf-8');到頂部的php文件,沒有喜悅。 – tobynew

+1

'reader.readAsText(file)'聽起來很糟糕--- PDF是二進制文件,讀取文本可能會破壞它們的內容。 – mkl

回答

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); 
} 

,它現在就像一個魅力:)

它可能是