ç»åã«å€æããå¿ èŠã®ãããã¹ãŠã®èŠçŽ ãå«ãdivããããŸãã ãããŠããã®div㯠' overflowïŒauto 'ã«èšå®ãããŸãã ãã¹ãŠã®èŠçŽ ïŒã¹ã¯ããŒã«ã«é ãããŠãããã®ãå«ãïŒãç»åã«ãšã¯ã¹ããŒãããæ¹æ³ãç¥ãããã§ãã ç§ã¯ããªãã®ã³ã¡ã³ããšçããã¹ãŠã«æè¬ããæè¿ããŸã......äºåã«æè¬ããŸã...
çŸåšãç¹å®ã®ãªãã·ã§ã³ã䜿çšããŠããŒãžãã¬ã³ããªã³ã°ãããªãã·ã§ã³ã¯ãããŸããããã®ãããããŒãžãå€æŽããŠãåžæã©ããã«è¡šç€ºããå¿ èŠããããŸãã
ã€ãŸããé«ã/å¹ ã®å¶éãåé€ããhtml2canvasãå®è¡ããŠãããé«ã/å¹ ãå ã®å€ã«æ»ããšãç®çã®çµæãåŸãããã¯ãã§ãã
ã©ããããããšãããããŸãã....ç§ã¯ããªããèšã£ãããšãè©ŠããŠã¿ãŸã...
é·ãéè©ŠããŠã¿ãŸãããâŠã§ã倧å€ã§ãâŠãã£ããã£ãéãã«ã¯ãããŸããã§ããã ã¹ã¯ããŒã«ããã£ãŠããbodyãã®å Žåã¯ããŸãããããšãããããŸãã...ã¹ã¯ããŒã«ã®ããèŠçŽ ãæã€divã§ãåãããšãéæããããšæããŸã...ãã®åé¡ã§ç§ãå©ããããšãã§ããã°ç§ã«ãšã£ãŠå€§ããªå©ãã«ãªããŸã...ç§ã¯ããªãã®ã³ã¡ã³ãã楜ãã¿ã«ããŠããŸã...
@niklasvh ãç§ã¯åãåé¡ãæ±ããŠããŸãããããŠç§ãããå¯äžã®åé¿çã¯ã html2canvas
ïŒåžžã«ãªãã·ã§ã³ã§ã¯ãªãïŒãåŒã³åºãåã«ã¿ãŒã²ããèŠçŽ ã®å¹
ãçž®å°ãããã html2canvas
ãåŒã³åºãããšã§ãåãèŠçŽ ã§2åç¶ããŠ
http://jsfiddle.net/fMeRC/1/ ïŒãã®ç¹å®ã®äŸã¯Chromeã§ã®ã¿æ©èœããŸããä»ã®ãã©ãŠã¶ãŒã§åé¡ã確èªããã«ã¯ãå¹ ããããå¿ èŠããããŸãïŒ
ããã¯åºæ¬çã«ãèŠçŽ ããŠã£ã³ããŠãŸãã¯(document.width - 8)
ãããåºãå Žåã«ã®ã¿çºçããŸããã©ã¡ããããéèŠã§çŽæ¥çãªé¢é£æ§ããããã¯ããããŸãããããã¯ãä»ã®ãã©ãŠã¶ã§å€æŽãããå¯èœæ§ããããŸãïŒã
ããããé¢é£ããŠããïŒïŒ199ãšïŒ108ã
childElementãè©Šãããããoverflow = visibleããèšå®ããŠãããoverflow = auto | hidden | inheritããèšå®ããŸãããïŒ
ã¹ã¿ã€ã«ã®ãªãchildElementããªãŒããŒãããŒã®ããdivã®ã³ã³ãã³ãã®ã¿ãåãåãïŒ
<div id="main"><!--// main div -->
<div class="mainContent"><!--// div without style (height: auto, width: auto, margin: 0, padding: 0) -->
...content...
html2canvas([$("#main div.mainContent").get(0)],...)
ææ¡ãããããšãã@ brcontainerã overflow: visible
-> html2canvas( ... )
-> overflow: [old overflow]
ã¢ãããŒããè©ŠããŸããããé衚瀺/é衚瀺/é衚瀺ã®ã³ã³ãã³ãã®ãã©ãã·ã¥ãç®ç«ã¡ãããŸããïŒããããã¿ãŒã²ããèŠçŽ ãåå ã§ãïŒæ¯èŒçè€éã§ãïŒã ç§ã¯ããã®ç¹ã§éããçãããã«æãããåé¿çã®ãããã«æé©åãããããªã¢ã³ããæãã€ããã°ããã§ããïŒ
html2canvas( targetElement, {
onpreloaded: function(){ /* set parent overflow to visible */},
onparsed: function(){ /* reset parent overflow */ },
// ... onrendered, etc.
});
ããã«ãããh2cãã¿ãŒã²ãããé©åã«è§£æããã®ã«å¿
èŠãªæçæéïŒç§ãæãã«ïŒã ããªãŒããŒãããŒãã衚瀺ãã«èšå®ããããããå°ãªããšãç§ã®å Žåã¯ããã©ãã·ã¥ãã»ãŒå®å
šã«æé€ãããŸãã ã€ãŸãããªãŒããŒãããŒããªã»ãã/åé衚瀺ã«ããåã«ããã£ã³ãã¹ã®ã¬ã³ããªã³ã°æé ãçµäºããã®ãåŸ
ã€å¿
èŠããªããªããŸããã ãã®å€æŽãããã¢ãããŒãããã¹ãŠã®äººã«åœ¹ç«ã€ãã©ããã¯ããããŸãããã html2canvas( ... )
2åç¶ããŠåŒã³åºãããDOMã«è¿œå ã®ãã®ãè¿œå ããŠã¿ãŒã²ããã³ã³ãã³ããã©ãããããããè¯ãåé¿çã ãšæããŸãã
ãããã«ãããããã¯ãŸã æ¬åœã®ãã°ã§ãããé©åã«ä¿®æ£ããŠããããããšæã£ãŠããŸãã ïŒç¹ã«ãIE9ãš10ã§ã¯ã©ã¡ãã®åé¿çãæ£ããæ©èœããªãããã«æããããããå°ãªããšãIE11ã§ã¯è©ŠããŠããŸãããïŒ
_泚ïŒåè¿°ã®åé¿çã¯ãçŸåšãã¹ã¿ãŒã«ããææ°ããŒãžã§ã³ã§ã¯æ©èœããŸããã ç§ã¯ãã¹ãããŠããŸãããã代ããã«oncloned
ãªãã·ã§ã³ã䜿çšããå¿
èŠãããããã§ãããªãŒããŒãããŒãã芪ã®ãªã»ããã¯ã .then()
ãžã®ã³ãŒã«ããã¯ã§åŒã³åºãããŸãã ïŒã¯ããŒã³ãããããã¥ã¡ã³ãå
ã§èŠªã®ãªãŒããŒãããŒãæä»çã«è¡šç€ºããããšãå¯èœã§ãããäœããªã»ããããå¿
èŠã¯ãããŸãããïŒ_
ãªããã®ããã«äœ¿çšããã®ãããããŸããã次ã®ããã«ãããšããã§ãããã
function SnapShotDOM(target,call){
var data = {};
//use jquery or getComputedStyle|style.overflow
data.overflow = /*get overflow property*/;
data.width = /*get width property*/;
data.height = /*get height property*/;
data.maxWidth = /*get maxWidth property*/;
data.maxHeight = /*get maxHeight property*/;
target.style.overflow="visible !important";
target.style.height="auto !important";
target.style.maxHeight="auto !important";
html2canvas(target, {
"onrendered": function(canvas) {
target.style.overflow = data.overflow;
target.style.width = data.width;
target.style.height = data.height;
target.style.maxWidth = data.maxWidth;
target.style.maxHeight = data.maxHeight;
call(canvas);
}
});
}
SnapShotDOM(document.body,function(canvas){
console.log(canvas);
});
ãŸãã¯ã¯ã©ã¹ã䜿çšããŸãã
<style>
*.html2canvasreset{
overflow: visible !important;
width: auto !important;
height: auto !important;
max-height: auto !important;
}
</style>
<script>
function SnapShotDOM(target,call){
var data = target.className;
target.className += " html2canvasreset";//set className - Jquery: $(target).addClass("html2canvasreset");
html2canvas(target, {
"onrendered": function(canvas) {
target.className = data;//old className - Jquery: $(target).removeClass("html2canvasreset");
call(canvas);
}
});
}
SnapShotDOM(document.body,function(canvas){
console.log(canvas);
});
</script>
onrendered
ã«ãªãŒããŒãããŒã«é¢é£ãããã®ãäœãå
¥ããªãçç±ã¯ã解æãšã¬ã³ããªã³ã°ã®éã®æéãç®ç«ã€å¯èœæ§ãããããªãŒããŒãããŒãã§ããã ãæ©ãïŒã€ãŸãã解æçŽåŸãã¬ã³ããªã³ã°åã«ïŒãªã»ããããããšãæãŸããããã§ããã³ã³ãã³ãã®ç®ã«èŠãããã©ãã·ã¥ãé¿ããããã 代ããã«ããªãŒããŒãããŒãªã»ãããonparsed
ã«å
¥ãããšããããå®çŸããŸãã
ç§ã¯ããªã³ããªããŒããã«ã€ããŠèšåããŠããŸããã
ãããè©ŠããŠïŒ
function SnapShotDOM(target,call){
var data = target.className;
target.className += " html2canvasreset";//set className - Jquery: $(target).addClass("html2canvasreset");
html2canvas(target, {
"onparsed": function() {
target.className = data;//old className - Jquery: $(target).removeClass("html2canvasreset");
},
"onrendered": function(canvas) {
call(canvas);
}
});
}
SnapShotDOM(document.body,function(canvas){
console.log(canvas);
});
ç§ãonpreloaded
ã䜿çšããã®ãåãçç±ã§ããããã¯ããªãŒããŒãããŒã®é衚瀺éšåã解æã¹ãããã®çŽåã®å¯èœãªéãææ°ã®ç¬éã«ç§»åã§ããããã«ããæé©åã§ãããããã«ãããã³ã³ãã³ãã¯ç»é¢ã«å®å
šã«è¡šç€ºãããŸãã ãããã©ã®ããã«æ©èœãããããã®ã³ãŒãã§ç¢ºèªã§ããŸãã
@niklasvh ããã®åé¡ã¯ããã«ããTODOïŒ options.useOverflow
ïŒã«é¢é£ããŠããŸããïŒ
ã©ã®ããŒãžã§ã³ã䜿çšããŸãããïŒ..ç§ã®ããŒãžã§ã³ã§onparsedããã³onpreloadedã¡ãœãããèŠã€ããããšãã§ããŸãã
html2canvas-0.5.0-alpha1ã䜿çšããŠããim
@ejlocopãã®åé¡ã¯ä»¥åã®ããŒãžã§ã³ã§æ°å¹Žåã«æåºããããã®ã§ããããŠãŒã¹ã±ãŒã¹ïŒïŒ511ïŒãšã¯é¢ä¿ããªãå¯èœæ§ããããŸãã
圌ãã¯åé¡ã解決ããŸãããïŒ ãã©ã¢ãœãªã¥ãŒã·ã§ã³ã¬ã³ããã£ãŒãã§äœããæ¢ããŠããŸããå®å
šã«ããªããå¿
èŠã§ã...
åããŠããªãã
@pkpatelsãªãæ©èœããªãã®ã§ããïŒ ç§ã¯ããªãã®ãã£ãã«ãèµ°ãããŸããããããŠãæã¯éåããããšãªãã¬ã³ããªã³ã°ãããŸãã...
ç§ããã®åé¡ãæ±ããŠããŸããããããŠç§ã®ããã«åãã解決çã¯ã§ææ¡ããããã®ã§ãïŒïŒ117
@uriklaråçŽã¹ã¯ããŒã«ã§ã¯ãªããæ°Žå¹³ã¹ã¯ããŒã«ã§æ©èœããŸãã ç§ã®divããã§ãã¯ã¢ãŠãããŠãã ããã ããã«ã¯3ã€ã®ç°ãªãèŠçŽ ããããŸãã
@uriklar divãäžã«ã¹ã¯ããŒã«ããŠå®å
šã«è¡šç€ºãã¯ãªãã¯ãããšãææ¡ãããœãªã¥ãŒã·ã§ã³ãæ©èœããŸããã
ã¬ã³ããªã³ã°åã«#textdivã®é«ããautoã«èšå®ããã¬ã³ããªã³ã°åŸã«ãªã»ããããã®ã¯ã©ãã§ããïŒ ããã¯ããŸãããã§ãããã
ææ°ã®ãªãªãŒã¹ïŒ0.5.0-beta4ïŒã§ã¯ãŸã ãªãŒããŒãããŒã®åé¡ããããŸããã @usmonsterã®åé¿çãæ¡çšããh2cãšPromisesãžã®æè¿ã®å€æŽã«é©åãããŸããïŒ @usmonsterã®ã¡ã¢ã§èª¬æãããŠã
泚ïŒåè¿°ã®åé¿çã¯ãçŸåšãã¹ã¿ãŒã«ããææ°ããŒãžã§ã³ã§ã¯æ©èœããŸããã ç§ã¯ãã¹ãããŠããŸãããã代ããã«onclonedãªãã·ã§ã³ã䜿çšããå¿ èŠãããããã§ããªãŒããŒãããŒã®èŠªãªã»ããã.thenïŒïŒãžã®ã³ãŒã«ããã¯ã§åŒã³åºãããããã«ãªããŸããã ïŒã¯ããŒã³ãããããã¥ã¡ã³ãå ã§èŠªã®ãªãŒããŒãããŒãæä»çã«è¡šç€ºããããšãå¯èœã§ãããäœããªã»ããããå¿ èŠã¯ãããŸãããïŒ
ãããã£ãŠãWebããŒãžã®å®éã®DOMãå€æŽããã«ã onclone
ã³ãŒã«ããã¯ãå©çšããŠãh2cã«ããã¬ã³ããªã³ã°ã«äœ¿çšãããè€è£œãããããã¥ã¡ã³ããå€æŽã§ããŸãã å®éã«ã¯éåžžã«ç°¡åã§ãããããç§ã®h2cåŒã³åºãã§ãã
var renderingPromise = html2canvas($(item), {
width: item.clientWidth,
height: item.clientHeight,
onclone: function(clone) {
$(clone).find('.grid-stack-item-content')
.css('overflow-x', 'auto')
.css('overflow-y', 'auto');
return true;
}
}).then(
function(c) {/* success */},
function() {/* fail */}
);
ç§ã«ãšã£ãŠããŸããã£ãã®ã¯ããã£ã³ãã¹ãiframeã«é 眮ãããã®äžã§html2canvasãåŒã³åºãããã£ã³ãã¹ã§toDataURLïŒïŒãåŒã³åºããã³ãŒã«ããã¯ã䜿çšããŠãã®ç»åãããããŠã£ã³ããŠã«æ»ãããšã ãã§ããã ãã£ã³ãã¹ãªããžã§ã¯ããè¿ãããšãã§ãããšæããŸãã
return renderDocument(node.ownerDocument, options, node.ownerDocument.defaultView.innerWidth, node.ownerDocument.defaultView.innerHeight, index).then(function(canvas) {
if (typeof(options.onrendered) === "function") {
log("options.onrendered is deprecated, html2canvas returns a Promise containing the canvas");
options.onrendered(canvas);
}
return canvas;
});
ãžã®å€æŽvar width = options.width != null ? options.width : node.ownerDocument.defaultView.innerWidth;
var height = options.height != null ? options.height+node.ownerDocument.defaultView.innerHeight : node.ownerDocument.defaultView.innerHeight;
return renderDocument(node.ownerDocument, options, width, height, index).then(function (canvas) {
if (typeof(options.onrendered) === "function") {
log("options.onrendered is deprecated, html2canvas returns a Promise containing the canvas");
options.onrendered(canvas);
}
return canvas;
});
ããã¯ãç»é¢ã®ãªãŒããŒãããŒïŒå¹ ãšé«ãã®äž¡æ¹ïŒã«é¢ãã質åã解決ããããšãã§ããŸã
xzw123ã«ã¯æªã解決çããããŸãã ownerDocument.defaultView.innerHeight
æåã§èšå®ãããšãå®éã®ãŠã£ã³ããŠãµã€ãºèšå®ã€ãã³ããããã€ã³ãã解é€ãããŸãã ããã¯iframeã§è¡ãã®ãæåã ãšæããŸãã ç§ã¯ãžã§ãŒãã³ã®è§£æ±ºçãè©Šãããšã«ç±å¿ã§ãã
ãžã§ãŒãã³ãã©ããã£ãŠiframeã§ãã£ã³ãã¹ã䜿ãããšã«ãªã£ãã®ã§ããïŒ ç§ã¯ä»ãããè©Šã¿ãŠããŸãã ãããhtml2canvasã®æçµçãªè§£æ±ºçã«ãªããšæããŸã... iframeéä¿¡ãAPIã®å€éšã§é衚瀺ã«ããå¿ èŠããããŸãã
ã¯ãã window.postMessage(myData, ... )
ããŠiframeã§å®è¡ãããšããŸããããŸãã ã¬ã³ããªã³ã°ããããã¯ã»ã«ã®ããŒã¿URLå
šäœããã¹ãããã¯ã§ããŸãã ã¬ã³ããªã³ã°ã³ãŒããiframeã®HTMLã«é
眮ããHTMLãœãŒã¹ã®ã¬ã³ããªã³ã°ã«å¿
èŠãªããŒã¿ãæž¡ããŠããã£ã³ãã¹ã«ã¬ã³ããªã³ã°ããŠãããtoDataUrlããŒã¿ãåãåºããŸãã
+1
ããã 解決çãæ¢ããã³ãŒããã©ã®ããã«å®è¡ããããã芳å¯ããåŸãç§ã¯ç¬èªã®ããªãããŒãªè§£æ±ºçãæžããŸãã
https://gist.github.com/simonmysun/c6da13ce2827a374e71ccf07d9f08e2d
ããã¯ç§ã®ããã«åããŸãããããŠç§ã¯ãããå¿ èŠãšãã誰ããå©ããããšãé¡ã£ãŠããŸãã
ãã ããå°æ¥çã«ã¯ãã®ã©ã€ãã©ãªã§ãµããŒããããããšãé¡ã£ãŠããŸãã
ãŸã ããããŸããããåé¡ã¯ç»åãéåãããšããããšã§ãã ã¯ãã ããŒãžã§ã³54.0.2840.99mã䜿çšããå Žå
ïŒååã®ç»åã¯ã¹ã¯ãªãŒã³ã·ã§ããã«ãªããŸããããæ®ãã®ååã¯é»ãç»é¢ã«ãªããŸããïŒ
// the timeline show up 100%, but cut off, cause its static and not dynamic.
// (its cut off from the screen,but the size, and picture show as normal, 100% show)
// after moving to the canvas, everthing that not in the screen will get blank in chrome
// it depends to the user screen, if i zoom out my chrome, i get 100% image.
ãã ããMozilla 50.0.2ã䜿çšããŠããå Žåã¯ããºãŒã ã¢ãŠãããªããŠãæ£åžžã«æ©èœããŸãã ïŒ100ïŒ ç»åïŒã
çç±ã¯ããããŸããã
ã³ãŒãïŒ
var zenleft = $("#leftPanel").width(); //calculate left side
var zenright = $(".dataPanel").width(); //calculate right side
var after = zenright + zenleft + 250; // add all
//add the css, even after add overflow still not working
$("#timelineTarget").css({"background-color":"white","width":after});
html2canvas(canvTimeline, {
onrendered: function (canvas) {
$("#previewImage").html(canvas);
getCanvas = canvas;
}
});
æåŸã«ãè¿œå ããŠãã®åé¡ã解決ããŸã
$("body").css({"width": "+="+after}); //after is a total of the width of the element i want to view
ããã§
var zenleft = $("#leftPanel").width(); //calculate left side
var zenright = $(".dataPanel").width(); //calculate right side
var after = zenright + zenleft + 250; // add all
$("body").css({"width": "+="+after}); //add the body
//add the css
$("#timelineTarget").css({"background-color":"white","width":after});
html2canvas(canvTimeline, {
onrendered: function (canvas) {
$("#previewImage").html(canvas);
$("#timelineTarget").css({"background-color":"white","width":old}); //turn it back
$("body").css({"width": "-="+after}); //turn it back
getCanvas = canvas;
}
});
ãããããªãèªèº«ã®åé¡ã解決ããããšãé¡ã£ãŠããŸãã
oncloneãæ£ããæ¹æ³ãããããŸããã cssãå€æŽããŠãå¿ èŠãªãã®ãååŸã§ããŸãã
ããã«ã¡ã¯ãã¹ãŠãç§ã¯ã¹ã¯ããŒã«å¯èœãªdivãæã£ãŠããŸãã divå ¥åãcanvasãã©ã¡ãŒã¿ãŒãšããŠéä¿¡ãããšããã¥ãŒããŒãã§äœ¿çšå¯èœãªãã®ãã¬ã³ããªã³ã°ãããã ãã§ãã ç§ã¯ãã¹ãŠã®è§£æ±ºçãè©ŠããŸããã ããããŸããã§ããã divã®ã³ã³ãã³ãå šäœãã¹ã¯ãªãŒã³ã·ã§ãããšããŠååŸããæ¹æ³ã誰ãã«æããŠããããŸããïŒ
@ruthraprakash ãç§ã¯åæ§ã®åé¡ãæ±ããŠããŸããã ããã¯ãææ°ããŒãžã§ã³ã§ã®ç§ã®åçŽãªç®çã§æ©èœããŸãã
function fullhtml2canvas(el) {
return new Promise(resolve => {
html2canvas(el, {
width: el.scrollWidth,
height: el.scrollHeight,
}).then(canvas => {
resolve(canvas);
});
});
}
ã¿ã€ã ã©ã€ã³ãã£ãŒãã®ã¹ã¯ãªãŒã³ã·ã§ãããæ®ãã®ã«åé¡ããããŸãã x軞ã®å€ãååŸããŠããŸããã ãã£ã ã©ã€ã³ãã£ãŒãã®ç»åãäœæããŠããã ãã§ãã
`demoFromHTMLïŒeïŒ{
e.preventDefaultïŒïŒ;
let input = window.document.getElementById('divToPDF');
html2canvas(input)
.then((canvas) => {
const imgData = canvas.toDataURL('image/jpeg');
const pdf = new pdfConverter("l", "pt");
pdf.addImage(imgData, 'JPEG', 15, 110, 800, 250);
pdf.save('test.pdf');
});
}
`
é·ãéè©ŠããŠã¿ãŸãããâŠã§ã倧å€ã§ãâŠãã£ããã£ãéãã«ã¯ãããŸããã§ããã ã¹ã¯ããŒã«ããã£ãŠããbodyãã®å Žåã¯ããŸãããããšãããããŸãã...ã¹ã¯ããŒã«ã®ããèŠçŽ ãæã€divã§ãåãããšãéæããããšæããŸã...ãã®åé¡ã§ç§ãå©ããããšãã§ããã°ç§ã«ãšã£ãŠå€§ããªå©ãã«ãªããŸã...ç§ã¯ããªãã®ã³ã¡ã³ãã楜ãã¿ã«ããŠããŸã...
ã©ããã£ãŠäœãåãããã®ãæããŠãã ãã
æãåèã«ãªãã³ã¡ã³ã
@ruthraprakash ãç§ã¯åæ§ã®åé¡ãæ±ããŠããŸããã ããã¯ãææ°ããŒãžã§ã³ã§ã®ç§ã®åçŽãªç®çã§æ©èœããŸãã