# 印刷

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

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

- Requested language: `ja-JP`

- Content language: `ja-JP`

- Documentation version: `1.1.0`

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

---

#### Package metadata

```json
{
  "mobile": true,
  "preset": [
    {
      "client": "@univerjs/preset-sheets-advanced",
      "locale": "@univerjs/preset-sheets-advanced/locales/ja-JP",
      "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/ja-JP",
      "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 SheetsPrintPluginJaJP from '@univerjs-pro/sheets-print/locale/ja-JP' // [!code ++]
import { LocaleType, mergeLocales, Univer } from '@univerjs/core'
import '@univerjs-pro/sheets-print/lib/index.css' // [!code ++]

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

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

Univer の商用ライセンスをお持ちの場合は、設定方法について [クライアントでのライセンス](https://docs.univer.ai/ja-JP/server/license.md#in-plugin-mode) を参照してください。

### プラグインと設定

```typescript
interface IUniverSheetsPrintConfig {
  /**
   * 印刷時にウォーターマークを強制的に表示するかどうか
   * @default false
   */
  enforceWatermark?: boolean
}
```

## モバイル対応

まず[モバイルエディター](https://docs.univer.ai/ja-JP/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 UniverPresetSheetsAdvancedJaJP from '@univerjs/preset-sheets-advanced/locales/ja-JP' // [!code ++]
import { UniverSheetsCorePreset } from '@univerjs/preset-sheets-core'
import UniverPresetSheetsCoreJaJP from '@univerjs/preset-sheets-core/locales/ja-JP'
import { UniverSheetsDrawingPreset } from '@univerjs/preset-sheets-drawing' // [!code ++]
import UniverPresetSheetsDrawingJaJP from '@univerjs/preset-sheets-drawing/locales/ja-JP' // [!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.JA_JP,
  locales: {
    [LocaleType.JA_JP]: mergeLocales(
      UniverPresetSheetsCoreJaJP,
      UniverPresetSheetsDrawingJaJP, // [!code ++]
      UniverPresetSheetsAdvancedJaJP, // [!code ++]
    ),
  },
  presets: [
    UniverSheetsCorePreset(),
    UniverSheetsDrawingPreset(), // [!code ++]
    UniverSheetsAdvancedPreset(), // [!code ++]
  ],
})
```

Univer の商用ライセンスをお持ちの場合は、設定方法について [クライアントでのライセンス](https://docs.univer.ai/ja-JP/server/license.md#in-preset-mode) を参照してください。

### プリセットと設定

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

interface IUniverSheetsPrintConfig {
  /**
   * 印刷時にウォーターマークを強制的に表示するかどうか
   * @default false
   */
  enforceWatermark?: boolean
}
```

## Facade API

### インポート

> [!INFO: プラグインモード注意]
> Facade パッケージの手動 import が必要なのはプラグインモードのみです。プリセットモードには対応する Facade
> パッケージが内蔵されているため、追加の import は不要です。

```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()

// 3 秒後に印刷設定ダイアログを閉じる
setTimeout(() => {
  fWorkbook.closePrintDialog()
}, 3000)
```

### 印刷レイアウト設定の更新

[`FWorkbook.updatePrintConfig(config: ISheetPrintLayoutConfig)`](https://docs.univer.ai/ja-JP/reference/facade/workbook.md#updateprintconfig) メソッドを使用して、印刷レイアウト設定を更新します。

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

// 印刷レイアウト設定を更新
fWorkbook.updatePrintConfig({
  area: univerAPI.Enum.PrintArea.CurrentSheet, // 現在のシートを印刷
  subUnitIds: [subUnitId],
  paperSize: univerAPI.Enum.PrintPaperSize.A4, // A4 用紙サイズ
  scale: univerAPI.Enum.PrintScale.FitPage, // コンテンツをページに合わせる
  freeze: [univerAPI.Enum.PrintFreeze.Row], // 行ヘッダーを固定
  margin: univerAPI.Enum.PrintPaperMargin.Normal, // 標準の余白
  // ... その他の設定
})

// 更新した設定で印刷を開始
fWorkbook.print()
```

完全な設定型とパラメーターは次を参照してください： [`FWorkbook.updatePrintConfig()`](https://docs.univer.ai/ja-JP/reference/facade/workbook.md#updateprintconfig).

### 印刷レンダー設定の更新

[`FWorkbook.updatePrintRenderConfig(config: ISheetPrintRenderConfig)`](https://docs.univer.ai/ja-JP/reference/facade/workbook.md#updateprintrenderconfig) メソッドを使用して、印刷レンダー設定を更新します。

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

// 既定では印刷レイアウト設定を更新
fWorkbook.updatePrintConfig({})

// 印刷レンダー設定を更新
fWorkbook.updatePrintRenderConfig({
gridlines: true, // 罫線を表示
hAlign: univerAPI.Enum.PrintAlign.Middle, // 水平方向中央揃え
vAlign: univerAPI.Enum.PrintAlign.Middle, // 垂直方向中央揃え
headerFooter: [ // 含めるヘッダー/フッター要素の配列。ここではページ番号とワークシート名
  univerAPI.Enum.PrintHeaderFooter.PageSize,
  univerAPI.Enum.PrintHeaderFooter.WorksheetTitle,
],
// ... その他の設定
})

// 印刷を開始
fWorkbook.print()
```

完全な設定型とパラメーターは次を参照してください： [`FWorkbook.updatePrintRenderConfig()`](https://docs.univer.ai/ja-JP/reference/facade/workbook.md#updateprintrenderconfig).

### 印刷

`FWorkbook.print` メソッドを使用すると、印刷ダイアログを直接トリガーできます。

```typescript
// 既定の設定を使う場合は空のオブジェクトを渡せます
workbook.updatePrintConfig({
// ... 印刷レイアウト設定
})
workbook.updatePrintRenderConfig({
// ... 印刷レンダー設定
})
workbook.print()
```

### スクリーンショットをクリップボードに保存

`FWorkbook.saveScreenshotToClipboard` メソッドを使用すると、印刷データの画像をクリップボードに保存できます。

[ライセンス](https://docs.univer.ai/ja-JP/server/license.md) をお持ちの方のみ利用可能です。ライセンスがない場合は使用制限があり、保存処理は `false` を返します。

画像の保存には Clipboard API を使用しており、非セキュアなネットワーク環境や未対応のブラウザーでは失敗する場合があります。保存に成功すると `true` を返します。

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

### 選択範囲のスクリーンショットを取得

`FRange.getScreenshot` メソッドを使用すると、選択した印刷データのスクリーンショットを取得できます。

[ライセンス](https://docs.univer.ai/ja-JP/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 }) // 行列ヘッダーを含む
```

### イベント リスナー

印刷機能では、次のイベントが利用できます。

`univerAPI.Event.BeforeSheetPrintOpen` イベントは、印刷設定ダイアログが開かれる前にトリガーされます。

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

  // 印刷設定ダイアログを開く操作をキャンセルする
  params.cancel = true
})

// イベント リスナーを削除するには `disposable.dispose()` を使用します。
```

`univerAPI.Event.SheetPrintOpen` イベントは、印刷設定ダイアログが開かれた後にトリガーされます。

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

// イベント リスナーを削除するには `disposable.dispose()` を使用します。
```

`univerAPI.Event.BeforeSheetPrintConfirm` イベントは、印刷の確認ダイアログが開かれる前にトリガーされます。

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

  // 印刷の確認操作をキャンセルする
  params.cancel = true
})

// イベント リスナーを削除するには `disposable.dispose()` を使用します。
```

`univerAPI.Event.SheetPrintConfirmed` イベントは、印刷の確認ダイアログが開かれた後にトリガーされます。

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

// イベント リスナーを削除するには `disposable.dispose()` を使用します。
```

`univerAPI.Event.BeforeSheetPrintCanceled` イベントは、印刷のキャンセル操作の前にトリガーされます。

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

  // 印刷のキャンセル操作をキャンセルする
  params.cancel = true
})

// イベント リスナーを削除するには `disposable.dispose()` を使用します。
```

`univerAPI.Event.SheetPrintCanceled` イベントは、印刷のキャンセル操作の後にトリガーされます。

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

// イベント リスナーを削除するには `disposable.dispose()` を使用します。
```
