2012-09-13 5 views
14

PhantomJS를 사용하여 html 페이지를 pdf로 렌더링하려고합니다. 디스크에 파일을 쓰지 않으려 고합니다. 메모리에 html이 있고 메모리에 pdf가 필요합니다.PhantomJS : 파이프 입력

Pooria Azimi의 우수 답변을 this question에 사용하여 명명 된 파이프에서 pdf를 가져올 수 있습니다. 다른 끝에서 같은 것을 시도 할 때 (입력 파일을 명명 된 파이프로 바꾸기), 나는 빈 pdf로 끝난다. 그런 다음 다른 터미널에

mkfifo in_pipe.html out_pipe.pdf 
./phantomjs rasterize.js in_pipe.html out_pipe.pdf 

:

이 내가 (간체) 지금하고있는 무슨이다

echo '<center>hey!</center>' > in_pipe.html 
cat out_pipe.pdf > out.pdf 

파일 out.pdf이 생성되지만 비어 있습니다. 내가 놓친 게 있니?

답변

30

PhantomJS에서 직접 찾고있는 것을 매우 간단하게 문서화 할 수 있습니다.

var page = require('webpage').create(), 
    fs = require('fs'); 

page.viewportSize = { width: 600, height: 600 }; 
page.paperSize = { format: 'Letter', orientation: 'portrait', margin: '1cm' }; 

page.content = fs.read('/dev/stdin'); 

window.setTimeout(function() { 
    page.render('/dev/stdout', { format: 'pdf' }); 
    phantom.exit(); 
}, 1); 

HTML은 표준 입력에서 온다 (당신이 등로드를 필요로 이미지를있는 경우 제한 시간을 늘릴 필요가 있음), PDF 바이너리는 표준 출력을 간다. 이 실제로 이미 시도 뭔가

echo "<b>test</b>" | phantomjs makepdf.js > test.pdf && open test.pdf

+0

, 그것이 작동하지 않는 것을 발견 : 당신은 그것을 좋아 테스트 할 수 있습니다. 그러나 최신 버전을 다운로드 한 후에 실제로 작동합니다. 감사! – mads

+0

setTimeout을 사용하는 대신 "load"이벤트를 사용하는 것이 더 좋지 않습니까? 그런 식으로 모든 것이로드되었음을 알 수 있습니다. – oligofren

관련 문제