> For the complete documentation index, see [llms.txt](https://developers-apps-in-toss.toss.im/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://developers-apps-in-toss.toss.im/documentation/api-and-sdk-en/common/file-storage/pdf.md).

# PDF viewer

### Open PDF viewer

**SDK function:** `openPDFViewer`

`openPDFViewer`is a function that opens Base64-encoded PDF data in the native PDF viewer. When the user closes the PDF viewer, `'CLOSE'`is returned.

**Signature**

```typescript
function openPDFViewer(params: OpenPDFViewerParams): Promise<OpenPDFViewerResult>;
```

**Parameter**

* params required

  is an object containing the PDF data and file name. For the detailed type, see below `OpenPDFViewerParams`.

**Return value**

* Promise\<OpenPDFViewerResult>

  When the PDF viewer is closed `'CLOSE'`is returned.

**Error**

| Error code                | Condition                                         |
| ------------------------- | ------------------------------------------------- |
| `INVALID_REQUEST`         | When the request parameters are invalid           |
| `INVALID_DATA`            | When the PDF data is invalid                      |
| `PDF_VIEWER_ERROR`        | When an error occurs while opening the PDF viewer |
| `UNSUPPORTED_APP_VERSION` | When the Toss app version is lower than 5.261.0   |

**Example**

{% tabs %}
{% tab title="React" %}

```tsx
import { openPDFViewer } from '@apps-in-toss/web-framework';

async function showPdf() {
  try {
    const result = await openPDFViewer({
      data: 'JVBERi0xLjQK...',
      filename: 'document.pdf',
    });

    if (result === 'CLOSE') {
      console.log('The PDF viewer was closed.');
    }
  } catch (error) {
    console.error('PDF viewer error:', error);
  }
}
```

{% endtab %}

{% tab title="React Native" %}

```tsx
import { openPDFViewer } from '@apps-in-toss/framework';

async function showPdf() {
  try {
    const result = await openPDFViewer({
      data: 'JVBERi0xLjQK...',
      filename: 'document.pdf',
    });

    if (result === 'CLOSE') {
      console.log('The PDF viewer was closed.');
    }
  } catch (error) {
    console.error('PDF viewer error:', error);
  }
}
```

{% endtab %}
{% endtabs %}

### Type · Object

**PDF viewer parameters (`OpenPDFViewerParams`)**

`openPDFViewer` This is the type of parameters passed to the function.

**Signature**

```typescript
interface OpenPDFViewerParams {
  data: string;
  filename?: string;
}
```

**Properties**

* datastring required

  A Base64-encoded PDF data string.
* filenamestring

  The PDF file name.

**PDF viewer result (`OpenPDFViewerResult`)**

This is the result type returned when the PDF viewer is closed.

**Signature**

```typescript
type OpenPDFViewerResult = 'CLOSE';
```

**Value description**

| Value     | Description                                           |
| --------- | ----------------------------------------------------- |
| `'CLOSE'` | This is the case when the user closes the PDF viewer. |


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://developers-apps-in-toss.toss.im/documentation/api-and-sdk-en/common/file-storage/pdf.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
