2018-07-13 07:29:57 +00:00
|
|
|
<template>
|
|
|
|
<div class="print-view">
|
|
|
|
<print-actions
|
|
|
|
v-bind:title="name"
|
2018-07-13 07:45:30 +00:00
|
|
|
@view-form="viewForm"
|
2018-07-14 11:59:55 +00:00
|
|
|
@pdf="getPDF"
|
2018-07-13 07:29:57 +00:00
|
|
|
></print-actions>
|
|
|
|
<div class="print-container">
|
|
|
|
<div class="print-template" v-html="printTemplate"></div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</template>
|
|
|
|
|
|
|
|
<script>
|
|
|
|
import { getHTML } from '../../../common/print.js';
|
|
|
|
import PrintActions from './PrintActions';
|
|
|
|
|
2018-07-15 23:47:14 +00:00
|
|
|
// for PDF in Electron
|
|
|
|
import { BrowserWindow, remote, ipcMain, ipcRenderer, shell } from 'electron'
|
|
|
|
import fs from 'fs';
|
|
|
|
|
2018-07-13 07:29:57 +00:00
|
|
|
export default {
|
|
|
|
name: 'PrintView',
|
|
|
|
props: ['doctype', 'name'],
|
|
|
|
data() {
|
|
|
|
return {
|
|
|
|
printTemplate: '',
|
|
|
|
}
|
|
|
|
},
|
|
|
|
components: {
|
|
|
|
PrintActions: PrintActions
|
|
|
|
},
|
|
|
|
async created(vm) {
|
|
|
|
this.printTemplate = await getHTML(this.doctype, this.name);
|
|
|
|
},
|
2018-07-13 07:45:30 +00:00
|
|
|
methods: {
|
|
|
|
viewForm() {
|
|
|
|
this.$router.push(`/edit/${this.doctype}/${this.name}`);
|
|
|
|
},
|
2018-07-14 11:59:55 +00:00
|
|
|
|
2018-07-15 23:47:14 +00:00
|
|
|
getPDF() {
|
|
|
|
// const win = BrowserWindow.fromWebContents()
|
|
|
|
const win = remote.getCurrentWindow();
|
|
|
|
const filePath = '/Users/prateekshasingh/Desktop/test';
|
|
|
|
const extension = '.pdf';
|
|
|
|
const data = this.printTemplate;
|
|
|
|
const type = 'pdf';
|
|
|
|
|
|
|
|
let mindow = new remote.BrowserWindow({
|
|
|
|
width: 800,
|
|
|
|
height: 600,
|
|
|
|
center: true,
|
|
|
|
resizable: true,
|
|
|
|
frame: true,
|
|
|
|
transparent: false,
|
|
|
|
});
|
|
|
|
mindow.setMenu(null);
|
|
|
|
|
|
|
|
// create BrowserWindow with dynamic HTML content
|
|
|
|
var html = [
|
|
|
|
"",
|
|
|
|
"<body>",
|
|
|
|
"<h1>It works</h1>",
|
|
|
|
"</body>",
|
|
|
|
].join("");
|
|
|
|
mindow.loadURL("data:text/html;charset=utf-8," + encodeURI(this.printTemplate));
|
|
|
|
|
|
|
|
mindow.openDevTools();
|
|
|
|
mindow.on("closed", function() {
|
|
|
|
mindow = null;
|
|
|
|
});
|
|
|
|
|
|
|
|
const writeFile = (pathname, content, extension) => {
|
|
|
|
if (!pathname) {
|
|
|
|
const errMsg = '[ERROR] Cannot save file without path.'
|
|
|
|
return Promise.reject(errMsg)
|
|
|
|
}
|
|
|
|
pathname = !extension || pathname.endsWith(extension) ? pathname : `${pathname}${extension}`
|
|
|
|
|
|
|
|
console.log(content);
|
|
|
|
return fse.outputFile(pathname, content, 'utf-8')
|
|
|
|
}
|
|
|
|
|
|
|
|
win.webContents.printToPDF({ printBackground: false }, (err, data) => {
|
|
|
|
if (err) log(err)
|
|
|
|
else {
|
|
|
|
writeFile(filePath, data, extension)
|
|
|
|
.then(() => {
|
|
|
|
win.webContents.send('AGANI::export-success', { type, filePath })
|
|
|
|
})
|
|
|
|
// .catch(log)
|
|
|
|
}
|
|
|
|
})
|
|
|
|
|
|
|
|
printPDFBtn.addEventListener('click', (event) => {
|
|
|
|
ipcRenderer.send('print-to-pdf')
|
|
|
|
})
|
|
|
|
|
|
|
|
ipcRenderer.on('wrote-pdf', (event, path) => {
|
|
|
|
const message = `Wrote PDF to: ${path}`
|
|
|
|
document.getElementById('pdf-path').innerHTML = message
|
|
|
|
})
|
|
|
|
|
|
|
|
ipcMain.on('print-to-pdf', (event) => {
|
|
|
|
const pdfPath = path.join(os.tmpdir(), 'print.pdf')
|
|
|
|
const win = BrowserWindow.fromWebContents(event.sender)
|
|
|
|
// Use default printing options
|
|
|
|
win.webContents.printToPDF({}, (error, data) => {
|
|
|
|
if (error) throw error
|
|
|
|
fs.writeFile(pdfPath, data, (error) => {
|
|
|
|
if (error) throw error
|
|
|
|
shell.openExternal(`file://${pdfPath}`)
|
|
|
|
event.sender.send('wrote-pdf', pdfPath)
|
|
|
|
})
|
|
|
|
})
|
|
|
|
})
|
|
|
|
|
|
|
|
// await getPDFClient(this.doctype, this.name);
|
2018-07-14 11:59:55 +00:00
|
|
|
}
|
2018-07-13 07:45:30 +00:00
|
|
|
}
|
2018-07-13 07:29:57 +00:00
|
|
|
}
|
|
|
|
</script>
|
|
|
|
|
|
|
|
<style lang="scss">
|
|
|
|
@import "../../styles/variables";
|
|
|
|
|
|
|
|
.print-container {
|
2018-07-15 23:47:14 +00:00
|
|
|
padding: 1rem 5rem;
|
2018-07-13 07:29:57 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
.print-template {
|
|
|
|
padding: 1rem;
|
|
|
|
background-color: $white;
|
|
|
|
box-shadow: 0rem 0rem 0.5rem rgba(0,0,0,0.2);
|
|
|
|
}
|
|
|
|
|
|
|
|
.print-view {}
|
|
|
|
|
|
|
|
</style>
|