Мужик, ты же понимаешь, что ты не можешь сделать настоящий скриншот страницы с помощью клиентского кода - это бы была огромная дыра в безопасности.
Все эти библитеки рисуют страницу заново в рамках pdf, пытаясь попасть максимально близко. Со сложными вещами типа карты - это не работет и работать не будет.
У тебя три варианта:
1. Использовать window.print() и научить юзера использовать стандартный функционал печати браузера. Браузер прекрасно всё распечатает сам как надо. Разве что со своей стороны тебе придётся немного пофиксить css под media print. Это предпочтительный вариант.
2. Заморачиваться и ручками получать как-то карту в виде картинки и вставлять руками же в pdf. Это не сложно если карта на canvas, иначе - хз.
3. Сделать бэкэнд сервис-принтер, который будет выдавать pdf(используя под капотом тот же браузерный принтер).
Смотри, я прописал вот такой useEffect у себя в компоненте, но с ним печатается все, кроме карты. На месте карты у меня просто серый прямоугольник. Не знаешь в чем проблема?
useEffect(() => {
if (isOpen && mark) {
const printContent = printRef.current;
if (printContent) {
toPng(printContent).then((imgData) => {
const pdf = new jsPDF('landscape', 'mm', 'a4');
const imgProps = pdf.getImageProperties(imgData);
const pdfWidth = pdf.internal.pageSize.getWidth();
const pdfHeight = (imgProps.height * pdfWidth) / imgProps.width;
pdf.addImage(imgData, 'PNG', 0, 0, pdfWidth, pdfHeight);
pdf.autoPrint(); // Запускает печать сразу после создания PDF
window.open(pdf.output('bloburl'), '_blank');
});
}
}
}, [mark, isOpen]);
HonestDaniel,
Выясни как именно рисуется карта, поймёшь почему она не попадает на скриншот.
Попробуй не реактовский скриншот, почему-то мне кажется что он работает так-же как html в pdf.