# 인쇄

- Human documentation: [https://docs.univer.ai/ko-KR/guides/sheets/features/print](https://docs.univer.ai/ko-KR/guides/sheets/features/print)

- Agent Markdown: [https://docs.univer.ai/ko-KR/guides/sheets/features/print.md](https://docs.univer.ai/ko-KR/guides/sheets/features/print.md)

- Requested language: `ko-KR`

- Content language: `ko-KR`

- Documentation version: `1.0.4`

- Source: [sheets/features/print.ko-KR.mdx](https://github.com/dream-num/documentation/blob/dev/content/guides/sheets/features/print.ko-KR.mdx)

---

#### Package metadata

```json
{
  "mobile": true,
  "preset": [
    {
      "client": "@univerjs/preset-sheets-advanced",
      "locale": "@univerjs/preset-sheets-advanced/locales/ko-KR",
      "style": "@univerjs/preset-sheets-advanced/lib/index.css"
    }
  ],
  "plugins": [
    {
      "client": "@univerjs-pro/sheets-print",
      "facade": "@univerjs-pro/sheets-print/facade",
      "locale": "@univerjs-pro/sheets-print/locale/ko-KR",
      "style": "@univerjs-pro/sheets-print/lib/index.css"
    }
  ],
  "license": true,
  "server": false
}
```

인쇄 기능을 사용하면 스프레드시트 내용을 종이 문서로 인쇄하거나 PDF 형식으로 내보내 오프라인에서 확인하고 공유할 수 있습니다.

> Interactive example: [Open the playground](/playground/sheets/print)

## 플러그인 모드

### 설치

#### npm

```bash
npm install @univerjs-pro/sheets-print
```

#### pnpm

```bash
pnpm add @univerjs-pro/sheets-print
```

#### yarn

```bash
yarn add @univerjs-pro/sheets-print
```

#### bun

```bash
bun add @univerjs-pro/sheets-print
```

### 사용법

```typescript
import { UniverSheetsPrintPlugin } from '@univerjs-pro/sheets-print' // [!code ++]
import SheetsPrintPluginEnUS from '@univerjs-pro/sheets-print/locale/en-US' // [!code ++]
import { LocaleType, mergeLocales, Univer } from '@univerjs/core'
import '@univerjs-pro/sheets-print/lib/index.css' // [!code ++]

const univer = new Univer({
  locale: LocaleType.EN_US,
  locales: {
    [LocaleType.EN_US]: mergeLocales(
      SheetsPrintPluginEnUS, // [!code ++]
    ),
  },
})

univer.registerPlugin(UniverSheetsPrintPlugin) // [!code ++]
```

Univer 상용 라이선스가 있다면 [클라이언트에서 라이선스 사용하기](https://docs.univer.ai/ko-KR/server/license.md#in-plugin-mode)를 참고하여 설정하세요.

### 플러그인 및 구성

```typescript
interface IUniverSheetsPrintConfig {
  /**
   * Whether to force the watermark to be displayed when printing
   * @default false
   */
  enforceWatermark?: boolean
}
```

## 모바일 지원

먼저 [모바일 에디터](https://docs.univer.ai/ko-KR/guides/sheets/getting-started/installation.md#mobile-support)를 구성하세요. 이 페이지의 플러그인 모드 초기화 코드에서 아래 데스크톱 등록을 같은 패키지의 모바일 버전으로 바꾸고 **문서를 열기 전에** 완료하세요. 모델 플러그인, 스타일, 언어 파일과 Facade 가져오기는 유지하며 두 버전을 동시에 등록하지 마세요.

| 패키지                          | 데스크톱 등록                   | 모바일 등록                            |
| ---------------------------- | ------------------------- | --------------------------------- |
| `@univerjs-pro/sheets-print` | `UniverSheetsPrintPlugin` | `UniverSheetsPrintMobileUIPlugin` |

## 프리셋 모드

인쇄 기능은 `@univerjs/preset-sheets-advanced` 프리셋에 포함되어 있습니다.

### 설치

> [!NOTE]
> `@univerjs/preset-sheets-advanced`의 `UniverSheetsAdvancedPreset` 프리셋은 런타임에 `UniverSheetsDrawingPreset`
> 프리셋을 사용합니다. 먼저 `@univerjs/preset-sheets-drawing`을 설치하세요.

#### npm

```bash
npm install @univerjs/preset-sheets-drawing @univerjs/preset-sheets-advanced
```

#### pnpm

```bash
pnpm add @univerjs/preset-sheets-drawing @univerjs/preset-sheets-advanced
```

#### yarn

```bash
yarn add @univerjs/preset-sheets-drawing @univerjs/preset-sheets-advanced
```

#### bun

```bash
bun add @univerjs/preset-sheets-drawing @univerjs/preset-sheets-advanced
```

### 사용법

```typescript
import { UniverSheetsAdvancedPreset } from '@univerjs/preset-sheets-advanced' // [!code ++]
import UniverPresetSheetsAdvancedEnUS from '@univerjs/preset-sheets-advanced/locales/en-US' // [!code ++]
import { UniverSheetsCorePreset } from '@univerjs/preset-sheets-core'
import UniverPresetSheetsCoreEnUS from '@univerjs/preset-sheets-core/locales/en-US'
import { UniverSheetsDrawingPreset } from '@univerjs/preset-sheets-drawing' // [!code ++]
import UniverPresetSheetsDrawingEnUS from '@univerjs/preset-sheets-drawing/locales/en-US' // [!code ++]
import { createUniver, LocaleType, mergeLocales } from '@univerjs/presets'
import '@univerjs/preset-sheets-core/lib/index.css'
import '@univerjs/preset-sheets-drawing/lib/index.css' // [!code ++]
import '@univerjs/preset-sheets-advanced/lib/index.css' // [!code ++]

const { univerAPI } = createUniver({
  locale: LocaleType.EN_US,
  locales: {
    [LocaleType.EN_US]: mergeLocales(
      UniverPresetSheetsCoreEnUS,
      UniverPresetSheetsDrawingEnUS, // [!code ++]
      UniverPresetSheetsAdvancedEnUS, // [!code ++]
    ),
  },
  presets: [
    UniverSheetsCorePreset(),
    UniverSheetsDrawingPreset(), // [!code ++]
    UniverSheetsAdvancedPreset(), // [!code ++]
  ],
})
```

Univer 상용 라이선스가 있다면 [클라이언트에서 라이선스 사용하기](https://docs.univer.ai/ko-KR/server/license.md#in-preset-mode)를 참고하여 설정하세요.

### 프리셋 및 구성

```typescript
interface IUniverSheetsAdvancedPresetConfig {
  print?: Partial<IUniverSheetsPrintConfig>
}

interface IUniverSheetsPrintConfig {
  /**
   * Whether to force the watermark to be displayed when printing
   * @default false
   */
  enforceWatermark?: boolean
}
```

## Facade API

### 가져오기

> [!INFO: 플러그인 모드 참고 사항]
> Facade 패키지를 직접 가져와야 하는 것은 플러그인 모드뿐입니다. 프리셋 모드에는 해당 Facade 패키지가 이미 포함되어
> 있으므로 별도로 가져올 필요가 없습니다.

```typescript
import '@univerjs-pro/sheets-print/facade'
```

### 인쇄 구성 대화 상자 열기

`FWorkbook.openPrintDialog`를 사용하면 인쇄 구성 대화 상자를 열 수 있습니다.

```typescript
const fWorkbook = univerAPI.getActiveWorkbook()

fWorkbook.openPrintDialog()
```

### 인쇄 구성 대화 상자 닫기

`FWorkbook.closePrintDialog` 메서드를 사용하면 인쇄 구성 대화 상자를 닫을 수 있습니다.

```typescript
const fWorkbook = univerAPI.getActiveWorkbook()
fWorkbook.openPrintDialog()

// Close the print configuration dialog after 3 seconds
setTimeout(() => {
  fWorkbook.closePrintDialog()
}, 3000)
```

### 인쇄 레이아웃 구성 업데이트

[`FWorkbook.updatePrintConfig(config: ISheetPrintLayoutConfig)`](https://docs.univer.ai/ko-KR/reference/facade/workbook.md#updateprintconfig) 메서드로 인쇄 레이아웃 구성을 업데이트합니다.

```typescript
const fWorkbook = univerAPI.getActiveWorkbook()
const fWorksheet = fWorkbook.getActiveSheet()
const subUnitId = fWorksheet.getSheetId()

// Update print layout config
fWorkbook.updatePrintConfig({
  area: univerAPI.Enum.PrintArea.CurrentSheet, // print current sheet
  subUnitIds: [subUnitId],
  paperSize: univerAPI.Enum.PrintPaperSize.A4, // A4 paper size
  scale: univerAPI.Enum.PrintScale.FitPage, // fit content to page
  freeze: [univerAPI.Enum.PrintFreeze.Row], // freeze row headers
  margin: univerAPI.Enum.PrintPaperMargin.Normal, // normal margin
  // ... other settings
})

// Start printing with the updated configuration
fWorkbook.print()
```

전체 구성 타입과 매개변수는 다음을 참고하세요: [`FWorkbook.updatePrintConfig()`](https://docs.univer.ai/ko-KR/reference/facade/workbook.md#updateprintconfig).

### 인쇄 렌더링 구성 업데이트

[`FWorkbook.updatePrintRenderConfig(config: ISheetPrintRenderConfig)`](https://docs.univer.ai/ko-KR/reference/facade/workbook.md#updateprintrenderconfig) 메서드로 인쇄 렌더링 구성을 업데이트합니다.

```typescript
const fWorkbook = univerAPI.getActiveWorkbook()

// Update print layout config by default
fWorkbook.updatePrintConfig({})

// Update print render config
fWorkbook.updatePrintRenderConfig({
gridlines: true, // show gridlines
hAlign: univerAPI.Enum.PrintAlign.Middle, // horizontal align middle
vAlign: univerAPI.Enum.PrintAlign.Middle, // vertical align middle
headerFooter: [ // the array of header and footer elements to include, here is page numbers and worksheet name
  univerAPI.Enum.PrintHeaderFooter.PageSize,
  univerAPI.Enum.PrintHeaderFooter.WorksheetTitle,
],
// ... other settings
})

// Start print
fWorkbook.print()
```

전체 구성 타입과 매개변수는 다음을 참고하세요: [`FWorkbook.updatePrintRenderConfig()`](https://docs.univer.ai/ko-KR/reference/facade/workbook.md#updateprintrenderconfig).

### 인쇄

`FWorkbook.print` 메서드를 사용하면 인쇄 대화 상자를 바로 열 수 있습니다.

```typescript
// Using the default configuration you can pass in an empty object
workbook.updatePrintConfig({
// ... Print layout configuration
})
workbook.updatePrintRenderConfig({
// ... Print render configuration
})
workbook.print()
```

### 스크린샷을 클립보드에 저장

`FWorkbook.saveScreenshotToClipboard` 메서드를 사용하면 인쇄 데이터 이미지를 클립보드에 저장할 수 있습니다.

이 기능은 [라이선스](https://docs.univer.ai/ko-KR/server/license.md)가 있어야 사용할 수 있습니다. 라이선스가 없는 사용자는 이용에 제한을 받으며 저장 작업은 `false`를 반환합니다.

Clipboard API를 사용하여 이미지를 클립보드에 저장하므로 보안되지 않은 네트워크 환경이나 지원되지 않는 브라우저에서는 실패할 수 있습니다. 저장에 성공하면 `true`를 반환합니다.

```typescript
const fWorkbook = univerAPI.getActiveWorkbook()
const result = await fWorkbook.saveScreenshotToClipboard()
```

### 선택 범위의 스크린샷 가져오기

`FRange.getScreenshot` 메서드를 사용하면 선택한 인쇄 데이터의 스크린샷을 가져올 수 있습니다.

이 기능은 [라이선스](https://docs.univer.ai/ko-KR/server/license.md)가 있어야 사용할 수 있습니다. 라이선스가 없는 사용자는 이용에 제한을 받으며 작업에 실패하면 `false`, 성공하면 이미지의 base64 문자열을 반환합니다.

```typescript
const fWorkbook = univerAPI.getActiveWorkbook()
const fWorksheet = fWorkbook.getActiveSheet()
const fRange = fWorksheet.getRange('A1:D10')
fRange.getScreenshot()
fRange.getScreenshot({ includeHeaders: true }) // Include row and column headers
```

### 이벤트 리스너

인쇄 기능에서 사용할 수 있는 이벤트는 다음과 같습니다.

`univerAPI.Event.BeforeSheetPrintOpen` 이벤트는 인쇄 구성 대화 상자가 열리기 전에 발생합니다.

```typescript
const disposable = univerAPI.addEvent(univerAPI.Event.BeforeSheetPrintOpen, (params) => {
  const { workbook, worksheet } = params

  // Cancel open print configuration dialog operation
  params.cancel = true
})

// Remove the event listener, use `disposable.dispose()`.
```

`univerAPI.Event.SheetPrintOpen` 이벤트는 인쇄 구성 대화 상자가 열린 후에 발생합니다.

```typescript
const disposable = univerAPI.addEvent(univerAPI.Event.SheetPrintOpen, (params) => {
  const { workbook, worksheet } = params
})

// Remove the event listener, use `disposable.dispose()`.
```

`univerAPI.Event.BeforeSheetPrintConfirm` 이벤트는 인쇄 확인 대화 상자가 열리기 전에 발생합니다.

```typescript
const disposable = univerAPI.addEvent(univerAPI.Event.BeforeSheetPrintConfirm, (params) => {
  const { renderConfig, layoutConfig } = params

  // Cancel the print confirmation operation
  params.cancel = true
})

// Remove the event listener, use `disposable.dispose()`.
```

`univerAPI.Event.SheetPrintConfirmed` 이벤트는 인쇄 확인 대화 상자가 열린 후에 발생합니다.

```typescript
const disposable = univerAPI.addEvent(univerAPI.Event.SheetPrintConfirmed, (params) => {
  const { renderConfig, layoutConfig } = params
})

// Remove the event listener, use `disposable.dispose()`.
```

`univerAPI.Event.BeforeSheetPrintCanceled` 이벤트는 인쇄 취소 작업 전에 발생합니다.

```typescript
const disposable = univerAPI.addEvent(univerAPI.Event.BeforeSheetPrintCanceled, (params) => {
  const { renderConfig, layoutConfig } = params

  // Cancel the print cancel operation
  params.cancel = true
})

// Remove the event listener, use `disposable.dispose()`.
```

`univerAPI.Event.SheetPrintCanceled` 이벤트는 인쇄 취소 작업 후에 발생합니다.

```typescript
const disposable = univerAPI.addEvent(univerAPI.Event.SheetPrintCanceled, (params) => {
  const { renderConfig, layoutConfig } = params
})

// Remove the event listener, use `disposable.dispose()`.
```
