Как сохранить стили печати TinyMCE, когда контент находится за пределами редактора

Я пытаюсь распечатать содержимое редактора React TinyMCE с помощью конвертера HTML в PDF, но когда я извлекаю содержимое и устанавливаю его на собственной странице, стиль сильно отличается. Он сохраняет часть стиля, но не весь.

Если я нажму ctrl + p в редакторе, он отлично сработает и будет оформлен в виде документа. Но когда я использую puppeteer для печати веб-страницы в формате PDF, она распечатывает всю страницу, включая содержимое оболочки (панели инструментов, меню и т. д.), и не применяет к содержимому приятный стиль по умолчанию.

Я попытался извлечь и отобразить содержимое примерно так:

import { useRef, useState } from "react"
import { Editor } from "@tinymce/tinymce-react"
import classNames from "classnames"

const TextEditor = (props) => {

   const ref = useRef(null);
   const [editorContent, setEditorContent] = useState(null);
   return <>
   {editorContent &&
      <div className = "mce-content-body" dangerouslySetInnerHTML = {{"__html": editorContent.innerHTML}}></div>
   }
   <form className = {classNames([{"d-none": editorContent !== null}])}>
      <Editor
          tinymceScriptSrc = {process.env.PUBLIC_URL + "/tinymce/tinymce.min.js"}
          onInit = {(evt, editor) => {
             ref.current = editor;
             setEditorContent(ref.current.getBody());
          }}
          initialValue = {props.initialContent}
          init = {{
             height: "100%",
             menubar: true,
             plugins: ["print"],
             toolbar: "print",
             content_style: `
                body {
                    font-family: Verdana,Helvetica,Arial,sans-serif;
                    font-size: 12pt;
                }
                @media screen {
                    body {
                       padding-left: 1.4in;
                       padding-right: 1.4in;
                    }
                }
                @media print {
                   body {
                      padding-left: 0.8in;
                      padding-right: 0.8in;
                      caret-color: transparent;
                   }
                   @page {
                      margin-top: 0.75in;
                      margin-bottom: 0.75in;
                   }
                }
             `,
             content_css: "document"
          }}
      />
   </form>
<>
}

и я немного поигрался с классами, чтобы убедиться, что я добавил skin.min.css, content.min.css и т. д., но мне до сих пор не удалось обмануть браузер, заставив его поверить, что он должен выглядеть так же, как если бы пользователь нажал Ctrl + P на содержимом редактора.

Мне не хватает каких-то скрытых @media print {} или чего-то в этом роде, чтобы распечатать тот же стиль?

Можете ли вы поделиться минимально воспроизводимым примером? Спасибо!

ggorlen 02.05.2024 04:09
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
0
1
130
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Оказывается, моя проблема заключалась в том, что я случайно оставил CSS Bootstrap в элементе стиля заголовка HTML. @media print Bootstrap противоречит дизайну печати TinyMCE. После удаления CSS Bootstrap я мог затем добавить необходимые стили, чтобы распечатка была такой же, как при печати из содержимого iframe-редактора TinyMCE.

Другие вопросы по теме