主要使用技术为 nodejs fs 模块,以及 electron dialog

使用 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>
      <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读取文件即可。

主要功能:1、导入md文件2、导出md文件3、导出html文件4、导出pdf文件主要使用技术为nodejs的fs模块,以及electron的dialog导出逻辑使用dialog.showSaveDialog获取导出文件的路径,然后调用fs.writeFileSync同步写入文件即可。var filters = [ { name: filename, ex... 做本地应用程序的时候经常需要用到nodeJS来保存数据 这时候就涉及到了主进程和渲染进程的数据传递了 Electron读写本地文件其实和nodeJs差不多,只是中间加了一层API 废话不多说直接上内容 读取文件 首先按需导入ipcMain模块 注册事件(注意:ipcMain里on注册事件的名字可以自定义),调用时跟渲染进程的调用的名称一样即可 渲染进程向... 红牛工作室: 您看能不能以我这个项目写个例子。做电表数据采集就是需要读写锁。 大概思路是这样子的,总共3个线程,1个主线程,1个socket TCP线程,内有一个queue队列配1个队列线程.每隔10分钟,主线程添加需要采集的数据到queue, 首先要判断是不是第一次发送(因为设备是被动响应,需要发送一个数据唤醒),如果是第一次就直接调用Socket.send发送数据,然后再把这个数据存储到队列线程里面等待onRecv数据解析的结果, 数据解析不对或者是等待超时,就在队列线程里面重试5次Socket.send,结果还不是想要的就放弃。如果不是第一次主线程就直接Queue.push_back.直到把需要发送的数据添加完成. 主线程添加的这个时候TCP也在同时接收数据,OnRecv如果接收到正确的数据就再次调用OnSend(先queue.pop 然后再Socket.send,并把同样的一分数据放到队列线程里面)发送数据采集。 这个队列线程主要的作用就是万一有一个电表掉线,在OnRecv里面无法接收到数据造成后面其它需要采集的电表没有抄到。queue用的CCriticalSection做线程安全,3个线程是用的读写锁。 现在存在的问题就是这个读写锁用不好,看日志偶尔发现OnRecv和队列线程用时在调用Socket.send,造成设备响应异常,会有2个数据读不到,比如电压和电流。一天24小时每10分钟采集一次数据, 有几次就是有几项数据都是0,看了日志才发现这个问题的。 windows 7文件误删shift+delete后找回 m0_69350547: 请问怎么恢复文件 SD卡误删文件怎么恢复 yufengov: 需要恢复的卡暂时不要存入新的文件,可以用读卡器连接到电脑,再用 skyRecy 恢复里面的文件。 navicat上如何导出视图,函数等 qq_44741558: 只会复制粘贴的傻子,啥都没有 navicat上如何导出视图,函数等 zhanyue206296: