繁体   English   中英

FileSaver.js另存为类型不正确

[英]FileSaver.js Save as type is incorrect

我正在开发一个使用Electron将Web应用程序包装到桌面应用程序的项目。

在这个项目中,我使用FileSaver.js将画布内容导出到png / jpg / pdf。

  1. 画布变成base64图像
  2. base64图像变成斑点
  3. 使用FileSaver.js保存Blob文件

出现“保存”对话框时,外观如下:

在此处输入图片说明

这是正常另存为(png文件)的样子:

在此处输入图片说明

这很重要,因为如果用户忘记在文件名的末尾插入.png,则无法正常打开该文件。

我怎么解决这个问题?

非常感谢你。

我建议使用electron-canvas-to-buffer包装,并根据用户的出口选择,创建两种方法并使用电子对话框的filter进行相应保存。

对于pdf,我使用了jspdf软件包。 这会将文件另存为您指定的任何文件名。 另外,我还添加了一个片段,将画布背景涂成白色,以避免黑色背景。

这是一个简单的例子

var canvasBuffer = require('electron-canvas-to-buffer');
var fs = require('fs');
var jsPDF = require('jspdf');

// your canvas drawing
var canvas = document.createElement('canvas');
var context = canvas.getContext('2d');
// painting the canvas white to prevent black background
context.clearRect(0, 0, canvas.width, canvas.height);
context.fillStyle = '#fff';
context.fillRect(0, 0, canvas.width, canvas.height);
// drawing
context.fillStyle = 'blue';
context.fillRect(0, 0, 50, 50);
context.fillStyle = 'red';
context.fillRect(50, 10, 30, 20);


// PNG
function savePNG() {
    var buffer = canvasBuffer(canvas, 'image/png');
    dialog.showSaveDialog({
        filters: [{
            name: 'png',
            extensions: ['png']
        }]
    }, function (fileName) {
        if (fileName === undefined) return;
        fs.writeFile(fileName, buffer, function (err) {});
    });
}
// JPG
function saveJPG() {
  var buffer = canvasBuffer(canvas, 'image/jpg');
  dialog.showSaveDialog(
    {
      filters: [
        {
          name: 'jpg',
          extensions: ['jpg'],
        },
      ],
    },
    (fileName) => {
      if (fileName === undefined) return;
      fs.writeFile(fileName, buffer, (err) => {});
    },
  );
}
// PDF
function savePDF() {
  // only jpeg is supported by jsPDF
  let imgData = canvas.toDataURL('image/jpeg', 1.0);
  let pdf = new jsPDF();
  pdf.addImage(imgData, 'JPEG', 0, 0);
  pdf.save('test.pdf');
}

暂无
暂无

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

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