Передайте файл pdf клиенту из php, используя puppeteer (Node.js) - PullRequest
0 голосов
/ 10 января 2019

Я бы хотел скачать pdf, нажав кнопку на веб-странице, используя php и node.js

Для тестирования я получил pdf, как и должен, и все в порядке, позвонив напрямую на сервер узла.

но используя PHP в качестве посредника, PDF не работает Как это исправить, чтобы я мог изменить имя файла в PHP и отправить его в угловое приложение

Другое дело, что если я открываю PDF из программного обеспечения Adobe, оно работает, но в браузере Chrome я получаю, что файл поврежден

это поток:

угловой : $window.location.assign("server-pdf.php);

php: отправка HTML-строки на сервер узла и получение pdf-файла в ответ на передачу его клиенту

 $ch = curl_init();
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
         curl_setopt($ch, CURLOPT_HTTPHEADER, array(
                            'Content-Type: text/html',
                           )
                    );
                    curl_setopt($ch,CURLOPT_POST, count($parameters));
                    curl_setopt($ch,CURLOPT_POSTFIELDS, 
        http_build_query($parameters));

    curl_setopt($ch, CURLOPT_TIMEOUT, 50);
    curl_setopt($ch, CURLOPT_URL, $url);

    $res = curl_exec($ch);
    $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    $headers = curl_getinfo($ch); 
    header('Content-Type: application/pdf');
    header('Content-Disposition: attachment; filename="file.pdf"');
    echo $res;

код узла.js - кукловод

    let browser, buffer
    try {
        browser = await puppeteer.launch({
            args: ['--no-sandbox', '--disable-setuid-sandbox'],
        })
        const page = await browser.newPage()
        await page.setContent(html, { waitUntil: 'networkidle2' })
        buffer = await page.pdf({format: 'A4'})
    } finally {
        try {
            browser.close()
        } catch (err) {
            this.logger.error('puppeteer browser was not closed', err)
        }
    }   
    return buffer
}

затем с помощью коа я возвращаю тело

ctx.response.set('Content-Type', 'application/pdf')
ctx.body = buffer

Я отправляю pdf строку, если я печатаю результат в php, это выглядит так:

%PDF-1.4
%��
1 0 obj
<</Creator (Chromium)
/Producer (Skia/PDF m72)
/CreationDate (D:20190110075210+00'00')
/ModDate (D:20190110075210+00'00')>>
endobj
3 0 obj
<</Type /XObject
/Subtype /Image
/Width 150
/Height 100
/ColorSpace /DeviceRGB
/BitsPerComponent 8
/Filter /DCTDecode
/ColorTransform 0
/Length 3081>> stream
JFIF``;CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), quality = 65C
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...