打印和導出pdf

安裝

cnpm install vue3-print-nb
cnpm install html2canvas
cnpm install jspdf

代碼

  <div class="print-preview">
    <div class="flex f-end exportBtn">
      <a-button v-print="print">打印</a-button>
      <a-button class="ml-10" @click="exportToPDF('printFrom')">導出PDF</a-button>
    </div>
    <div class="print-container">
      <div id="printFrom">
        <h3 class="title">員工入職登記表</h3>
        <div class="flex f-between">
          <a-form-item label="公司">{{ formModel.rosterFromDetailResp?.companyStr }}</a-form-item>
          <a-form-item label="部門">{{ formModel.rosterFromDetailResp?.departmentStr }}</a-form-item>
          <a-form-item label="崗位">{{ formModel.rosterFromDetailResp?.positionStr }}</a-form-item>
          <a-form-item label="入職日期">{{ formModel.rosterFromDetailResp?.joinWorkDate }}</a-form-item>
        </div>
 </div>
 </div>
 </div>
import { ref, reactive, toRefs, onMounted } from 'vue'
import print from 'vue3-print-nb'
import html2Canvas from 'html2canvas'
import JsPDF from 'jspdf'
const print = ref({
  id: 'printFrom',//這里的id就是上面我們的打印區(qū)域id胞此,實現(xiàn)指哪打哪
  // popTitle: '', // 打印配置頁上方的標題
  extraHead: '', // 最上方的頭部文字稳衬,附加在head標簽上的額外標簽鬼譬,使用逗號分割
  preview: false, // 是否啟動預覽模式,默認是false
  previewTitle: '', // 打印預覽的標題
  previewPrintBtnLabel: '', // 打印預覽的標題下方的按鈕文本遵蚜,點擊可進入打印
  zIndex: 20002, // 預覽窗口的z-index,默認是20002车遂,最好比默認值更高
})
const exportToPDF = async (elementId) => {
  const element = document.getElementById(elementId);

  // 使用 html2canvas 將 DOM 轉(zhuǎn)換為 canvas 圖像
  const canvas = await html2Canvas(element, {
    scale: 2,
    logging: true, // 開啟日志以便調(diào)試
    ignoreElements: (el) => el.style.display === 'none' // 忽略隱藏元素
  });
  const imgData = canvas.toDataURL('image/jpeg', 0.7); // 使用 JPEG 格式

  // 獲取 canvas 的寬度和高度(單位:像素)
  const imgWidth = canvas.width;
  const imgHeight = canvas.height;

  // 定義轉(zhuǎn)換比例因子(從像素到毫米)
  const ratio = 25.4 / 96; // 1 英寸 = 25.4 mm, 默認屏幕分辨率為 96 dpi

  // 計算頁面尺寸(單位:毫米)
  const pdfWidth = imgWidth * ratio;
  const pdfHeight = imgHeight * ratio;

  // 創(chuàng)建一個新的 jsPDF 實例浊吏,動態(tài)設置頁面大小
  const orientation = pdfWidth > pdfHeight ? 'l' : 'p'; // 根據(jù)寬高比選擇方向
  const pdf = new JsPDF({
    orientation,
    unit: 'mm',
    format: [pdfWidth, pdfHeight]
  });

  // 添加白色背景,避免陰影
  pdf.setFillColor(255, 255, 255);
  pdf.rect(0, 0, pdf.internal.pageSize.getWidth(), pdf.internal.pageSize.getHeight(), 'F');

  // 添加圖像到 PDF 文檔
  // 添加圖像到 PDF 文檔時帆焕,確保寬度和高度與 PDF 頁面完全匹配
  pdf.addImage(imgData, 'PNG', 0, 0, pdf.internal.pageSize.getWidth(), pdf.internal.pageSize.getHeight());

  // 保存 PDF 文件
  pdf.save('員工入職登記表.pdf');
}

<style scoped lang="less">
.print-preview {
  padding: 10px 0;
  position: relative;

  .exportBtn {
    position: sticky;
    top: 10px;
    margin-right: 40px;
  }
}

.print-container {
  width: 100%;
  height: 100%;
  display: flex;
  flex-direction: column;
  align-items: center;
}


#printFrom {
  text-align: center;
  padding: 20px;
  background-color: #fff;
  box-shadow: 0 0 10px rgba(0, 0, 0, 0.3);
  page-break-inside: avoid;

  th,
  td {
    font-size: 14px;
    font-weight: normal;
    min-width: 100px;
    max-width: 156px;
    white-space: wrap;
    text-align: center;
    padding: 0 4px;
    height: 27px;
  }
}

/* 定義單選按鈕組的基本樣式 */
.radio-group {
  display: flex;
  align-items: center;
}

/* 隱藏原始的單選按鈕 */
input[type="radio"] {
  display: none;
}

/* 定義標簽的基礎樣式 */
label {
  position: relative;
  padding-left: 25px;
  margin-right: 20px;
  font-size: 14px;
  cursor: pointer;
  transition: all 0.3s ease;
}

/* 創(chuàng)建空心圓圈作為未選中的狀態(tài) */
label::before {
  content: "";
  display: inline-block;
  width: 16px;
  height: 16px;
  margin-right: 8px;
  position: absolute;
  left: 0;
  top: 0;
  background-color: white;
  border: 1px solid #ccc;
  border-radius: 50%;
  transition: all 0.3s ease;
}

/* 創(chuàng)建實心圓圈作為選中的狀態(tài) */
input[type="radio"]:checked+label::after {
  content: "";
  display: block;
  width: 10px;
  height: 10px;
  position: absolute;
  left: 3px;
  top: 3px;
  background-color: #3498db;
  border-radius: 50%;
  transition: all 0.3s ease;
}

@media print {
  .title {
    text-align: center;
  }

  #printFrom {
    box-shadow: none;

    th,
    td {
      min-width: 100px;
      max-width: 156px;
      white-space: wrap;
    }

  }

  input[type="radio"]:checked+label::after {
    content: "";
    display: block;
    width: 10px;
    height: 10px;
    position: absolute;
    left: 3px;
    top: 3px;
    background-color: #3498db;
    border-radius: 50%;
    transition: all 0.3s ease;
    -webkit-print-color-adjust: exact !important; //強調(diào)背景顏色
    color-adjust: exact !important; //強調(diào)背景顏色
  }



}

.ant-form-item {
  margin-bottom: 0px !important;
}
</style>

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末惭婿,一起剝皮案震驚了整個濱河市不恭,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌财饥,老刑警劉巖换吧,帶你破解...
    沈念sama閱讀 217,185評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異钥星,居然都是意外死亡沾瓦,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評論 3 393
  • 文/潘曉璐 我一進店門谦炒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來贯莺,“玉大人,你說我怎么就攤上這事宁改÷铺剑” “怎么了?”我有些...
    開封第一講書人閱讀 163,524評論 0 353
  • 文/不壞的土叔 我叫張陵还蹲,是天一觀的道長爹耗。 經(jīng)常有香客問我,道長秽誊,這世上最難降的妖魔是什么鲸沮? 我笑而不...
    開封第一講書人閱讀 58,339評論 1 293
  • 正文 為了忘掉前任琳骡,我火速辦了婚禮锅论,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘楣号。我一直安慰自己最易,他們只是感情好,可當我...
    茶點故事閱讀 67,387評論 6 391
  • 文/花漫 我一把揭開白布炫狱。 她就那樣靜靜地躺著藻懒,像睡著了一般。 火紅的嫁衣襯著肌膚如雪视译。 梳的紋絲不亂的頭發(fā)上嬉荆,一...
    開封第一講書人閱讀 51,287評論 1 301
  • 那天,我揣著相機與錄音酷含,去河邊找鬼鄙早。 笑死,一個胖子當著我的面吹牛椅亚,可吹牛的內(nèi)容都是我干的限番。 我是一名探鬼主播,決...
    沈念sama閱讀 40,130評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼呀舔,長吁一口氣:“原來是場噩夢啊……” “哼弥虐!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,985評論 0 275
  • 序言:老撾萬榮一對情侶失蹤霜瘪,失蹤者是張志新(化名)和其女友劉穎珠插,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體粥庄,經(jīng)...
    沈念sama閱讀 45,420評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡丧失,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,617評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了惜互。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片布讹。...
    茶點故事閱讀 39,779評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖训堆,靈堂內(nèi)的尸體忽然破棺而出描验,到底是詐尸還是另有隱情,我是刑警寧澤坑鱼,帶...
    沈念sama閱讀 35,477評論 5 345
  • 正文 年R本政府宣布膘流,位于F島的核電站,受9級特大地震影響鲁沥,放射性物質(zhì)發(fā)生泄漏呼股。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,088評論 3 328
  • 文/蒙蒙 一画恰、第九天 我趴在偏房一處隱蔽的房頂上張望彭谁。 院中可真熱鬧,春花似錦允扇、人聲如沸缠局。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽狭园。三九已至,卻和暖如春糊治,著一層夾襖步出監(jiān)牢的瞬間唱矛,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評論 1 269
  • 我被黑心中介騙來泰國打工井辜, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留绎谦,地道東北人。 一個月前我還...
    沈念sama閱讀 47,876評論 2 370
  • 正文 我出身青樓抑胎,卻偏偏與公主長得像燥滑,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子阿逃,可洞房花燭夜當晚...
    茶點故事閱讀 44,700評論 2 354

推薦閱讀更多精彩內(nèi)容