2016-11-25 10 views
0

Я пытаюсь создать docFiles на моем webapp. Сначала я думал об использовании какого-либо инструмента в Frontend, например, в инструменте jquery.wordexport.js от Markswindolls. Но поскольку функций, таких как настройка заголовка или нижнего колонтитула или выравнивания, не так много, я начал работать с «phpword».phpword send generated doc to frontend

Моя проблема в том, что файл docFile сохраняется на сервере. Есть ли возможность отправить файл через ajax в Frontend, чтобы пользователь мог получить файл после нажатия на кнопку «загрузить как .doc»?

Любые другие рекомендации также приветствуются.

JQuery:

$('#word-button').on('click', function() { 
$.ajax({ 
    type: "POST", 
    url: "phpWORD/gendocx.php", 

    success: function (msg, string, jpXHR) { 
     console.log('AJAX SUCCESS'); 
    }, 
    complete : function(data, textStatus, jqXHR){ 
     console.log('AJAX COMPLETE'); 
    }, 
    error: function(xhr, desc, err) { 
     console.log(xhr); 
     console.log("Details: " + desc + "\nError:" + err); 
    } 
}); 
}) 

gendocx.php:

<?php 

require_once 'PHPWord.php'; 

$PHPWord = new PHPWord(); 

$section = $PHPWord->createSection(); 

// Create a new PHPWord Object 
$PHPWord = new PHPWord(); 

// Every element you want to append to the word document is placed in a section. So you need a section: 
$section = $PHPWord->createSection(); 

// After creating a section, you can append elements: 
$section->addText('Hello world!'); 

// You can directly style your text by giving the addText function an array: 
$section->addText('Hello world! I am formatted.', array('name'=>'Tahoma', 'size'=>16, 'bold'=>true)); 

// If you often need the same style again you can create a user defined style to the word document 
// and give the addText function the name of the style: 
$PHPWord->addFontStyle('myOwnStyle', array('name'=>'Verdana', 'size'=>14, 'color'=>'1B2232')); 
$section->addText('Hello world! I am formatted by a user defined style', 'myOwnStyle'); 


// You can also putthe appended element to local object an call functions like this: 
$myTextElement = $section->addText('Hello me!'); 

// At least write the document to webspace: 
$objWriter = PHPWord_IOFactory::createWriter($PHPWord, 'Word2007'); 

$objWriter->save('helloWorld.docx'); 


?> 

ответ

0

Это то, что я использую для PHP Excel, пардон о фрагментации, но это от большого файла сервис:

$this->generateXls(); 
$this->writeToVariable(); 
if ($response instanceof Response) { 
    $this->setHeaders($response->getHeaders()); 
} 
$response->setContent($this->getXlsContent()); 

Здесь содержимое файла сохраняется в переменной вместо файла:

protected function writeToVariable() 
{ 
    ob_start(); 
    $this->getWriter()->save('php://output'); 
    $xlsContent = ob_get_clean(); 
    $this->setXlsContent($xlsContent); 
} 

И просто установить заголовки перед возвращением вашего ответа

protected function setHeaders(Headers $headers) 
{ 
    $headers->addHeaderLine('Content-Type', $this->getFileMimeType()); 
    $headers->addHeaderLine('Content-Disposition', "attachment; filename=\"{$this->getFullFileName()}\""); 
    $headers->addHeaderLine('Accept-Ranges', 'bytes'); 
    $headers->addHeaderLine('Content-Length', strlen($this->getXlsContent())); 
} 

Это делается в ZF2 так заголовки вводит, чтобы объект ответа, но в вашем случае просто добавить их к тому, что формирует свой выход.

О, кстати, тип пантомимы для первенствует выглядит следующим образом:

$this->setFileMimeType('application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); 

Так что попробуйте найти один для мс формат слова вы хотите вывести, что в этом формате.

Для упрощенного не-OO Approch:

$writer = \PHPExcel_IOFactory::createWriter($this->getWorkbook(), $type); 
//<---GENERATE YOUR DOCUMENT HERE 
ob_start(); 
$writer->save('php://output'); 
$document = ob_get_clean(); 
//<---SET OUTPUT HEADERS LIKE FOR ANY OTHER FILE TYPE HERE 
echo $document; 
die; 
+0

спасибо за быстрый ответ. Я новичок в этом, поэтому я не знаю, с чего начать или решить его, как вы. – moody

+0

Привет, ваша цель - сохранить документ в поток вывода php вместо файла, а затем захватить этот поток в переменную. Я обновил ответ с помощью упрощенной версии – Auris