HTML 테이블 작업을 html-to-paper
하고 vue.js에서 프린터로 테이블을 인쇄하고 있습니다. 추가 행을 추가하고 새 행을 만든 다음 인쇄를 클릭하면 테이블을 인쇄하려고하지만 테이블을 인쇄하지 않습니다. 빈 셀만 표시하는 모든 데이터
코드 App.vue
<template>
<div id="app">
<button type="button" @click="btnOnClick">Add</button>
<div id="printMe">
<table class="table table-striped table-hover table-bordered mainTable" id="Table">
<thead>
<tr>
<th class="itemName">Item Name</th>
<th>Quantity</th>
<th>Selling Price</th>
<th>Amount</th>
</tr>
</thead>
<tbody>
<tr v-for="(tableData, k) in tableDatas" :key="k">
<td>
<input class="form-control" readonly v-model="tableData.itemname" />
</td>
<td>
<input class="form-control text-right" type="text" min="0" step=".01" v-model="tableData.quantity" v-on:keyup="calculateQty(tableData)" />
</td>
<td>
<input class="form-control text-right" type="text" min="0" step=".01" v-model="tableData.sellingprice" v-on:keyup="calculateSPrice(tableData)" />
</td>
<td>
<input readonly class="form-control text-right" type="text" min="0" step=".01" v-model="tableData.amount" />
</td>
</tr>
</tbody>
</table>
</div>
<button @click="print">Print</button>
</div>
</template>
<script>
export default {
data() {
return {
tableDatas: []
}
},
methods: {
btnOnClick(v) {
this.tableDatas.push({
itemname: "item",
quantity: 1,
sellingprice: 55,
amount: 55
});
},
print() {
this.$htmlToPaper('printMe');
}
}
};
</script>
<style>
</style>
main.js
import Vue from "vue";
import App from "./App.vue";
import VueHtmlToPaper from "vue-html-to-paper";
Vue.config.productionTip = false;
Vue.use(VueHtmlToPaper);
new Vue({
render: h => h(App)
}).$mount("#app");
여기 codesandbox의 작업 코드
현상금에 따라 편집
나는 ‘html-to-paper’와 함께해야합니다. 문제는 사용하여 인쇄하기 위해 요소에 스타일을 부여 할 수 없다는 것입니다 @media print
- 대답
ux.engineer
은 괜찮지 만 브라우저 문제를 일으키는 크롬 및 파이어 폭스는 보안 문제로 인해 차단합니다.
예를 들어 코드 샌드 박스 를 확인 하십시오. 여기에는 전체 코드가 있습니다. 스타일을 지정하려고하지만 일어나지 않습니다.
html-to-print
나는 그것이 새로운 페이지에 스타일을 복용하지 않는 인쇄를 클릭하고 때 플러그인 사용은 그래서는 window.open.- 그것이 미디어 스타일을 취하지 않는 이유에 갇혀있는 곳입니다. 창에서 내 스타일을 재정의하는 방법은 무엇입니까?
답변
불행하게도이 바인딩 뷰의 데이터를 활용 할 수 mycurelabs / VUE – HTML – 투 – 종이 믹스 인 패키지 , 패키지 작성자가 여기에 명시된 바와 같이 .
그러나 여기에 사용 된 패키지를 Power-kxLee / vue-print-nb 지시문 으로 전환하여 해결 방법을 만들었습니다 .
실제 예는 다음과 같습니다. https://codesandbox.io/s/zen-sunset-2szqr
추신. 비슷한 패키지 중에서 선택하는 것은 때때로 까다로울 수 있습니다. 첫 페이지에서 사용한,보기 및 시작과 같은 리포지토리의 사용 및 활동 통계를 평가 한 다음 열기 / 닫힌 문제 및 활성 / 닫힌 풀 요청을 확인한 다음 통계로 이동하여 펄스 (1 개월)를 확인해야합니다. 코드 주파수.
이 두 가지 사이에서, 나는 더 대중적이고 적극적으로 사용되기 위해 vue-print-nb 를 선택합니다 . 또한 mixin보다 지시문을 선호 하기 때문에 .
다른 대답으로는, vue-html-to-paper를이 목적으로 사용하려면 이런 종류의 해키 솔루션이 필요할 것입니다.
답변
다른 사람들이 언급했듯이, v-model
인쇄 할 때 바인딩 된 데이터가 없기 때문에 사용하는 패키지로 는 불가능합니다. 따라서이 데이터를 HTML 안에 정적으로 가져와야합니다. 출처
해결 방법은 입력 자리 표시자를 사용하는 것입니다.
테이블에 대한 참조 를 추가하십시오 .
<tbody ref="tablebody">
이를 통해 분석법에서이 요소를 선택할 수 있습니다. 이제 인쇄 방법을 변경하십시오.
print() {
const inputs = this.$refs.tablebody.getElementsByTagName("input");
for (let input of inputs) {
input.placeholder = input.value;
}
this.$htmlToPaper("printMe");
for (let input of inputs) {
input.placeholder = "";
}
}
그런 다음 기본적으로 회색으로 보이기 때문에 자리 표시자를 CSS로 스타일을 지정할 수 있습니다.
먼저 와 같이 입력 값을 재설정 하려고 input.value = input.value
했지만 불행히도 작동하지 않았습니다.
답변
질문에 대한 새로운 현상금에 따라를 사용 하기 위해 외부 스타일 시트를 인쇄 창에로드vue-html-to-paper
하는 업데이트 된 코드 예제가 있습니다 .
먼저 외부 CDN에서 Bootstrap 스타일을로드 한 다음 공용 디렉토리에서 로컬 CSS 파일을로드합니다. 이 로컬 스타일 시트에는 !important
입력 배경색 대체를 녹색으로 대체하기 위한 스타일이 하나만 있습니다.
인쇄 옵션 배경 그래픽 이 적용된 경우 Windows의 Chrome은 녹색 배경 스타일을 입력 에 적용합니다. Windows의 Firefox에는 다른 인쇄 옵션 패널이 있으며 이러한 설정은 없습니다.
그러나 둘 다 부트 스트랩 스타일을 적어도 부분적으로 적용하므로 스타일 시트가로드되어 재생 중입니다.
이 입력 배경 스타일 문제는 브라우저가 인쇄 스타일을 처리하는 방법의 차이점을 보여주기위한 것이며이 질문의 범위를 벗어난 광범위한 주제입니다.
추신. vue-print-nb
패키지에 어떤 종류의 보안 문제가 있는지 확실하지 않지만 해결 될 수 있습니다. 최소한의 버그 재현 예제로 Github 저장소에서 문제를 열어야합니다.
해당 vue-print-nb
솔루션의 문제가 나중에 해결되고 내 답변이 업데이트 되는 경우이 답변을 별도의 항목으로 추가하십시오 .