把 PDF 提取成 HTML 后,若想让用户在浏览器里自由重排和编辑版式,并不需要 position: absolute 或 canvas 覆盖层。提取出的 DOM 本身就是结构化的 CSS Grid 盒模型,配合 HTML5 拖放与原生 insertBefore / appendChild 调用,即可获得免费的布局重排能力。
核心思路是让浏览器原生布局引擎(CSS Grid + DOM 插入)替代 canvas 坐标覆盖层。绝对定位会破坏响应式文档流:文本编辑后元素不再重排、分栏布局塌陷、导出干净 HTML 或 Markdown 几乎不可能。而 CSS Grid 容器能原生对齐提取出的文档流。
编辑器提供双模式切换:Edit Mode 用于行内文本编辑,Selection Mode 用于布局操作。后者会切换 contentEditable、注入拖拽手柄,并支持 marquee 多选。拖放监听器直接变更 DOM 树,根据鼠标在目标元素的上半或下半决定 before 或 after 插入;多选通过 getBoundingClientRect 做重叠检测;分组操作将选中区域包裹进新的单列 grid zone。
直接编辑 HTML 时,右键元素会打开包含 Monaco 编辑器的原生 dialog。关键点在于 Monaco 需要在 dialog 绘制完成后测量容器,因此通过 requestAnimationFrame 延迟执行 layout() 与 setValue()。
这套方案已在浏览器端落地:打开 PDF Processor 拖入 PDF 即可试用,提取出的表格可交给 Table Formatter 进一步清理。Ginexys 提供 VS Code 扩展包与免安装 Web 工具,文档本地处理、不会离开机器。
#开发者 #工具 #PDF #HTML #CSSGrid #拖放 #Monaco #Ginexys #开源
@DevToolboxHub
