핵심 기능
Univer PDFs 핵심 기능은 정식 PDF Unit, 영구 편집 레이어 및 브라우저 워크벤치를 제공합니다. 가져온 PDF 콘텐츠는 원본 기준으로 유지되고, 승인된 변경 사항은 Unit 스냅샷에 저장되어 현재 문서로 렌더링됩니다.
기능
- PDF Unit 모델: 원본 문서, 페이지 구조, 리소스 및 영구 편집 의도를
IPdfUnitData에 저장합니다. - 페이지 및 요소 작업: 페이지 탐색과 삽입은 물론 편집 가능한 텍스트, 목록, 표, 이미지, 구분선 및 주석을 지원합니다.
- 브라우저 워크벤치: PDF 페이지 렌더링, 미리 보기, 선택, 편집 컨트롤, 클립보드 동작 및 검사기 UI를 제공합니다.
- 명령 파이프라인: 승인된 변경 사항을 영구 명령과 변형 배치로 적용하여 저장, 실행 취소 및 다시 실행이 하나의 모델을 공유합니다.
- Facade API: PDF, 페이지, 요소 및 네이티브 텍스트 객체를 통해 PDF Unit을 생성, 조회, 편집 및 저장합니다.
플러그인 모드
설치
pnpm add @univerjs/core @univerjs/design @univerjs/ui @univerjs-pro/license @univerjs-pro/pdfs @univerjs-pro/pdfs-uinpm install @univerjs/core @univerjs/design @univerjs/ui @univerjs-pro/license @univerjs-pro/pdfs @univerjs-pro/pdfs-uiyarn add @univerjs/core @univerjs/design @univerjs/ui @univerjs-pro/license @univerjs-pro/pdfs @univerjs-pro/pdfs-uibun add @univerjs/core @univerjs/design @univerjs/ui @univerjs-pro/license @univerjs-pro/pdfs @univerjs-pro/pdfs-ui사용법
import { UniverLicensePlugin } from '@univerjs-pro/license'import { UniverPdfsPlugin } from '@univerjs-pro/pdfs'import { UniverPdfsUIPlugin } from '@univerjs-pro/pdfs-ui'import PdfsUIEnUS from '@univerjs-pro/pdfs-ui/locale/en-US'import { LocaleType, mergeLocales, Univer } from '@univerjs/core'import { FUniver } from '@univerjs/core/facade'import DesignEnUS from '@univerjs/design/locale/en-US'import { UniverUIPlugin } from '@univerjs/ui'import UIEnUS from '@univerjs/ui/locale/en-US'import '@univerjs-pro/pdfs/facade'import '@univerjs/design/lib/index.css'import '@univerjs/ui/lib/index.css'import '@univerjs-pro/pdfs-ui/lib/index.css'const univer = new Univer({ locale: LocaleType.EN_US, locales: { [LocaleType.EN_US]: mergeLocales(DesignEnUS, UIEnUS, PdfsUIEnUS), },})univer.registerPlugin(UniverUIPlugin, { container: 'app' })univer.registerPlugin(UniverLicensePlugin, { license: process.env.CLIENT_LICENSE_TEXT,})univer.registerPlugin(UniverPdfsPlugin)univer.registerPlugin(UniverPdfsUIPlugin)const univerAPI = FUniver.newAPI(univer)const pdf = univerAPI.createPdf({ name: 'Untitled PDF' })UniverPdfsPlugin은 PDF Unit과 영구 명령을 담당하고, UniverPdfsUIPlugin은 브라우저 뷰어와 편집 컨트롤을 담당합니다. 보기 전용 UI에는 { editor: { enabled: false } }를 지정하세요. 협업 기반 애플리케이션은 필요한 협업 플러그인과 함께 @univerjs-pro/pdfs-editor를 추가할 수 있습니다.
프리셋 모드
Univer PDFs는 현재 프리셋 패키지를 제공하지 않습니다. PDF 애플리케이션은 플러그인 모드로 만드세요.
편집 및 보기 컨트롤
시작 리본에는 복사, 잘라내기, 붙여넣기, 도구 모드 및 주석 도구가 있습니다. 삽입에서는 페이지, 텍스트 상자, 단락, 목록, 표, 이미지 및 구분선을 추가합니다. 보기에서는 배율, 전체 화면, 주석 표시 및 연속 스크롤을 제어합니다. 텍스트나 표를 선택하면 속성 패널과 표 스타일 등 상황별 컨트롤이 나타납니다. 리본을 사용하려면 UniverPdfsUIPlugin의 기본 editor.enabled: true를 유지하세요.
메뉴 순서와 그리드 레이아웃
기존 UniverUIPlugin 등록에서 menu와 ribbonType을 설정합니다. 공통 UI 옵션이므로 UniverPdfsUIPlugin에 전달하지 않습니다. 다음 예제는 PDFs의 실제 메뉴 항목 ID를 사용합니다.
초기 설정
import type { MenuConfig } from '@univerjs/ui'import { UniverUIPlugin } from '@univerjs/ui'const menu: MenuConfig = { 'ribbon.view': { order: -1 }, 'ribbon.start.layout': { order: -1 }, 'pdf.menu.tool.highlight': { order: 1, gridLayout: { row: 2, column: 1 }, }, 'pdf.menu.tool.ink': { order: 0, gridLayout: { row: 1, column: 1 }, },}univer.registerPlugin(UniverUIPlugin, { container: 'app', ribbonType: 'grid', menu })order는 같은 계층의 탭, 그룹 또는 메뉴 항목을 오름차순으로 정렬하며 항목을 다른 그룹으로 옮기지는 않습니다. 메뉴 항목 ID는 data-u-command 속성에서 확인할 수 있습니다. 명령 ID와 같다고 가정하지 마세요.
실행 중 업데이트
@univerjs/ui/facade를 가져온 후 FUniver.newAPI(univer)로 univerAPI를 생성합니다. updateMenuConfig()는 변경 사항을 병합하고 지정하지 않은 필드를 유지하며 메뉴를 갱신합니다. 이후 등록되는 메뉴에도 설정이 적용됩니다.
import '@univerjs/ui/facade'univerAPI.updateMenuConfig({ 'pdf.menu.tool.highlight': { gridLayout: { row: 2, column: 1, showLabel: true, width: 96 } },})gridLayout은 그리드 Ribbon에만 적용됩니다. 각 그룹은 두 행이며 row와 column은 1부터 시작합니다. 명시적 좌표가 위치를 결정하므로 사용 중인 셀을 교환할 때는 order만 바꾸지 말고 두 항목을 함께 업데이트하세요. 지정하지 않은 선택 필드는 기존 설정이나 Schema를 유지합니다. 행·열 확장, 레이블, 너비와 아이콘 크기는 IRibbonGridLayout을 참고하세요.
UniverPdfsUIPlugin의 편집 기능을 활성화하세요. editor.enabled: false이면 해당 제품의 Ribbon을 등록하지 않습니다. 메뉴 재정의 설정은 등록되지 않은 버튼을 생성하지 않습니다.
사용자 정의 버튼과 하위 메뉴 진입점도 createMenu(), createSubmenu()에 order와 gridLayout을 전달하고 appendTo()로 등록할 수 있습니다. 팝업 내부에는 Ribbon 그리드 레이아웃이 적용되지 않습니다.
이 가이드는 어떠셨나요?