2013-04-23 5 views
1

Я использую PDFKit и socket.io в проекте node.js для создания pdf-файла, когда пользователь нажимает кнопку на передней панели. Как я могу передать или иным образом отправить полученный pdf-файл конечным пользователям? Я бы предпочел не сохранять файл в файловой системе, а затем удалить его позже, если я смогу ... надеясь каким-то образом передать его.Отправить файл в браузер из строки с помощью socket.io

socket.on('customerRequestPDF', function(){    
    doc = new PDFDocument;   

    doc.text('Some text goes here', 100, 100); 

    //I could do this but would rather avoid it 
    doc.write('output.pdf'); 

    doc.output(function(string) { 
     //ok I have the string.. now what? 

    }); 

}); 

ответ

1

Веб-сайт на самом деле не является подходящим механизмом для доставки PDF-файла. Просто используйте обычный HTTP-запрос.

// assuming Express, but works similarly with the vanilla HTTP server 
app.get('/pdf/:token/filename.pdf', function(req, res) { 
    var doc = new PDFDocument(); 
    // ... 

    doc.output(function(buf) { // as of PDFKit v0.2.1 -- see edit history for older versions 
     res.writeHead(200, { 
      'Content-Type': 'application/pdf', 
      'Cache-Control': 'private', 
      'Content-Length': buf.length 
     }); 
     res.end(buf); 
    }); 
}); 

Теперь слово предупреждения: эта библиотека PDF нарушена. Начиная с версии 0.2.1, результат является правильным Buffer, но он использует устаревшую строчную кодировку binary, а не Buffer s. (Предыдущие версии дали вам строку двоичного кода.) Из docs:

'binary' - способ кодирования необработанных двоичных данных в строки, используя только первые 8 бит каждого символа. Этот метод кодирования устарел и его следует избегать, если это возможно, в пользу Buffer объектов. Эта кодировка будет удалена в будущих версиях узла.

Это означает, что, когда узел удаляет двоичную строчную кодировку, библиотека перестает работать.

+0

Начиная с [this] (https://github.com/devongovett/pdfkit/pull/166) pull request, 'doc.output' теперь возвращает буфер вместо двоичной строки. – devongovett

+0

@devongovett, спасибо за обновление. Однако я заметил, что двоичная строковая кодировка по-прежнему используется внутри. Это означает, что библиотека сломается, когда узел в конечном итоге удалит поддержку кодировки. – josh3736

 Смежные вопросы

  • Нет связанных вопросов^_^