简体   繁体   English

无法在AngularJS应用程序中调用html2canvas

[英]Unable to call html2canvas in AngularJS application

In my controller I am defining html2canvas functions like: 在我的控制器中,我正在定义html2canvas函数,例如:

 var builderApp = angular.module('builderApp', ['fg', 'ngSanitize', 'ui.bootstrap', 'angularFileUpload', 'textAngular', 'ui.grid', 'ui.grid.pagination']); builderApp .run(function ($templateCache) { $templateCache.put('custom-busy.html', "<div class=\\"cssload-loader\\"><div class=\\"cssload-inner cssload-one\\"></div><div class=\\"cssload-inner cssload-two\\"></div><div class=\\"cssload-inner cssload-three\\"></div></div>" ); }); builderApp.controller('builderCtrl', function ($scope, formSchema, formData, $http, $filter) { var vm = this; $scope.canvasToImageSuccess = function (canvas) { var margins = { top: 50, bottom: 80, left: 20, width: 600 }; var pdf = new jsPDF('p', 'pt', 'a4'), // jsPDF(orientation, unit, format) pdfInternals = pdf.internal, pdfPageSize = pdfInternals.pageSize, pdfScaleFactor = pdfInternals.scaleFactor, pdfPageWidth = pdfPageSize.width - (margins.left + margins.left), pdfPageHeight = pdfPageSize.height + margins.left, totalPdfHeight = 0, htmlPageHeight = canvas.height, htmlScaleFactor = canvas.width / (pdfPageWidth * pdfScaleFactor), safetyNet = 0; pdf.setFontSize(22); pdf.setFontStyle('italic'); pdf.page = 1; while (totalPdfHeight < htmlPageHeight && safetyNet < 15) { var newCanvas = canvasShiftImage(canvas, totalPdfHeight); pdf.addImage(newCanvas, 'png', margins.left, margins.top, pdfPageWidth, 0, null, 'NONE'); pdf.page++; totalPdfHeight += (pdfPageHeight * pdfScaleFactor * htmlScaleFactor); if (totalPdfHeight < htmlPageHeight) { pdf.addPage(); } safetyNet++; } pdf.save(fileName); }; $scope.createPDF = function () { var source = $("#formData").html(); var fileName = "Form1.Pdf"; var canvasToImage = function (canvas) { var img = new Image(); var dataURL = canvas.toDataURL('image/png'); img.src = dataURL; return img; }; var canvasShiftImage = function (oldCanvas, shiftAmt) { shiftAmt = parseInt(shiftAmt) || 0; if (!shiftAmt) { return oldCanvas; } var newCanvas = document.createElement('canvas'); newCanvas.height = oldCanvas.height - shiftAmt; newCanvas.width = oldCanvas.width; var ctx = newCanvas.getContext('2d'); var img = canvasToImage(oldCanvas); ctx.drawImage(img, 0, shiftAmt, img.width, img.height, 0, 0, img.width, img.height); return newCanvas; }; try{ html2canvas(source, { onrendered: function (canvas) { alert('rendered'); $scope.canvasToImageSuccess(canvas); } }); } catch(e) { var x = e; } } 

From UI I am able to call createPDF function however, the alert in html2canvas is not getting fired and so my function canvasToImageSuccess does not get executed. 从用户界面,我可以调用createPDF函数,但是html2canvas中的警报未触发,因此我的函数canvasToImageSuccess无法执行。

Am I missing anything here? 我在这里想念什么吗?

I tried to inject html2canvas as global.html2canvas = require("html2canvas"); 我试图将html2canvas注入为global.html2canvas = require("html2canvas"); but this is not working. 但这不起作用。

I checked console, but there is not error. 我检查了控制台,但没有错误。

The fix was that the html2canvas needs element and not the html text. 解决方法是html2canvas需要元素,而不是html文本。

so, line: 因此,行:

html2canvas(source,

should be: 应该:

html2canvas($("#formData"),

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM