# PDF 파일 이미지 변환



PDF 파일 한 개를 올리면 페이지마다 PNG 이미지로 바꿔 ZIP 파일 하나로 돌려줍니다. 응답은 JSON이 아닌 ZIP 파일입니다.



인증: Authorization: Bearer $APICK_API_KEY

본문 있는 REST 요청: multipart/form-data. GET 본문 및 MCP JSON-RPC 규격은 해당 명세를 따릅니다.

인증키는 서버에 보관하세요. 모든 예제는 정적 자료입니다.



## POST /rest/pdf_to_image 응답 필드

## API 요청: POST /rest/pdf_to_image



### 입력

- `pdf` (file, 필수): 변환·분석할 PDF 파일입니다. 암호가 설정된 PDF는 실패할 수 있으며, 용량·페이지 제한을 확인하세요.



### 응답 명세

```json

{
  "type": "string",
  "format": "binary"
}

```

### curl

```curl

curl --fail-with-body --request POST 'https://apick.app/rest/pdf_to_image' \
  --header "Authorization: Bearer $APICK_API_KEY" \
  --form 'pdf=@./brochure.pdf' \
  --dump-header response.headers --output result.zip
# response.headers의 Content-Type을 확인한 뒤 파일을 사용하세요.

```

### Node.js (서버 ESM)

```javascript

import { readFile } from "node:fs/promises";
const form = new FormData();
form.append("pdf", new Blob([await readFile("./brochure.pdf")]), "brochure.pdf");
const response = await fetch("https://apick.app/rest/pdf_to_image", {
  method: "POST",
  headers: { Authorization: "Bearer " + process.env.APICK_API_KEY },
  body: form,
  signal: AbortSignal.timeout(120_000),
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
if ((response.headers.get("content-type") || "").includes("json")) {
  throw new Error(JSON.stringify(await response.json()));
}
const { writeFile } = await import("node:fs/promises");
await writeFile("result.zip", new Uint8Array(await response.arrayBuffer()));

```

### python

```python

import os
import requests
parts = [
    ("pdf", ("brochure.pdf", open("./brochure.pdf", "rb"))),
]
response = requests.request("POST", "https://apick.app/rest/pdf_to_image",
    headers={"Authorization": "Bearer " + os.environ["APICK_API_KEY"]},
    files=parts,
    timeout=(10, 120), stream=True)
response.raise_for_status()
if "json" in response.headers.get("Content-Type", ""):
    raise RuntimeError(response.json())
with open("result.zip", "wb") as output:
    for chunk in response.iter_content(65536):
        output.write(chunk)

```

### php

```php

<?php
$headers = ["Authorization: Bearer " . getenv("APICK_API_KEY")];
$form = [
    'pdf' => new CURLFile('./brochure.pdf'),
];
$curl = curl_init('https://apick.app/rest/pdf_to_image');
curl_setopt_array($curl, [
    CURLOPT_CUSTOMREQUEST => 'POST',
    CURLOPT_HTTPHEADER => $headers,
    CURLOPT_POSTFIELDS => $form,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CONNECTTIMEOUT => 10, CURLOPT_TIMEOUT => 120,
]);
$body = curl_exec($curl);
if ($body === false) { throw new RuntimeException(curl_error($curl)); }
$status = curl_getinfo($curl, CURLINFO_HTTP_CODE);
$type = curl_getinfo($curl, CURLINFO_CONTENT_TYPE) ?: "";
curl_close($curl);
if ($status >= 400) { throw new RuntimeException($body); }
if (strpos($type, "json") !== false) { throw new RuntimeException($body); }
file_put_contents('result.zip', $body);

```

## 사용 예시 1. PDF 전 페이지를 이미지로

문서 미리보기용 이미지를 페이지마다 만듭니다.

```bash

curl --fail-with-body --request POST 'https://apick.app/rest/pdf_to_image' \
  --header "Authorization: Bearer $APICK_API_KEY" \
  --form 'pdf=@./brochure.pdf' \
  --dump-header response.headers --output result.zip
# response.headers의 Content-Type을 확인한 뒤 파일을 사용하세요.

```

- 응답 `Content-Type`이 `application/zip`이면 `output.zip`으로 저장합니다.

- 압축 안의 `pdf_image1.png`, `pdf_image2.png` … 번호가 페이지 순서입니다.

## 사용 예시 2. 한 페이지만 이미지로 만들기

표지 썸네일처럼 한 페이지만 필요하면 그 페이지만 담은 PDF를 보내 요금을 줄입니다. 요금은 페이지당입니다.

```bash

curl --fail-with-body --request POST 'https://apick.app/rest/pdf_to_image' \
  --header "Authorization: Bearer $APICK_API_KEY" \
  --form 'pdf=@./cover_page.pdf' \
  --dump-header response.headers --output result.zip
# response.headers의 Content-Type을 확인한 뒤 파일을 사용하세요.

```

- ZIP 안에 `pdf_image1.png` 한 장이 들어 있습니다.

## 코드·오류

## 상세 기능·요금

업로드 용량 제한: 1GB multipart/form-data 요청에 포함된 첨부파일 합계는 최대 1GB입니다. 처리시간은 재생시간, 페이지 수와 파일 형식에 따라 늘어날 수 있습니다. 제한을 초과하면 HTTP 413과 REQUEST_TOO_LARGE 오류가 반환되며 과금되지 않습니다. 이용 전 확인 PDF 문서를 웹·앱에서 미리보기 이미지로 보여 주거나, 페이지별 썸네일을 만들 때 사용합니다. PDF 형식만 받습니다. 결과 ZIP 안에는 페이지 순서대로 pdf_image1.png, pdf_image2.png … 파일이 들어 있습니다. 이미지는 원본 페이지 크기의 2배 해상도로 만들어집니다. 요금은 변환한 페이지당 2P입니다(10페이지 PDF는 페이지당 요금 × 10). 실패·시간 초과 응답은 과금되지 않습니다.

## 상세 요청

항목설정 메서드·주소POST https://apick.app/rest/pdf_to_image 인증 헤더Authorization: Bearer 내 계정의 API 인증키 본문 형식multipart/form-data 요청 예시 form-data 전체 예제 보기

## 상세 응답

성공하면 ZIP 본문이 바로 옵니다. 내려받기 파일명은 output.zip입니다. 압축을 풀어 파일 이름의 숫자 순서로 페이지를 정렬하세요. 응답 헤더 필드타입설명 successinteger1이면 변환을 시작해 ZIP을 보내는 중입니다. msinteger변환을 시작하기까지 걸린 시간(밀리초)입니다. Content-Typestringapplication/zip ZIP은 변환하면서 이어서 전송됩니다. 내려받은 ZIP이 열리지 않으면 전송 중 실패한 것이므로 같은 파일로 다시 요청하세요.

## 상세 코드·정책

오류와 대처 실패하면 ZIP 대신 JSON이 옵니다. HTTP 상태와 Content-Type을 먼저 확인하고, JSON이면 data.error 문구를 기록하세요. 실패 응답의 api.cost는 0입니다. HTTPdata.error대처 424첨부파일이 없습니다.파일 필드 이름을 pdf로 보냈는지 확인하세요. 424PDF 이미지 변환에 실패했습니다.PDF가 아니거나 손상·암호가 걸린 파일입니다. 실제 PDF인지 확인하세요. 424PDF 변환 결과가 없습니다.페이지가 없는 PDF입니다. 원본을 확인하세요. 408처리 시간 초과로 실패했습니다.data.success가 3입니다. 페이지를 나눠 다시 요청하세요.

## 상세 예제

호출 예시 같은 요청을 JavaScript와 Python으로 옮긴 예시입니다. 키는 환경변수 APICK_API_KEY 에서 읽습니다. JavaScript 예시 form-data 전체 예제 보기 Python 예시 form-data 전체 예제 보기
