(十一)Electron 导入导出文件

主要功能:

1、导入md文件 2、导出md文件 3、导出html文件 4、导出pdf文件

主要使用技术为nodejsfs模块,以及electrondialog

导出逻辑

使用dialog.showSaveDialog获取导出文件的路径,然后调用fs.writeFileSync同步写入文件即可。

var filters = [
  {
      name: filename,
      extensions: [type] // 文件后缀名类型, 如md
  }
]
var filePath = dialog.showSaveDialog({
   filters,
   defaultPath: filename,
   title: '导出',
   buttonLabel: '导出'
})
复制代码

导出md文件

这个比较简单,直接将md写入文件即可:

fs.writeFileSync(filePath, content, 'utf8')
复制代码

导出Html文件

首先需要通过editor实例获取html源码,方法如下:

let html = this.$refs.editor.d_render
复制代码

然后通过一个html页包装后写入文件即可:

function getHtml(title, body) {
    return `
  <!DOCTYPE html>
  <html>
    <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <meta name="author" content="CEditor">
      <title>${title}</title>
      <link rel="stylesheet" href="https://cyyjs.github.io/static/md.css">
    </head>
    <body class="markdown-body code-github">
      <h1>${title}</h1>
      ${body}
    </body>
  </html>`
}
复制代码

可以自定义一些样式等。

导出PDF文件

electronwebContents提供了一个printToPDF方法,我们可以直接使用这个方法来导出PDF。

逻辑是先将内容包装成html后加载到webContents主进程中,然后调用打印方法。

代码如下:

content = getHtml(title, html)
    // 将获取到的html文件存入一个临时文件内
  let tmpPath = path.join(userDataPath, 'tmp.html')
  fs.writeFileSync(tmpPath, content, 'utf8')
  let win = new BrowserWindow({
      width: 768,
      height: 1024,
      show: false
  })
  // 创建窗口加载html文件
  win.loadURL('file://' + tmpPath)
  let contents = win.webContents
  // 监听加载成功事件
  contents.on('did-finish-load', () => {
    // 调用打印接口,回调文件buffer数据
      contents.printToPDF({}, (error, data) => {
          if (error) throw error
          // 写入文件
          fs.writeFileSync(filePath, data)
          // 关闭窗口
          win.close()
          // 删除HTML文件
          fs.unlinkSync(tmpPath)
      })
  })
复制代码

导入文件

使用dialog.showOpenDialog方法,获取要导入的文件路径。

let path = dialog.showOpenDialog({
       filters: [
           {
               name: 'MD文件',
               extensions: ['md']
           }
       ],
       properties: ['openFile'],
       message: '选择要导入的Mackdown文件',
       buttonLabel: '导入'
   })
复制代码

然后调用fs.readFileSync读取文件即可。

博客地址: alibt.top

更多精彩,请关注我的公众号!

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值