представлять
Чтобы найти работу, мне потребовалось семь или восемь дней, чтобы заполнить мое онлайн-резюме, но я обнаружил, что никто не пришел посмотреть на эту штуку.
Честно говоря, это мой первый проект по фронтенду и бэкенду, я себя хорошо чувствую, но это никого не волнует, я, должно быть, делаю это слишком плохо, поэтому я должен изменить этот проект и добавить функции.
Новые визуализации возобновления загрузки:
рекламировать:
адрес гитхаба
Опыт работы от трех месяцев для поиска фронтенда
нормализовать
Прежде чем приступить к строительству, нужно подумать, что вы делаете, если у вас нет контакта со стандартизированным процессом разработки крупных компаний, вам придется составить его самостоятельно.
Если вы знаете, как стандартизировать разработку, надеюсь, вы дадите мне несколько ссылок в комментариях ниже :smile_cat:
Создать задачу
Подумай, что теперь делать, поставь соответствующий Issue и добавь соответствующие теги TODO и Feature, найди обработчик этой функции, добавь в соответствующий Канбан
Изменить канбан
Добавьте все запросы в To do и переместите те, которые должны быть обработаны немедленно, в In progress.
создать ветку
Чтобы подготовиться к рабочему процессу Github Flow, сначала создайте ветку и клонируйте ее локально.
git branch -av
# 创建本地分支并建立关联
git checkout -b feature/download_pdf origin/feature/download_pdf
развитие функции
Установить зависимости
Я выбрал идею 1, используя холст для реализации и установки связанных зависимостей.
npm i html2canvas -S
npm i jspdf -S
Функция регистрации
Эта функция будет зарегистрирована как глобальный плагин для вызова, согласно кастому, поместите его вplugins
Под папкой вводим зависимости, регистрируем набор и запускаем:
// 创建插件 pdf.js
// 引入依赖
import Vue from "vue";
import html2canvas from "html2canvas";
import jspdf from "jspdf";
const PDF = {};
// eslint-disable-next-line no-unused-vars
PDF.install = function(Vue, options) {
Vue.prototype.$pdf = function() {
// eslint-disable-next-line no-console
console.log("hello pdf");
};
};
Vue.use(PDF);
export default PDF;
// 在 main.js 中注册插件
import "./plugins/pdf";
// 在对应的地方触发方法
this.$pdf(); // hello world
Преобразовать в холст
Во-первых, вам нужно преобразовать HTML в Canvas, посмотритеhtml2canvas
Как это обрабатывается:
Очень простой синтаксис, просто получите DOM.
Добавить атрибут ссылки
<share-page v-if="!shareLoading" ref="pdfPage"></share-page>
Передайте DOM в триггерное событие
<script>
export default {
methods: {
download() {
this.$pdf(this.$refs.pdfPage.$el);
}
}
}
</script>
Результаты теста DOM
Vue.prototype.$pdf = function(dom) {
// eslint-disable-next-line no-console
console.log(dom); // 得到期望结果
};
использоватьhtml2canvas
Vue.prototype.$pdf = function(dom) {
html2canvas(dom).then(canvas => {
dom.appendChild(canvas);
});
};
Перейдите на страницу для просмотра, вы можете получить идеальный холст
Распечатать в PDF
Следующим шагом будет его обработка в pdf, и посмотрите как он обрабатывается на официальном сайте:
Это кажется очень простым, предоставьте изображение (base64), а затем его можно сгенерировать. Мы знаем, что холст можно преобразовать в изображение (base64). Формат изображения, приведенный в примере,jpeg
, Холст также рассматривается какjpeg
:
html2canvas(dom).then(canvas => {
const jpeg = canvas.toDataURL("image/jpeg");
const doc = new JsPDF();
doc.setFontSize(40);
doc.text(35, 25, "简历");
doc.addImage(jpeg, "JPEG", 15, 40, 180, 160);
doc.save("简历");
});
Хорошо, давайте проверим результаты:
Резюме сформировано, но что-то не так, посмотритеДокументацияСделайте это снова:
html2canvas(dom).then(canvas => {
const [AWidth, AHeight] = [595.28, 841.89]; // a4
const { width: CWidth, height: CHeight } = canvas;
const PWidth = AWidth;
const PHeight = (AWidth / CWidth) * CHeight;
const jpeg = canvas.toDataURL("image/jpeg", 1.0);
const doc = new JsPDF("", "pt", "a4");
doc.addImage(jpeg, "JPEG", 0, 0, PWidth, PHeight);
doc.save("简历");
});
Одна операция обнаружила, что длина резюме превышаетa4
высоту бумаги, затем добавьте к ней еще одну страницу, здесьСсылаться на:
Vue.prototype.$pdf = function(dom, user) {
html2canvas(dom).then(canvas => {
const [AWidth, AHeight] = [595.28, 841.89]; // a4
let position = 0;
let { width: CWidth, height: CHeight } = canvas;
const PWidth = AWidth;
const PHeight = (AWidth / CWidth) * CHeight;
const jpeg = canvas.toDataURL("image/jpeg", 1.0);
const doc = new JsPDF("", "pt", "a4");
if (CHeight < PHeight) {
doc.addImage(jpeg, "JPEG", 0, 0, PWidth, PHeight);
} else {
while (CHeight > 0) {
doc.addImage(jpeg, "JPEG", 0, position, PWidth, PHeight);
CHeight -= PHeight;
position -= AHeight;
if (CHeight > 0) {
doc.addPage();
}
}
}
doc.save(user);
});
Ну вот и все, успешные результаты показаны во введении.
Наконец, зафиксируйте, просмотрите, объедините ветки и выпустите код.
Bug
Это можно расценивать только как нежелание доделывать, а непрерывный контент будет отделяться при разбиении, что займет много времени...