/usr/src/app # html-pdf index.html index.pdf
events.js:291
throw er; // Unhandled 'error' event
^
Error: write EPIPE
at afterWriteDispatched (internal/stream_base_commons.js:156:25)
at writeGeneric (internal/stream_base_commons.js:147:3)
at Socket._writeGeneric (net.js:787:11)
at Socket._write (net.js:799:8)
at doWrite (_stream_writable.js:403:12)
at writeOrBuffer (_stream_writable.js:387:5)
at Socket.Writable.write (_stream_writable.js:318:11)
at PDF.PdfExec [as exec] (/usr/local/lib/node_modules/html-pdf/lib/pdf.js:136:22)
at PDF.PdfToFile [as toFile] (/usr/local/lib/node_modules/html-pdf/lib/pdf.js:83:8)
at htmlpdf (/usr/local/lib/node_modules/html-pdf/bin/index.js:29:29)
Emitted 'error' event on Socket instance at:
at errorOrDestroy (internal/streams/destroy.js:108:12)
at onwriteError (_stream_writable.js:418:5)
at onwrite (_stream_writable.js:445:5)
at internal/streams/destroy.js:50:7
at Socket._destroy (net.js:680:5)
at Socket.destroy (internal/streams/destroy.js:38:8)
at afterWriteDispatched (internal/stream_base_commons.js:156:17)
at writeGeneric (internal/stream_base_commons.js:147:3)
at Socket._writeGeneric (net.js:787:11)
at Socket._write (net.js:799:8) {
errno: 'EPIPE',
code: 'EPIPE',
syscall: 'write'
}
write EPIPE
write EPIPE
Please add the scripts to the Dockerfile:
RUN apk add fontconfig ttf-dejavu
RUN apk add --no-cache curl && \
cd /tmp && curl -Ls https://github.com/dustinblackman/phantomized/releases/download/2.1.1/dockerized-phantomjs.tar.gz | tar xz && \
cp -R lib lib64 / && \
cp -R usr/lib/x86_64-linux-gnu /usr/lib && \
cp -R usr/share /usr/share && \
cp -R etc/fonts /etc && \
curl -k -Ls https://bitbucket.org/ariya/phantomjs/downloads/phantomjs-2.1.1-linux-x86_64.tar.bz2 | tar -jxf - &&\
cp phantomjs-2.1.1-linux-x86_64/bin/phantomjs /usr/local/bin/phantomjs && \
rm -fR phantomjs-2.1.1-linux-x86_64 && \
apk del curl
I did it and it works well. (node:12.20-alpine3.12)
Yes, looks like the bundled phantomjs doesn't work on newer linux versions anymore.
A manual install is necessary.
Worked for me with node:14-alpine
Thanks!
Can confirm @phuoc-le solution worked for me with node:12-alpine
Thanks :love_you_gesture:
FWIW - I didn't need these commands:
curl -k -Ls https://bitbucket.org/ariya/phantomjs/downloads/phantomjs-2.1.1-linux-x86_64.tar.bz2 | tar -jxf - &&
cp phantomjs-2.1.1-linux-x86_64/bin/phantomjs /usr/local/bin/phantomjs &&
rm -fR phantomjs-2.1.1-linux-x86_64 &&
Once the container got the dependencies from dockerized-phantomjs, it all worked as expected.
Example using node:14-alpine
FROM node:14-alpine
WORKDIR /app
COPY package.json ./
RUN npm install
COPY . .
ENV PHANTOMJS_VERSION=2.1.1
ENV PHANTOMJS_PATH=/usr/local/bin/phantomjs
RUN apk update && apk add --no-cache fontconfig curl curl-dev && \
cd /tmp && curl -Ls https://github.com/dustinblackman/phantomized/releases/download/${PHANTOMJS_VERSION}/dockerized-phantomjs.tar.gz | tar xz && \
cp -R lib lib64 / && \
cp -R usr/lib/x86_64-linux-gnu /usr/lib && \
cp -R usr/share /usr/share && \
cp -R etc/fonts /etc && \
curl -k -Ls https://bitbucket.org/ariya/phantomjs/downloads/phantomjs-${PHANTOMJS_VERSION}-linux-x86_64.tar.bz2 | tar -jxf - && \
cp phantomjs-2.1.1-linux-x86_64/bin/phantomjs /usr/local/bin/phantomjs
CMD ["npm", "start"]
Code
const pdf = require('html-pdf');
const fs = require('fs');
const html = fs.readFileSync('./businesscard.html', 'utf8');
const options = {
format: 'Letter',
};
const createOptions = process.env.PHANTOMJS_PATH ?
{...options, phantomPath: process.env.PHANTOMJS_PATH}
: options;
pdf.create(html, createOptions).toFile('./businesscard.pdf', function(err, res) {
if (err) return console.log(err);
console.log(res); // { filename: '/app/businesscard.pdf' }
});
Most helpful comment
Please add the scripts to the Dockerfile:
RUN apk add fontconfig ttf-dejavu
RUN apk add --no-cache curl && \
cd /tmp && curl -Ls https://github.com/dustinblackman/phantomized/releases/download/2.1.1/dockerized-phantomjs.tar.gz | tar xz && \
cp -R lib lib64 / && \
cp -R usr/lib/x86_64-linux-gnu /usr/lib && \
cp -R usr/share /usr/share && \
cp -R etc/fonts /etc && \
curl -k -Ls https://bitbucket.org/ariya/phantomjs/downloads/phantomjs-2.1.1-linux-x86_64.tar.bz2 | tar -jxf - &&\
cp phantomjs-2.1.1-linux-x86_64/bin/phantomjs /usr/local/bin/phantomjs && \
rm -fR phantomjs-2.1.1-linux-x86_64 && \
apk del curl
I did it and it works well. (node:12.20-alpine3.12)