2017-01-13 8 views
0

Мне нужно экспортировать HTML-представление в PDF. У меня уже есть мой взгляд, и я хочу создать еще одну ссылку для создания PDF-версии из этого представления. Я пытаюсь использовать http.get, чтобы загрузить файл HTML, но он не работает. Вот код:SailsJs - Экспорт html в PDF

var http = require('http'); 
var fs = require('fs'); 
var file = fs.createWriteStream("files/" + filename); 

var fullUrl = req.protocol + '://' + req.get('host') + 'PATH/TO/MY/VIEW?id=' + id; 

var request = http.get(fullUrl, function(response){ 
    response.pipe(file);  
}); 

Письменное файл просто выводит:

Found. Redirecting to /<default_pattern> 
+0

Ваша область видимости кажется неудобной, почему ваш 'req.get' вне обратного вызова? где определяется 'filename'? –

+0

@ Daniel_L Этот код уже включен в функцию обратного вызова. Я не включил, потому что часть, которая дает мне проблемы, является выставленной. 'Req' - это только объект запроса, полученный в функции контроллера парусов. 'filename' - это просто строка для имени созданного файла. –

+0

Пожалуйста, попробуйте распечатать 'fullUrl', а затем посетить его через браузер/curl. Возвращает ли он код состояния 2xx с ожидаемым содержимым файла? 'curl --head '. Возвращает ли он 301/302? – Sangharsh

ответ

1

Вместо загрузки вы можете использовать HTML в PDF Converter, как wkhtmltopdf. Преобразование представления в формате PDF просто как:

res.render('ticket/pdf', { 
    'title': 'Ticket #1', 
}, function(err, html) { 
    if (err) { 
     return res.negotiate(err); 
    } 
    res.setHeader('Content-disposition', 'attachment; filename=myFile.pdf'; 
    return require('wkhtmltopdf')(html).pipe(res); 
}); 

Преобразователь должен быть установлен на вашей системе, обратитесь к http://wkhtmltopdf.org/

Если загрузить вид до сих пор нравится, сделайте следующее:

wkhtmltopdf('http://google.com/', { pageSize: 'letter' }) 
    .pipe(fs.createWriteStream('out.pdf')); 
+0

Приятно, я попробую этот подход –