(十一)Electron 匯入匯出檔案

一念輪迴發表於2018-08-08

主要功能:

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讀取檔案即可。

(十一)Electron 匯入匯出檔案
部落格地址: alibt.top

更多精彩,請關注我的公眾號!

相關文章