使用windows.print进行页面打印的一种方式

<template>
  <div>
    <el-row class="do-exam-title">
      <el-col :span="24">
        <span :key="item.itemOrder" v-for="item in answer.answerItems">
             <el-tag :type="questionCompleted(item.completed)" class="do-exam-title-tag"
                     @click="goAnchor('#question-'+item.itemOrder)">{{ item.itemOrder }}</el-tag>
        </span>
      </el-col>
    </el-row>
    <el-row class="do-exam-title-hidden">
      <el-col :span="24">
        <span :key="item.itemOrder" v-for="item in answer.answerItems">
             <el-tag class="do-exam-title-tag">{{ item.itemOrder }}</el-tag>
        </span>
      </el-col>
    </el-row>
    <el-container class="app-item-contain">
      <div id="printcontent">
        <el-header class="align-center">
          <h1>{{ form.name }}</h1>
          <div>
            <span class="question-title-padding">试卷总分:{{ form.score }}</span>
            <span class="question-title-padding">考试时间:{{ form.suggestTime }}分钟</span>
          </div>
        </el-header>
        <el-main>
          <el-form :model="form" ref="form" v-loading="formLoading" label-width="100px">
            <el-row :key="index" v-for="(titleItem,index) in form.titleItems">
              <h3>{{ titleItem.name }}</h3>
              <el-card class="exampaper-item-box" v-if="titleItem.questionItems.length!==0">
                <el-form-item :key="questionItem.itemOrder"
                              v-for="(questionItem,index) in titleItem.questionItems"
                              class="exam-question-item" label-width="50px" :id="'question-'+ questionItem.itemOrder">
                  <QuestionEdit :qType="questionItem.questionType" :question="questionItem"
                                :answer="answer.answerItems[questionItem.itemOrderNew-1]" :index="index"/>
                </el-form-item>
              </el-card>
            </el-row>
          </el-form>
        </el-main>
      </div>
    </el-container>
    <el-row class="do-align-center">
      <el-button @click="doPrint3()">打印试卷</el-button>
    </el-row>
  </div>
</template>

<script>
import {mapState, mapGetters} from 'vuex'
import {formatSeconds} from '@/utils'
import QuestionEdit from '../question/components/QuestionEdit'
import examPaperApi from '@/api/examPaper'
import examPaperAnswerApi from '@/api/examPaperAnswer'

export default {
  components: {QuestionEdit},
  data() {
    return {
      form: {},
      formLoading: false,
      answer: {
        questionId: null,
        doTime: 0,
        answerItems: []
      },
      newOrder: 0,
      timer: null,
      remainTime: 0
    }
  },
  created() {
    let id = this.$route.query.id
    let _this = this
    if (id && parseInt(id) !== 0) {
      _this.formLoading = true
      examPaperApi.select(id).then(re => {
        console.log(re.response)
        if (re.response.titleItems) {
          re.response.titleItems.forEach(t => {
            if (t.questionItems.length > 0) {
              _this.shuffle(t.questionItems)
            }
          })
        }

        _this.form = re.response

        _this.remainTime = re.response.suggestTime * 60
        _this.initAnswer()
        _this.formLoading = false
      })
    }
  },
  mounted() {

  },
  beforeDestroy() {
    window.clearInterval(this.timer)
  },
  methods: {
    shuffle(arr) {
      let len = arr.length
      for (let i = 0; i < len - 1; i++) {
        let index = parseInt(Math.random() * (len - i))
        let temp = arr[index]
        arr[index] = arr[len - i - 1]
        arr[len - i - 1] = temp
      }
      arr.forEach(a => {
        this.newOrder++
        a.itemOrderNew = this.newOrder
      })

      console.log('乱序:', arr)
      return arr
    },
    formatSeconds(theTime) {
      return formatSeconds(theTime)
    },
    questionCompleted(completed) {
      return this.enumFormat(this.doCompletedTag, completed)
    },
    goAnchor(selector) {
      this.$el.querySelector(selector).scrollIntoView({
        behavior: 'instant',
        block: 'center',
        inline: 'nearest'
      })
    },
    initAnswer() {
      this.answer.id = this.form.id
      let titleItemArray = this.form.titleItems
      for (let tIndex in titleItemArray) {
        let questionArray = titleItemArray[tIndex].questionItems
        for (let qIndex in questionArray) {
          let question = questionArray[qIndex]
          this.answer.answerItems.push({
            questionId: question.id,
            title: question.title,
            content: null,
            contentArray: [],
            completed: false,
            itemOrder: question.itemOrder
          })
        }
      }
    },
    isIE: function () {
      if (!!window.ActiveXObject || "ActiveXObject" in window) {
        return true;
      } else {
        return false;
      }
    },
    doPrint3() {

      //判断iframe是否存在,不存在则创建iframe
      var iframe = document.getElementById("print-iframe");
      var el = document.getElementById("printcontent");
      iframe = document.createElement('IFRAME');
      var doc = null;
      iframe.setAttribute("id", "print-iframe");
      iframe.setAttribute("style", "position:absolute;width:0px;height:0px;left:-500px;top:-500px;");
      document.body.appendChild(iframe);
      doc = iframe.contentWindow.document;
      //这里可以自定义样式
      // doc.write('<style media="print">@page {size: auto;margin: 0mm; } .question-title-padding {padding-left: 25px;padding-right: 25px;} .align-center {text-align: center} .exam-question-item {padding: 10px;.q-content { p { display: inline !important; } } .q-title { margin: 0px 5px; p { display: inline !important; } } .q-item-span-content { white-space: normal; p { display: inline !important; } } .question-prefix { padding-right: 20px; } .el-form-item__label { text-align: right; vertical-align: middle; float: left; color: #606266; padding: 0px; -webkit-box-sizing: border-box; box-sizing: border-box;}</style>'); //解决出现页眉页脚和路径的问题

      // doc.write('<style media="print">@page {size: auto;margin: 0mm; } .question-title-padding {padding-left: 25px;padding-right: 25px;} .align-center {text-align: center} .exam-question-item {padding: 10px; .el-form-item__label {font-size: 14px !important;}} .q-content { p { display: inline !important; } } .q-title { margin: 0px 5px; p { display: inline !important; } } .q-item-span-content { white-space: normal; line-height: 1.8; p { display: inline !important; } } .question-prefix { padding-right: 20px; font-weight: 600 !important; } .el-form-item__label { text-align: right; vertical-align: middle; float: left; font-size: 14px; color: #606266; line-height: 1.8; padding: 0px; -webkit-box-sizing: border-box; box-sizing: border-box;}</style>'); //解决出现页眉页脚和路径的问题
      doc.write('<style media="print">@page {size: auto;margin: 0mm; } .question-title-padding {padding-left: 25px;padding-right: 25px;} .align-center {text-align: center} .exam-question-item {padding: 10px; .el-form-item__label {font-size: 15px !important;}} .q-content { p { display: inline !important; } } .q-title { margin: 0px 5px; p { display: inline !important; } } .q-item-span-content { white-space: normal; p { display: inline !important; } } .question-prefix { padding-right: 20px; font-weight: 600 !important; }</style>'); //解决出现页眉页脚和路径的问题
      // doc.write('<style media="print">@page {size: auto;margin: 0mm;}</style>'); //解决出现页眉页脚和路径的问题
      doc.write('<div>' + el.innerHTML + '</div>');
      doc.close();
      iframe.contentWindow.focus();

      let that = this
      setTimeout(function () {
        // iframe.contentWindow.print();
        if (that.isIE()) {
          document.body.className += ' ext-ie';
          document.execCommand('print', true, null);
        } else {
          iframe.contentWindow.print();
        }
      }, 50)  //解决第一次样式不生效的问题
      if (navigator.userAgent.indexOf("MSIE") > 0) {
        document.body.removeChild(iframe);
      }
    }
  },
  computed: {
    ...mapGetters('enumItem', ['enumFormat']),
    ...mapState('enumItem', {
      doCompletedTag: state => state.exam.question.answer.doCompletedTag
    })
  }
}
</script>

<style lang="scss" scoped>
.align-center {
  text-align: center
}

.exam-question-item {
  padding: 10px;

  .el-form-item__label {
    font-size: 15px !important;
  }
}

.question-title-padding {
  padding-left: 25px;
  padding-right: 25px;
}
</style>

效果如图:
在这里插入图片描述
不是很喜欢,已弃用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在 JavaScript 中,可以使用 `console.log` 函数来打印文本。例如,你可以在 JavaScript 代码中写下: ``` console.log("这是要打印的文本"); ``` 这将在浏览器的控制台中打印出 "这是要打印的文本"。 要在 HTML 中使用 JavaScript 打印文本,你需要在 HTML 文件中包含 JavaScript 代码,例如: ```html <script> console.log("这是要打印的文本"); </script> ``` 注意,要查看打印的文本,你需要打开浏览器的控制台。在 Google Chrome 中,你可以使用快捷键 `Ctrl + Shift + I` 打开控制台。在 Firefox 中,你可以使用快捷键 `Ctrl + Shift + K` 打开控制台。 ### 回答2: 在Windows中,我们可以使用JavaScript打印文本。 首先,我们需要创建一个HTML页面,并在该页面中添加一个按钮元素和一个文本元素。例如: ```html <!DOCTYPE html> <html> <head> <title>打印文本示例</title> </head> <body> <button onclick="printText()">打印文本</button> <p id="output"></p> <script> function printText() { var text = "这是要打印的文本"; document.getElementById("output").innerHTML = text; } </script> </body> </html> ``` 在上面的例子中,我们创建了一个按钮,使用onclick属性绑定了一个名为printText的JavaScript函数。当按钮被点击时,该函数将被调用。 在printText函数中,我们首先定义一个变量text,将要打印的文本赋给它。然后,我们使用document.getElementById方法来获取id为"output"的文本元素,并将文本赋给它的innerHTML属性。这样就能在页面上显示我们想要打印的文本了。 当我们在浏览器中打开这个HTML页面时,会看到一个按钮和一个空的文本区域。当我们点击按钮时,就会在文本区域中显示出我们定义的文本。 这只是一个简单的例子,实际应用中可能会有更复杂的需求,但基本的原理是相同的。通过JavaScript,我们可以将文本输出到HTML页面上,实现打印文本的功能。 ### 回答3: 在Windows使用JavaScript打印文本可以通过以下几种方式实现: 1. 使用`console.log()`函数:这是最常用的打印文本的方式之一。在浏览器的开发者工具中或者Node.js环境中,可以使用该函数输出文本信息到控制台。例如: ```javascript console.log("Hello, World!"); ``` 2. 使用`alert()`函数:这是一种弹窗形式的输出文本的方式,通常用于测试和调试。在浏览器环境中,可以使用该函数弹出一个包含文本信息的对话框。例如: ```javascript alert("Hello, World!"); ``` 3. 使用`document.write()`函数:这种方式可以将文本输出到网页中,通常用于简单的动态网页生成。在网页的JavaScript脚本中,可以使用该函数将文本直接输出到网页上。例如: ```javascript document.write("Hello, World!"); ``` 以上是Windows使用JavaScript打印文本的几种常用方式。根据具体的使用场景和需求,选择适合的方法即可。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值