FileSaver.js 保存类型不正确
FileSaver.js Save as type is incorrect
我正在开发一个使用 Electron 将 Web 应用程序包装到桌面应用程序的项目。
在这个项目中,我使用FileSaver.js将canvas内容导出到png/jpg/pdf。
- canvas转成base64图片
- base64图片转成blob
- blob 文件使用 FileSaver.js
保存
这是出现“保存”对话框时的样子:
这是正常保存为(png 文件)时的样子:
这很重要,因为如果用户忘记在文件名末尾插入.png,文件将无法正常打开。
我该如何解决这个问题?
非常感谢。
我建议使用 electron-canvas-to-buffer
package and depending on the users export choice, create two methods and use electron dialog's filter
进行相应保存。
对于 pdf,我使用了 jspdf
包。这会将文件保存为您指定的任何文件名。我还添加了一个片段来将 canvas 背景涂成白色以避免黑色背景。
这是一个简单的例子
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');
}
我正在开发一个使用 Electron 将 Web 应用程序包装到桌面应用程序的项目。
在这个项目中,我使用FileSaver.js将canvas内容导出到png/jpg/pdf。
- canvas转成base64图片
- base64图片转成blob
- blob 文件使用 FileSaver.js 保存
这是出现“保存”对话框时的样子:
这是正常保存为(png 文件)时的样子:
这很重要,因为如果用户忘记在文件名末尾插入.png,文件将无法正常打开。
我该如何解决这个问题?
非常感谢。
我建议使用 electron-canvas-to-buffer
package and depending on the users export choice, create two methods and use electron dialog's filter
进行相应保存。
对于 pdf,我使用了 jspdf
包。这会将文件保存为您指定的任何文件名。我还添加了一个片段来将 canvas 背景涂成白色以避免黑色背景。
这是一个简单的例子
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');
}