2016-09-04 2 views
0

페이지에서 섹션의 PDF 내보내기를 생성해야하는 Meteor 프로젝트를 진행 중입니다. 나는 webshot을 사용하여 내보내기를 생성합니다. 최근 요구 사항은 공개 정적 자산 (로고 이미지)을 내보내기에 사용하는 것입니다. 나는 모든 CSS 파일을 읽고 HTML 문서의 스타일 태그에 내용을 복사하여 phantomjs에서 CSS 자산을 사용할 수있게 만들었습니다. 그건 잘 작동합니다. 이미지에 대한 , 나는 서버에서 실행Meteor - 공공 자산의 유령 렌더링

const buildPath = path.resolve('.').split(path.sep + 'server')[0]; 
const imagePath = buildPath + '/web.browser/app/images/'; 

를 사용하여 서버에있는 이미지 폴더의 전체 경로와 HTML에서 "./images/"패턴을 교체합니다. 이미지가 표시되지 않습니다. 생성 된 HTML (디버깅을 위해 저장)을 내 dev 컴퓨터의 어느 위치에서 열면 이미지 경로가 제대로 처리되고 이미지가 나타납니다.

팬텀의 정적 자산에 액세스하는 올바른 방법은 무엇입니까?

+0

스택 오버플로에 오신 것을 환영합니다! PhantomJS는 모든 브라우저에서 작동하지만 버그가 있습니다. 어떤 PhantomJS 버전을 사용합니까? 은'onConsoleMessage','onError','onResourceError','onResourceTimeout' 이벤트에 등록하십시오 ([예] (https://gist.github.com/artjomb/4cf43d16ce50d8674fdf#file-1_phantomerrors-js)). 어쩌면 오류가있을 수 있습니다. –

+0

이미지를로드하는 데 충분한 시간을 보냈습니까? 최소한의 코드 예제를 보여줄 수 있습니까? – Vaviloff

답변

0

나는 그것을 알아 냈다. 나는 img 태그의 src 속성에 완전한 프로토콜이 누락되었다. Chrome은 현명하고 관대하지만 phantomj는 그렇지 않습니다. 기본적으로 이미지의 전체 경로 앞에 'file : ///'을 추가해야했습니다. 그것은 지금과 같은 :

const buildPath = path.resolve('.').split(path.sep + 'server')[0].replace(/\\/g, '/'); 
const imagePath = buildPath + '/web.browser/app/images/'; 
html = html.replace(/src="\.\/images\//g, 'src="file:///' + imagePath); 

그리고 시간에 관한 의견에 관해서는, 내가 렌더링 전체 1 초 지연을주지 않지만, 그것없이 작동하는지 확인하지 않았다.