2016-07-25 2 views
3

PhantomJS를 사용하여 D3 차트가있는 html 웹 페이지를 PDF 보고서로 렌더링합니다. rasterize.js를 약간 변경 한 후에 보고서가 완벽하게 보입니다. 그러나 내가 무엇을 바꿔도 왼쪽 및 오른쪽 여백을 완전히 없앨 수는 없었습니다. 누군가이 여백을 모두 없애기 위해 어떤 변경을 제안 할 수 있습니까? 파일의 변경 사항은 다음과 같습니다. -phantomJS를 사용하여 pdf를 렌더링하는 동안 여백을 제거합니다.

page.viewportSize = { width: 595, height: 842 }; //**A4** 
    if (system.args.length > 3 && system.args[2].substr(-4) === ".pdf") { 
    size = system.args[3].split('*'); 
    page.paperSize = size.length === 2 ? { width: size[0], height: size[1], margin: '-150px' } 
             : { format: system.args[3], orientation: 'portrait', margin: '-4cm' }; //**Swapnil:- added a negative margin to utilize the entire width of the canvas. (Reduces the margins but does not eliminate them completely)** 
} else if (system.args.length > 3 && system.args[3].substr(-2) === "px") { 
    size = system.args[3].split('*'); 
    if (size.length === 2) { 
     pageWidth = parseInt(size[0], 10); 
     pageHeight = parseInt(size[1], 10); 
     page.viewportSize = { width: pageWidth, height: pageHeight }; 
     page.clipRect = { top: 0, left: 0, width: pageWidth, height: pageHeight }; 
    } else { 
     console.log("size:", system.args[3]); 
     pageWidth = parseInt(system.args[3], 10); 
     pageHeight = parseInt(pageWidth * 3/4, 10); // it's as good an assumption as any 
     console.log ("pageHeight:",pageHeight); 
     page.viewportSize = { width: pageWidth, height: pageHeight }; 
    } 
} 
if (system.args.length > 4) { 
    page.zoomFactor = system.args[4]; 
} 
page.open(address, function (status) { 
    if (status !== 'success') { 
     console.log('Unable to load the address!'); 
     phantom.exit(1); 
    } else { 
     window.setTimeout(function() { 
      page.render(output); 
      phantom.exit(); 
     }, 20000); // **Swapnil:- increased time out to ensure all the charts load perfectly** 
    } 
}); 

고마워요! 모든

답변

0

먼저 0으로 여백을 설정 :

page.paperSize = { 
    // ... 
    margin: { top: 0, right: 0, bottom: 0, left: 0 } 
}; 

다음 당신이 PDF 파일의 페이지 크기가 정확히 콘텐츠의 크기 확인해야합니다. 당신은 할 수 있습니다 중 ... 픽셀에 렌더링 된 페이지의 폭 (수동으로 사용 어떤 형식의 높이를 계산) 및 dpi의

의 전위차를 조정에 따라 폭을 설정하여

...

또는

... 페이지가 완벽하게 맞을 때까지 줌을 사용하여 재생합니다.

어느 쪽이든 중얼 거립니다. Phantomjs는 페이지를 완벽하게 렌더링 할 수 있지만 쉽지 않습니다.

관련 문제