๋ฌธ์
html2canvas๋ IE11์์ SVG๋ฅผ ์บก์ฒํ ์ ์์ต๋๋ค.
์ฌํ ๋จ๊ณ
jsFiddle์ ์ฐธ์กฐํ์ญ์์ค: https://jsfiddle.net/coolbean/ekshfuLz/17/
var Promise = require('es6-promise').Promise;
import html2canvas from "html2canvas";
html2canvas(SVGsource).then(function(canvas) {
document.body.appendChild(canvas);
});
Chrome์์ ์์์ ์๋ํ์ ๋ html2canvas๋ "1" ์ด๋ฏธ์ง ๋ก๋๋ฅผ ์๋ฃํ์ต๋๋ค.
๊ทธ๋ฌ๋ IE11์ "0" ์ด๋ฏธ์ง ๋ก๋๋ฅผ ์๋ฃํฉ๋๋ค.
๊ฒฐ๊ณผ์ ์ผ๋ก ์์ฑ๋ ์บ๋ฒ์ค๋ ๋น์ด ์์ต๋๋ค.
์ค๋ฅ ๋ก๊ทธ๊ฐ ์์ผ๋ฉฐ,
๋ฐ๋ผ์ ์ด ๋ฌธ์ ๋ SVG ํ๊ทธ์ ํธํ๋์ง ์๋ ๊ตฌ๋ฌธ์ผ๋ก ์ธํด ๋ฐ์ํ ์ ์๋ค๊ณ ๊ฐ์ ํฉ๋๋ค.
์
๋ฐ์ดํธ
๋ฒ์ ์ [email protected] ์์ ํ๋ ค๊ณ ํฉ๋๋ค.
// import the following 2
<script src="https://cdnjs.cloudflare.com/ajax/libs/html2canvas/0.5.0-beta4/html2canvas.js"
type="text/javascript"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/html2canvas/0.5.0-beta4/html2canvas.svg.js"
type="text/javascript"></script>
์ง๋ฌธ
๋ฒ์ "1.0.0-alpha.10"์๋ "html2canvas.svg.js"๊ฐ ์์ ์ ์์ต๋๊น?
@Paul-Kijtapart ์๋
ํ์ธ์ ์ ๋ ๊ฐ์ ๋ฌธ์ ๋ฅผ ๊ฒช๊ณ ์๋๋ฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์
จ๋์?
ํ์ฌ ๋ด ํ๋ก์ ํธ๋ ์ธํฐ๋ท ์ต์คํ๋ก๋ฌ, ์ฃ์ง, ํฌ๋กฌ, ์คํ๋ผ์์๋ง ์๋ํฉ๋๋ค. ๋ด HTML2PDF๊ฐ firefox์์ ์๋ํ์ง ์๊ธฐ ๋๋ฌธ์ SVG๋ฅผ ์ง์ํ๋ [email protected] ์ ์ฐพ๊ณ ์์ต๋๋ค.
ํ์ฌ v1.0.0-alpha.11(์ต์ ๋ฒ์ )์ ์ฌ์ฉํ๋ค๋ฉด pdf ํ์ผ์ SVG๊ฐ ํ์๋์ง ์์ต๋๋ค.
0.5.0-beta4๋ฅผ ์ฌ์ฉํ๋ค๋ฉด Firefox๋ ๋จ์ผ ํ์ผ์ ํ์ํ์ง ์์ต๋๋ค. ๊ทธ๋ค์ ์ฝ๋๋ฅผ ์ดํด๋ณด๋ ์ดํดํ๊ธฐ๊ฐ ๋๋ฌด ์ด๋ ต์ต๋๋ค.
์๋ ํ์ธ์ @GoodJeans ์ ๋๋ค .
์ง์
"๊ท๋ชจ" ๊ธฐ๋ฅ์ด ์๊ธฐ ๋๋ฌธ์ "0.5.0-beta4" ๋ฒ์ ์ ์ฌ์ฉํ์ง ์๊ฒ ๋์์ต๋๋ค.
์๋
์ต๊ทผ์ ๋ฒ์ ์ "v1.0.0-alpha.11"๋ก ์
๋ฐ์ดํธํ๋๋ฐ ๋ณ๊ฒฝ ๋ก๊ทธ์ ๋ฐ๋ฅด๋ฉด IE11 ๊ตฌ์ฑ์์ ์ฐพ์ ์ ์์ ์ค๋ฅ๋ฅผ ์์ ํด์ผ ํฉ๋๋ค.
๊ทธ๋ฌ๋ ์ด ์ต์ ๋ฒ์ "v1.0.0-alpha.11"์ ์ฌ์ฉํ๋๋ผ๋ html2canvas๋ IE11์์ ๋๋ถ๋ถ์ SVG ๊ตฌ์ฑ ์์๋ฅผ ์บก์ฒํ์ง ์์ต๋๋ค.
๋ฌธ์ ํด๊ฒฐ
html2canvas์์ ์ ๊ณตํ๋ ๋ก๊ทธ์ ๋ฐ๋ฅด๋ฉด ์ด๊ฒ์ ์๋ง๋ alpha.10๊ณผ ๋์ผํ ๋ฌธ์ ์ผ ๊ฒ์
๋๋ค.
ํฌ๋กฌ:
1468ms html2canvas: Finished parsing node tree
1487ms html2canvas: Finished loading 3 images (3)ย [img, img, img]
1489ms html2canvas: Starting renderer
IE11 ์ฌ์ฉ
2137ms html2canvas: Starting node parsing
2451ms html2canvas: Finished parsing node tree
2455ms html2canvas: Finished loading 0 images
2455ms html2canvas: Starting renderer
์์ ๋ก๊ทธ์์ Chrome๊ณผ ๋ฌ๋ฆฌ IE11์ SVG DOM์์ 3๊ฐ์ ์ด๋ฏธ์ง๋ฅผ ์บก์ฒํ์ง ๋ชปํฉ๋๋ค.
@Paul-Kijtapart ์๊ฒ ์ต๋๋ค. ์ ๊ฐ ์ฌ์ฉํ๊ณ ์๋ ์ํ ๋ฒ์ ์ ์ํ๊น๊ฒ๋ Internet Explorer์์ SVG๋ฅผ ์ง์ํ์ง ์์ต๋๋ค. ๋ค์ ๋ฆด๋ฆฌ์ค๋ฅผ ๊ธฐ๋ค๋ ค์ผ ํ ๊ฒ ๊ฐ์ต๋๋ค.
์ค์ ๋ก html2canvas์ ํจ๊ป eKoopmans/html2pdf๋ฅผ ์ฌ์ฉํ๊ณ ์์ต๋๋ค.
๊ทธ๊ฒ์ ์ฌ์ ํ โโie 11์์ ์๋ํ์ง ์์ต๋๋ค. ์๋๋ ๋ด๊ฐ ์ฌ์ฉํ๋ ์ฝ๋์ ๋๋ค.
๋ฐ์ดํฐ = document.getElementById('contentToConvert');
html2canvas(๋ฐ์ดํฐ, {
onrendered: ํจ์(์บ๋ฒ์ค) {
imgWidth = 208;
ํ์ด์ง ๋์ด = 295;
let imgHeight = canvas.height * imgWidth / canvas.width;
let heightLeft = imgHeight;
const contentDataURL = canvas.toDataURL('์ด๋ฏธ์ง/png')
let pdf = new jspdf('p', 'mm', 'a4'); // PDF์ A4 ํฌ๊ธฐ ํ์ด์ง
์์น = 0์ผ๋ก ๋์ญ์์ค.
pdf.addImage(contentDataURL, 'PNG', 0, ์์น, imgWidth, imgHeight)
pdf.save("testf .pdf'); // ์์ฑ๋ PDF
}
});
์ ๋ ๊ฐ์ ๋ฌธ์ ๊ฐ ์๋๋ฐ IE 11์์ ์๋ํ์ง ์์ต๋๋ค. ์ ๊ฐ ํ๋ ค๊ณ ํ๋ ๊ฒ์ ์ผ๋ถ ํ์ด์ฐจํธ ๊ทธ๋ํ(svg)๊ฐ ์๋ ๋ณด๊ณ ์ ํ์ด์ง์ฉ PDF ํ์ผ์ ์์ฑํ๋ ๊ฒ์ ๋๋ค. html2canvas์ jspdf๋ฅผ ์ฌ์ฉํ๊ณ ์์ต๋๋ค. ๋๋ ๋ฒ์ ์์ ์ ํ ํ ๋ [email protected]์ ์ [email protected] , ๊ทธ๊ฒ์ highchart ๊ทธ๋ํ๋ฅผ ํ์ ํ ์ ์์ง๋ง, ๋ ์ด์์ ๋ฑ์ ๋ค๋ฅธ ๋ฌธ์ ๊ฐ์๋ค. [email protected] ์ ์ฌ์ฉํ๋ฉด ์บ๋ฒ์ค๋ฅผ ์์ฑํ ๋ ๋ชจ๋ ํ์ด์ฐจํธ ๊ทธ๋ํ๊ฐ ๋น์ด ์๊ฒ ๋ฉ๋๋ค.
์ด ์์ ์ฌํญ์ด ํฌํจ๋ ์ ๋ฆด๋ฆฌ์ค๋ฅผ ๊ธฐ๋ํ๊ณ ์์ต๋๋ค.
์ด๊ฒ์ ์ฌ์ ํ โโ1.0.0-rc.1์ ๋ฌธ์ ์ ๋๋ค. IE11์ ํ์ด์ฐจํธ(svg ์บ๋ฒ์ค)๋ฅผ ๋ณผ ์ ์์ง๋ง Chrome ๋ฐ Firefox๋ ๋ณผ ์ ์์ต๋๋ค.
์ฌ์ ํ 1.0.0-rc.3์ ๋ฌธ์ ์ธ ๊ฒ ๊ฐ์ต๋๋ค.
์ด ๋ฌธ์ ์ ๋ํ ์
๋ฐ์ดํธ๊ฐ ์์ต๋๊น?
๋ํ ๋ฌด์ง์ํ ๊ทธ๋ํ ๋ฐ์ดํฐ๊ฐ ๋ํ๋ฉ๋๋ค.
1.0.0-rc.5๋ฅผ ์ฌ์ฉํ๋๋ก ์
๋ฐ์ดํธํ์ต๋๋ค. ๊ทธ๋ฌ๋ ์ฌ์ ํ ์๋ํ์ง ์์ต๋๋ค.
Bill Gates ์จ๋ ์ฆ์ IE์ ์ง์ ์ข
๋ฃ๋ฅผ ์๋ฆฌ์๊ฒ ์ต๋๊น? ๊ทธ๋ผ ํฌ๊ธฐํ ์๋....
์์์ด ์๋์? ๋ด ํ๋ก์ ํธ์์ ๋ง์ง๋ง์ผ๋ก ํ์ํ ๊ฒ์ IE11์ ์ข์ pdf์ ๋๋ค.
์ฌ์ ํ svg๋ก IE11์์ ์๋ํ์ง ์์ต๋๋ค. ์๋ฌด๋ ํด๊ฒฐ ๋ฐฉ๋ฒ์ด ์์ต๋๊น?
@kuldip27792
๋จผ์ canvg ๋ฅผ ์ฌ์ฉํ ๋ค์ html2canvas๋ฅผ ์ฌ์ฉํ์ญ์์ค.
๋ด ํ์์ด ๋์์ ์ ์ํฉ๋๋ค. PDF๊ฐ ์ค์๊ฐ์ผ๋ก ์์ฑํด์ผ ํ๋ ํ์ ํญ๋ชฉ์ด ์๋ ๊ฒฝ์ฐ ์ต์ ์ผ๋ก ๋ณผ ์ ์์ต๋๋ค.
1๋จ๊ณ. google-chrome ์ค์น
2๋จ๊ณ. google-chrome ๋ช
๋ น ํ๋กฌํํธ๋ฅผ ์ฌ์ฉํ์ฌ ๋ ๋๋ง๋ html์ png/pdf๋ก ์บก์ฒ
์
ํฌ๋กฌ --headless --print-to-pdf="d:\{{๊ฒฝ๋ก ๋ฐ ํ์ผ ์ด๋ฆ}}.pdf" https://google.com
์ด ๊ฒฝ์ฐ ์์ฑ๋ PDF๋ ์ฌ์ฉ ์ค์ธ ๋ธ๋ผ์ฐ์ ์ ๊ด๊ณ์์ด ๋์ผํ ์คํ์ผ์ด ๋ฉ๋๋ค.
๊น๋ค๋กญ์ง๋ง ๋๋ฅผ ์ํด ์ผํ์ญ์์ค.
@fiftyk ๋๋
@martinknc ์ ์์ ๊ฐ์ฌํ์ง๋ง ๋ด ํ๋ก์ ํธ์์ ์ค์๊ฐ์ด ํ์ํฉ๋๋ค.
@kuldip27792 ์ฐ๋ฆฌ๋ IE11์ ์คํฌ๋ฆฐ์ท์ผ๋ก ํธ์ถํ๋ ๋ฒํผ์ผ๋ก ์ ๊ฑฐ๋ ํ์ด์ง๋ก ์์ํ์ต๋๋ค. ์ข์ง๋ ์์ง๋ง ์ฐ๋ฆฌ ๊ณ ๊ฐ์๊ฒ๋ ์ถฉ๋ถํฉ๋๋ค.
@fiftyk ๊ทํ์ ์๋ฃจ์ ์ ์๋ํ์ง๋ง ํ๋ฅญํ๊ฒ ์๋ํ์ต๋๋ค. ๊ทธ๋์ ๋ด๊ฐํ๊ณ ์๋ ์ผ์ ๋ชจ๋ svg ์์๋ฅผ ์์งํ๊ณ ์์ฒด ์์น ๊ฐ์ ์ฌ์ฉํ์ฌ html2canvas์์ ๋ง๋ ์บ๋ฒ์ค์ ๋ ๋๋งํ๋ ๊ฒ์ ๋๋ค. ๊ณ ๋ง์์ ํ.
๋ค, ahmeturun์ฒ๋ผ, ์ด๊ฒ์ ์ ๋ ํ๋ ์ผ์
๋๋ค. ์ฒจ๋ถ๋ ๊ฒ์ svgs๊ฐ ์คํฌ๋ฆฐ์ท์ ๋ ๋๋ง๋๋๋ก ํ๋ TypeScript ๊ธฐ๋ฅ์
๋๋ค.
`
'canvg'์์ { Canvg } ๊ฐ์ ธ์ค๊ธฐ;
...
๊ฐ์ธ convertSvgD3ChartsToPngs(): HTMLImageElement[] {
const pngD3Charts: HTMLImageElement[] = [];
Array.from(document.getElementsByTagName('svg')).map(svg => {
ํ์ svgD3ChartCanvas = document.createElement('์บ๋ฒ์ค');
// Increase the Pixel Density for the Screenshot
svgD3ChartCanvas.width = parseInt(svg.getAttribute('width')) * 4;
svgD3ChartCanvas.height = parseInt(svg.getAttribute('height')) * 4;
let canvasContext = svgD3ChartCanvas.getContext('2d');
// Use Canvg to convert the svg into a png
let convertedSvgToPng = Canvg.fromString(
canvasContext,
(svg.parentNode as HTMLElement).innerHTML,
{
ignoreDimensions: true,
scaleWidth: svgD3ChartCanvas.width,
scaleHeight: svgD3ChartCanvas.height
}
);
convertedSvgToPng.start();
// Attach new png
let pngD3Chart = new Image();
pngD3Chart.src = svgD3ChartCanvas.toDataURL('image/png');
pngD3Chart.style.width = '100%';
pngD3Charts.push(pngD3Chart);
// Remove HTML Attribute and use CSS
(pngD3Chart as any).width = '';
svg.parentNode.parentNode.appendChild(pngD3Chart);
(svg.parentNode as HTMLElement).style.visibility = 'hidden';
(svg.parentNode as HTMLElement).style.height = '0';
(svg.parentNode as HTMLElement).style.minHeight = '0';
});
return pngD3Charts;
}`
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
์ด๊ฒ์ ์ฌ์ ํ โโ1.0.0-rc.1์ ๋ฌธ์ ์ ๋๋ค. IE11์ ํ์ด์ฐจํธ(svg ์บ๋ฒ์ค)๋ฅผ ๋ณผ ์ ์์ง๋ง Chrome ๋ฐ Firefox๋ ๋ณผ ์ ์์ต๋๋ค.