Html2canvas: ΠœΠ΅ΠΆΠ΄ΠΎΠΌΠ΅Π½Π½Ρ‹Π΅ изобраТСния Π½Π΅ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽΡ‚ΡΡ (Π±Π΅Π· CORS ΠΈΠ»ΠΈ прокси)

Π‘ΠΎΠ·Π΄Π°Π½Π½Ρ‹ΠΉ Π½Π° 21 мая 2015  Β·  23ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ  Β·  Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: niklasvh/html2canvas

ΠŸΡ€ΠΈΠ²Π΅Ρ‚,

ИспользованиС ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΊΠΎΠ΄Π° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Π½Π΅ обСспСчиваСт ΠΌΠ΅ΠΆΠ΄ΠΎΠΌΠ΅Π½Π½Ρ‹ΠΉ Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΠ½Π³.

html2canvas($(".canvas-surround"), {
        logging: true,
        width: 1920 * getScale(),
        height: 1080 * getScale(),
        useCORS: false,
        onrendered: function(canvas) {

            var bottomCtx = canvas.getContext("2d");
            var topCtx = canvas.getContext("2d");
            var bData = bottomCtx.getImageData(0, 0, canvas.width, canvas.height);
            var tData = topCtx.getImageData(0, 0, canvas.width, canvas.height);

            var merged = mergeData(bData, tData);

            bottomCtx.putImageData(merged, 0, 0);

            var newImg = canvas.toDataURL("image/png");
            console.log(newImg);
            var blob = b64toBlob(newImg, "image/png");
            console.log(blob);

            var blobUrl = URL.createObjectURL(blob);

            console.log(blobUrl);

            downloadURI(blobUrl);
        }
    });

ΠŸΡ€ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ изобраТСния с " http://www.thermmark.co.uk " с " http://www.playgroundmarkingsdirect.co.uk " изобраТСния Π½Π΅ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π»ΠΈΡΡŒ.

Когда я пСрСмСстил ΠΊΠΎΠ΄ Π½Π° Π²Π΅Π±- сайт Β«

Π›ΡŽΠ±Ρ‹Π΅ ΠΈΠ΄Π΅ΠΈ?

Needs More Information

Π‘Π°ΠΌΡ‹ΠΉ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π²Π°ΠΌ слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ useCORS ptoperty ΠΊΠ°ΠΊ true, ΠΎΠ½ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для кроссдомСнного Π²Π΅Π±-ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚Π°

ВсС 23 ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π²Π°ΠΌ слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ useCORS ptoperty ΠΊΠ°ΠΊ true, ΠΎΠ½ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для кроссдомСнного Π²Π΅Π±-ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚Π°

ИспользованиС useCORS Π½Π΅ позволяСт Π·Π°Ρ…Π²Π°Ρ‚ΠΈΡ‚ΡŒ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅. ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ°, с ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ я столкнулся, странная, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠ· внСшнСго Π΄ΠΎΠΌΠ΅Π½Π°, ΠΎΠ½ просто Π½Π΅ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ Π΅Π³ΠΎ Π² Π·Π°Ρ…Π²Π°Ρ‚Π΅.

Π’Ρ‹ ΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Π» ΠΌΠΎΠ΅ исправлСниС? https://github.com/niklasvh/html2canvas/pull/554

ВСроятно, слСдуСт ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ для allowTaint Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ true, Π½ΠΎ Ρ‚ΠΎΠ³Π΄Π° Π²Ρ‹ Π½Π΅ смоТСтС ΡΠΊΡΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚.

НС понимаю, ΠΏΠΎΡ‡Π΅ΠΌΡƒ Π±Ρ‹ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ userCORS ΠΈΠ»ΠΈ proxy ... Они просто созданы для Ρ‚Π°ΠΊΠΈΡ… Π·Π°Π΄Π°Ρ‡.

@brcontainer ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ΠΈ Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Π² послСднСй вСрсии, см. ΠΌΠΎΠ΅ исправлСниС: https://github.com/niklasvh/html2canvas/pull/554

@ Cristy94 ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ !! ΠžΡ‚Π»ΠΈΡ‡Π½ΠΎΠ΅ исправлСниС! Бпасибо!

ΠŸΡ€ΠΈΠ²Π΅Ρ‚ @ Cristy94!

Π― ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽ изобраТСния ΠΈΠ· CMS (Contentful) Π² своСм HTML, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΏΡ‹Ρ‚Π°ΡŽΡΡŒ ΡΠ³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ PDF ΠΈΠ· этого HTML.
Но Π² сгСнСрированном PDF-Ρ„Π°ΠΉΠ»Π΅ изобраТСния ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚ (ΠΏΠΎΡ…ΠΎΠΆΠ΅, ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° пСрСкрСстного происхоТдСния).
ΠŸΠΎΠΆΠ°Π»ΡƒΠΉΡΡ‚Π°, ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠΈΡ‚Π΅ ΠΌΠ½Π΅, ΠΊΠ°ΠΊ я ΠΌΠΎΠ³Ρƒ ΠΈΠ·Π±Π°Π²ΠΈΡ‚ΡŒΡΡ ΠΎΡ‚ этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹.
НиТС мой код:

function downloadPDF () {
var canvasToImage = function (canvas) {
var img = Π½ΠΎΠ²ΠΎΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ();
var dataURL = canvas.toDataURL ('image / png');
img.crossOrigin = "Анонимный";
img.src = dataURL;
Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ img;
};

var canvasShiftImage = function (oldCanvas, shiftAmt) {
shiftAmt = parseInt (shiftAmt) || 0;
Ссли (! shiftAmt) {Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ oldCanvas; }

var newCanvas = document.createElement ('холст');
newCanvas.height = oldCanvas.height - shiftAmt;
newCanvas.width = oldCanvas.width;
var ctx = newCanvas.getContext ('2d');
ctx.mozImageSmoothingEnabled = false;
ctx.webkitImageSmoothingEnabled = false;
ctx.msImageSmoothingEnabled = false;
ctx.imageSmoothingEnabled = false;

var img = canvasToImage (oldCanvas);
ctx.drawImage (img, 0, shiftAmt, img.width, img.height, 0, 0, img.width, img.height);

return newCanvas;
};

var canvasToImageSuccess = function (canvas) {
var pdf = Π½ΠΎΠ²Ρ‹ΠΉ jsPDF ('l', 'px'),
pdfInternals = pdf.internal,
pdfPageSize = pdfInternals.pageSize,
pdfScaleFactor = pdfInternals.scaleFactor,
pdfPageWidth = pdfPageSize.width,
pdfPageHeight = pdfPageSize.height,
totalPdfHeight = 0,
htmlPageHeight = canvas.height,
htmlScaleFactor = canvas.width / (pdfPageWidth * pdfScaleFactor),
SafetyNet = 0;

while (totalPdfHeight <htmlPageHeight && safetyNet <15) {
var newCanvas = canvasShiftImage (холст, totalPdfHeight);
pdf.addImage (newCanvas, 'png, 0, 0, pdfPageWidth, 0, null,' НЕВ ');
// var alias = Math.random (). toString (35);
// pdf.addImage (newCanvas, 0, 0, pdfPageWidth, 0, 'png', псСвдоним, 'НЕВ');

totalPdfHeight + = (pdfPageHeight * pdfScaleFactor * htmlScaleFactor);

if (totalPdfHeight <htmlPageHeight) {
pdf.addPage ();
}
SafetyNet ++;
}

var pageName = document.location.pathname.match (/ [^ /] + $ /) [0];
pdf.save (pageName + '.pdf');
};

html2canvas ($ ('body') [0],
{
onrendered: function (canvas) {
canvasToImageSuccess (холст);
}
});
}

Π­ΠΉ, Π±ΡƒΠ΄Π΅Ρ‚ Π»ΠΈ это исправлСниС? Π˜Π·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΡ CORS здСсь Ρ‚Π°ΠΊΠΆΠ΅ Π½Π΅ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽΡ‚ΡΡ :(

ΠŸΡ€ΠΈΠ²Π΅Ρ‚ Π ΡƒΠΊΠ΅Π²,

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это, ΠΏΠ΅Ρ€Π΅Π΄Π°Π² ΠΎΠ΄Π½Ρƒ ΠΈΠ· ΠΎΠΏΡ†ΠΈΠΉ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ html2canvas. И ΠΏΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅, это ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ сработаСт :)

html2canvas ($ ('# div_pdf') [0],
{
useCORS: true, // ΠŸΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ этот ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, изобраТСния пСрСкрСстного происхоТдСния Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒΡΡ Π² Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½ΠΎΠΉ вСрсии PDF
onrendered: function (canvas) {
canvasToImageSuccess (холст);
}
});
Для получСния Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ html2canvas ΠΏΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌΡƒ URL-адрСсу:
https://html2canvas.hertzen.com/documentation.html

ΠŸΡ€ΠΈΠ²Π΅Ρ‚ @ gauravmishra24 , ΠΊ соТалСнию, это Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚. ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ я Ρ…ΠΎΡ‡Ρƒ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ изобраТСния с сСрвСра, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Ρƒ сСрвСра Π΅ΡΡ‚ΡŒ Ρ„Π»Π°Π³

Access-Control-Allow-Origin: *

Π½Π΅ установлСн

:(

ΠŸΡ€ΠΈΠ²Π΅Ρ‚ Π ΡƒΠΊΠ΅Π²,

НС ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ Π²Ρ‹ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Ρ‚ΡŒ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ ΠΊΠΎΠ΄Π°?

Π§Ρ‚ΠΎΠ±Ρ‹ я ΠΌΠΎΠ³ ΠΏΠΎΠ»ΡƒΡ‡ΡˆΠ΅ Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ‚ΠΎ ΠΆΠ΅ самоС ...

ΠŸΡ€ΠΈΠ²Π΅Ρ‚,

Π•ΡΡ‚ΡŒ Π»ΠΈ ΠΊΠ°ΠΊΠΎΠ΅-Π½ΠΈΠ±ΡƒΠ΄ΡŒ исправлСниС для этого? Π”Π°ΠΆΠ΅ Ссли для ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° useCORS установлСно Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ true, изобраТСния Π½Π΅ Π·Π°Π³Ρ€ΡƒΠΆΠ°ΡŽΡ‚ΡΡ. По-ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ошибка пСрСкрСстного происхоТдСния, ΠΊΠ°ΠΊ ΡƒΠΊΠ°Π·Π°Π½ΠΎ Π²Ρ‹ΡˆΠ΅.

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π½Π΅ ΡƒΠ²Π΅Ρ€Π΅Π½ Π² Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΈ Cristy94 Π² распрСдСлСнном Ρ„Π°ΠΉΠ»Π΅ html2Canvas.js. Π”Π°ΠΆΠ΅ послС измСнСния ΠΊΠΎΠ΄Π° Π² распрСдСлСнном Ρ„Π°ΠΉΠ»Π΅, согласно https://github.com/niklasvh/html2canvas/pull/554/commit/87d44359be73075ba4d5f36d6e1c8b88b7444402, ΠΎΠ½ Ρ‚ΠΎΠΆΠ΅ Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚.

Для Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Ρ‹, с настройками прокси, Π΅ΡΡ‚ΡŒ Π»ΠΈ ΠΊΠ°ΠΊΠΎΠ΅-Π»ΠΈΠ±ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ для прилоТСния angular 2?
Π’ спискС Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ сайта (https://github.com/niklasvh/html2canvas/wiki/Proxies) Π΅Π³ΠΎ Π½Π΅Ρ‚!

Π­Ρ‚ΠΎ всС Π΅Ρ‰Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° с вСрсиСй 1.0.0 ? Если Π΄Π°, Π½Π΅ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ Π²Ρ‹ ΠΏΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ Π½Π° jsfiddle .

Π­Ρ‚Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π±Ρ‹Π»Π° автоматичСски Π·Π°ΠΊΡ€Ρ‹Ρ‚Π°, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π½Π° наш запрос ΠΎ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎΡ‚ ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π°Π²Ρ‚ΠΎΡ€Π° Π½Π΅ поступило ΠΎΡ‚Π²Π΅Ρ‚Π°. ИмСя Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Ρƒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ, которая Π² настоящСС врСмя являСтся ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ, Ρƒ нас нСдостаточно ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ для принятия ΠΌΠ΅Ρ€. Если Ρƒ вас Π΅ΡΡ‚ΡŒ ΠΈΠ»ΠΈ Π²Ρ‹ Π½Π°ΠΉΠ΄Π΅Ρ‚Π΅ Π½ΡƒΠΆΠ½Ρ‹Π΅ Π½Π°ΠΌ ΠΎΡ‚Π²Π΅Ρ‚Ρ‹, ΡΠ²ΡΠΆΠΈΡ‚Π΅ΡΡŒ с Π½Π°ΠΌΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΌΡ‹ ΠΌΠΎΠ³Π»ΠΈ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ΡŒ расслСдованиС.

@niklasvh Π’ΠΎΡ‚ ΠΌΠΎΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ΄Π° с v1.0.0:
https://codepen.io/Onlylonger/pen/ppjPKX
Ρ‚ΠΎΡ‚ ΠΆΠ΅ вопрос. спасибо Ρ‚Π΅Π±Π΅

ΠšΡ‚ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Π·Π½Π°Π΅Ρ‚ ΠΊΠ°ΠΊΠΎΠΉ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΠ»Π°Π³ΠΈΠ½. Π­Ρ‚ΠΎ Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΎ с запросом Π΄Ρ€ΡƒΠ³ΠΈΡ… сСрвСров. НСт подходящСго ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° для прокси.

@vinayistar, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠΎΠΈ измСнСния, см. ссылку https://github.com/niklasvh/html2canvas/issues/1544#issuecomment -435640901

ИспользованиС useCORS ΠΈ установка Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° img crossOrigin:anonymous

{ useCORS: false, allowTaint: true } это сработало для мСня

МоС Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ - ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ src изобраТСния Π² Base64.

const img = document.querySelector('#img')
fetch(img.src)
  .then(res => res.blob())
  .then(blob => new Promise((resolve, reject) => {
      const reader = new FileReader;
      reader.onerror = reject;
      reader.onload = () => {
        resolve(reader.result);
      };
      reader.readAsDataURL(blob);
    })
  )
  .then(dataURL => {
    img.src = dataURL
    return html2canvas(element)
  } )

@todoi ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π»ΠΈ Π²Ρ‹ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΎΠ±Ρ€Π°Π·Π΅Ρ† этого с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ jspdf.

@ nishanta454
Π­Ρ‚ΠΎ Ρ‚ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ я написал. html2canvas ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ изобраТСния с пСрСкрСстным происхоТдСниСм .
Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ я ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽ cors -where, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ CORS Π² запрос прокси-изобраТСния.

ΠŸΠ΅Ρ€Π²ΠΎΠ΅, Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ, это сСрвСр, настроСнный для размСщСния ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ с Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠΌ Access-Control-Allow-Origin, настроСнный для Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ доступа ΠΊ Ρ„Π°ΠΉΠ»Π°ΠΌ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ ΠΈΠ· Ρ€Π°Π·Π½Ρ‹Ρ… источников.
ΠΈΠ· CORS_enabled_image

Π‘Ρ‹Π»Π° Π»ΠΈ эта страница ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ?
0 / 5 - 0 Ρ€Π΅ΠΉΡ‚ΠΈΠ½Π³ΠΈ