使用 jsPDF addImage JPEG 将 p5.js sketch canvas 下载为 PDF

问题描述 投票:0回答:1

在使用 JS toDataURL 方法将画布转换为 JPEG 后,尝试运行一个最小脚本,以使用 jsPDF(特别是 jsPDF addImage 方法)将 p5.js 草图画布元素下载为 PDF。

启动页面后,我可以让 p5.js 在画布上绘图,让 jsPDF 下载 PDF,但 PDF 是空白的(黑色带有 JPEG,白色带有 PNG,大概是 b/c alpha 通道)。我猜这是因为我在脚本中包含了 jsPDF 代码,但是我将其放在其他任何地方,下载都不起作用。

有什么建议吗?

(FWIW,我尝试了解决方案:JsPDF addImage jpeg 背景是黑色,但我最终得到的是全白 PDF,就像我使用 PNG 而不是 JPEG 时一样)

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <title>Page 0</title>

    <link rel="stylesheet" type="text/css" href="style.css">

    <script src="https://cdnjs.cloudflare.com/ajax/libs/jspdf/1.5.3/jspdf.debug.js" integrity="sha384-NaWTHo/8YCBYJ59830LTz/P4aQZK1sS0SneOgAvhsIl3zBu8r9RevNg5lHCHAuQ/" crossorigin="anonymous"></script>
    <script src="libraries/p5.min.js"></script>
    <script src="libraries/p5.sound.min.js"></script>
  </head>

  <body>
    <script src="page0.js"></script>
  </body>
</html>
function  setup() {

  let     the_canvas  =     createCanvas(792, 612, P2D);

                            noLoop();

  let     doc         = new jsPDF("l", "pt", [792, 612]);

  let     the_img     =     the_canvas.elt.toDataURL("image/JPEG", 1.0);
                            doc.addImage(the_img, "JPEG", 0, 0, 792, 612);

                            doc.save("page0.pdf");
                          
}

function  draw() {

                            background(43);

                            stroke(200);
                            fill(200);
                            textSize(100);
                            text("Test", 500, 500);

}
html, body {
  margin: 0;
  padding: 0;
}

canvas {
  display: block;
}
html5-canvas p5.js jspdf
1个回答
0
投票

由于

setup
先运行,然后
draw
,因此您可以在向 PDF 写入文本之前保存 PDF。

尝试写入,然后保存:

<!doctype html>
<html lang="en">
  <head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Page 0</title>
    <style>
      html,
      body {
        margin: 0;
        padding: 0;
      }

      canvas {
        display: block;
      }
    </style>
    <script
      src="https://cdnjs.cloudflare.com/ajax/libs/jspdf/1.5.3/jspdf.debug.js"
      integrity="sha384-NaWTHo/8YCBYJ59830LTz/P4aQZK1sS0SneOgAvhsIl3zBu8r9RevNg5lHCHAuQ/"
      crossorigin="anonymous"
    ></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.9.0/p5.js"></script>
  </head>
  <body>
    <script>
      let canvas;
      function setup() {
        canvas = createCanvas(792, 612, P2D);
        noLoop();
      }

      function draw() {
        background(43);
        stroke(200);
        fill(200);
        textSize(100);
        text("Test", 500, 500);
        const doc = new jsPDF("l", "pt", [792, 612]);
        const img = canvas.elt.toDataURL("image/JPEG", 1.0);
        doc.addImage(img, "JPEG", 0, 0, 792, 612);
        doc.save("page0.pdf");
      }
    </script>
  </body>
</html>
© www.soinside.com 2019 - 2024. All rights reserved.