задний план
У команды проекта есть функция, аналогичная редактору форматированного текста, который должен поддерживать печать в браузере IE. Для решения проблемы совместимости печати требуется набор сервисов для вывода PDF по Html.
Срок действия сервера истек, чтобы увидеть эффект, вы можете напрямую клонировать его на локальный и запустить его, чтобы увидетьalexwjj / html-to-pdf😎😎😎
исследование
Существует множество решений для конвертации html в pdf, выбор зависит от конкретной ситуации.
1. Браузер Chrome поставляется с
недостаток:
- Требовать, чтобы пользователь нажимал
- Пользователям необходимо использовать поддерживаемый браузер, например chrome.
- Печать по умолчанию для глобальной печати
рекламировать: Частичная печать может относиться к моему плагину 😝😝😝:vue-iframe-print
npm install vue-iframe-print
Добавьте в DOM то, что нужно распечататьv-print
Локальная печать может быть реализована
2. html2canvas + jsPdf
Реализация может означать:Javascript конвертирует html в pdf, загружает, поддерживает несколько страниц (html2canvas и jsPDF)
недостаток:
- Совместимость плагина html2canvas в IE
- проблемы с ясностью
- проблема с пагинацией
- Проблема с обрезанием текстового изображения
3. Преобразование узлового сервера
- wkthtmltopdfМного дыр~
- phantomjsБезголовый браузер на базе webkit мало используется сообществом и давно не обновлялся, подробнее о нем можно узнать .
- Puppeteer+ Есть больше людей, использующих это решение в сообществе Headless Chrome
Выберите Яйцо + Кукольник 😉😉😉
Если вы хотите начать с нуля, вы можете обратиться к:puppeteer генерирует pdf, который полностью удовлетворяет ваши потребности
Развертывание (стук по доске)❗❗❗
Когда вы выполнили основные функции, вы радостно думаете, что остался последний шаг, а затем приближается яма~
1. Использование Puppeteer в Docker
В официальной документации говорится, что «использование безголового Chrome в Docker и его запуск могут быть сложными». В официальной документации естьРаздел устранения неполадокВы можете найти всю необходимую информацию об установке puppeteer с помощью Docker's.
Если вы устанавливаете Puppeteer на зеркало Alpine, обязательно прокрутите немного вниз, когда увидите эту часть страницы. В противном случае вы можете упустить из виду тот факт, что вы не можете запустить последнюю версию Puppeteer, а также вам необходимо отключить shm с помощью флага
const browser = await puppeteer.launch({
headless: true,
args: ['--disable-dev-shm-usage']
});
В противном случае дочерним процессам Puppeteer может не хватить памяти до нормального запуска.
2. Развернуть в CentOS
Шаг 1. Установите хром
Поскольку это непосредственно используемый пакет Puppeteer, он должен зависеть от ядра Chrome, поэтому вы запускаете проект.npm install
будет застрять наnode install.js
Здесь из-за проблем с сетью в Китае и размера хрома вам сложно развернуть его прямо на сервере.
puppeteer поддерживает локальные ссылки для установки Chrome, поэтому его можно указать вручную
Пропустить установку хрома:npm install puppeteer --ignore-scripts
Подробнее об установке Chrome см.Использование облачного сервера Alibaba (centos7) (7) Развертывание и использование PDF, экспортированного Puppeteer
Яма преследует, предупреждение~
const browser = await puppeteer.launch({
args: ['--disable-dev-shm-usage', '--no-sandbox'],
headless:true,
// linux chrome的默认安装路径
executablePath:'/opt/google/chrome/chrome'
});
Путь запуска кукловода написан здесьexecutablePath
Это путь установки Chrome под Linux.Если вы измените локальный, соответствующий путь в разных системах может отличаться ~ Я много работал, чтобы найти пакет, который очень полезен ~npm install carlo
оcarlo
, вы можете узнать:"Карло" новый Электрон?
'use strict';
const puppeteer = require('puppeteer');
const findChrome = require('../../node_modules/carlo/lib/find_chrome');
let browser = null;
module.exports = async () => {
if (!browser) {
const findChromePath = await findChrome({});
// browser = await puppeteer.launch();
browser = await puppeteer.launch({
headless: true,
// chrome的默认安装路径
executablePath: findChromePath.executablePath,
args: [
'--disable-gpu',
'--disable-dev-shm-usage',
'--disable-setuid-sandbox',
'--no-first-run',
'--no-sandbox',
'--no-zygote',
'--single-process',
],
});
}
return browser;
};
Шаг 2: Сценарий развертывания
Хотя у egg есть собственное управление процессами, здесь рекомендуется использовать pm2, в корневом каталоге проекта.
Новый файл deploy.sh
# 部署脚本
type node
npm install puppeteer --ignore-scripts
npm install
pm2 kill
# 睡眠,避免出现错误:Spawning PM2 daemon with pm2_home
sleep 2
pm2 start pm2.config.json
Новый pm2.config.json
{
"apps": [
{
"name": "html-to-pdf",
"script": "npm",
"args": "run start",
"log_date_format": "YYYY-MM-DD HH:mm:ss",
"exec_mode": "fork",
"max_memory_restart": "500M"
}
]
}
Все готово, старт! ! !
Выполнить в проекте сервераsh deploy.sh
, pm2 показывает, что запуск прошел успешно
В настоящее время проблем с сервисом нет, но возникнут другие проблемы, потому что на сервере нет библиотеки китайских шрифтов ~ Итак, сгенерированный pdf, китайские шрифты все искажены.
Шаг 3: Установите шрифты
1. Установите шрифтконфигyum -y install fontconfig
После выполнения этой команды вы можете/usr/share
Вы можете увидеть шрифты и fontconfig в папке
2. Добавьте библиотеку китайских шрифтов
- из окна
C:\Windows\Fonts
Сделайте копию шрифта внутри или просто выберите то, что вам нужно - на CentOS
/usr/share/fonts
Создать новую папку под названием китайский - Затем просто скопируйте шрифт в CentOS.
/usr/share/fonts/chinese
в - Измените права доступа к китайскому каталогу.
chmod -R 775 /usr/share/fonts/chinese
- Далее необходимо установить
ttmkfdir
Чтобы найти всю информацию о шрифтах в каталоге и создать файл fonts.scale, введите командуyum -y install ttmkfdir
- Выполните команду ttmkfdir,
ttmkfdir -e /usr/share/X11/fonts/encodings/encodings.dir
- Откройте файл конфигурации шрифта,
vi /etc/fonts/fonts.conf
, добавить следующий абзац
<!-- Font directory list -->
<dir>/usr/share/fonts</dir>
<dir>/usr/share/X11/fonts/Type1</dir>
<dir>/usr/share/X11/fonts/TTF</dir>
<dir>/usr/local/share/fonts</dir>
<dir>/usr/local/share/fonts/chinese</dir>
<dir>~/.fonts</dir>
- Очистите кеш шрифтов в памяти, fc-cache
- Взгляните на шрифты, которые вы только что добавили на свой компьютер. fc-список :lang=zh
ты закончил
В настоящее время в основном нет проблем, и проблемы, возникающие в будущем, будут снова обновлены.
Наконец: IE загружает PDF
Нужно установить адоб ридер