From ec5a00fa9484db92cb8ac4d9c52e03ad34f63ce1 Mon Sep 17 00:00:00 2001 From: hypercross Date: Fri, 27 Feb 2026 18:19:37 +0800 Subject: [PATCH] refactor: svg page --- src/components/md-deck/PrintPreview.tsx | 230 +++++++++++++----------- 1 file changed, 121 insertions(+), 109 deletions(-) diff --git a/src/components/md-deck/PrintPreview.tsx b/src/components/md-deck/PrintPreview.tsx index a170bae..2bace3c 100644 --- a/src/components/md-deck/PrintPreview.tsx +++ b/src/components/md-deck/PrintPreview.tsx @@ -179,6 +179,56 @@ export function PrintPreview(props: PrintPreviewProps) { const visibleLayers = createMemo(() => store.state.layerConfigs.filter((l) => l.visible)); + // 渲染单个卡片的 SVG 内容(使用 foreignObject) + const renderCardInSvg = (card: { data: typeof store.state.cards[0]; x: number; y: number }, pageIndex: number) => { + const cardWidth = store.state.dimensions?.cardWidth || 56; + const cardHeight = store.state.dimensions?.cardHeight || 88; + const gridOriginX = store.state.dimensions?.gridOriginX || 0; + const gridOriginY = store.state.dimensions?.gridOriginY || 0; + const gridAreaWidth = store.state.dimensions?.gridAreaWidth || cardWidth; + const gridAreaHeight = store.state.dimensions?.gridAreaHeight || cardHeight; + const fontSize = store.state.dimensions?.fontSize || 3; + + return ( + + +
+ {/* 网格区域容器 */} +
+ {/* 渲染每个 layer */} + + {(layer) => ( +
+ )} + +
+
+ + + ); + }; + return (
{/* 打印样式:根据方向设置 @page 规则 */} @@ -268,125 +318,87 @@ export function PrintPreview(props: PrintPreviewProps) {
- {/* A4 纸张预览 */} + {/* A4 纸张预览:每页都是一个完整的 SVG */}