Я пытаюсь распечатать содержимое редактора 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 {}
или чего-то в этом роде, чтобы распечатать тот же стиль?
Оказывается, моя проблема заключалась в том, что я случайно оставил CSS Bootstrap в элементе стиля заголовка HTML. @media print
Bootstrap противоречит дизайну печати TinyMCE. После удаления CSS Bootstrap я мог затем добавить необходимые стили, чтобы распечатка была такой же, как при печати из содержимого iframe-редактора TinyMCE.
Можете ли вы поделиться минимально воспроизводимым примером? Спасибо!