위에서 파일을 고르면 바로 열립니다.준비됨 — 인터넷을 끊어도 이대로 동작합니다.이 브라우저에서는 쓸 수 없습니다 (나머지는 그대로 동작합니다).오프라인 저장에는 https:// 또는 localhost가 필요합니다.여기서는 저장할 수 없지만, 어느 쪽이든 올라가는 것은 없습니다.파일은 어디로도 가지 않았습니다. 파일 {total}개를 불러왔고 모두 이 사이트의 것입니다. {platform}무언가가 {hosts}에 접속했는데, 이 도구는 절대 그러지 않습니다. 살펴볼 만합니다. {platform}광고와 측정과 후원 버튼을 위한 이 사이트 자신의 스크립트가 호스트 {hosts}곳에서 왔습니다. 그중 어느 쪽도 파일이나 그 1바이트도 받지 않았습니다.광고와 측정과 후원 버튼을 위한 이 사이트 자신의 스크립트가 호스트 {hosts}곳에서 왔습니다. 그중 어느 쪽도 파일이나 그 1바이트도 받지 않았습니다.문제가 생겼습니다: {detail}. 처음부터 다시 하려면 페이지를 새로 고치세요.파일 {count}개를 읽는 중…파일 {count}개를 읽는 중…예시로 해 보기예시를 만드는 중…이 브라우저에서는 예시를 만들지 못했습니다. 대신 파일을 골라 주세요.
고른 문서는 모두 이 주소에서 제공된 코드가 이 기기의 메모리 안에서 열고, 뜯고, 다시 써 냅니다. 여기에는 업로드를 일으킬 수 있는 것이 없고, 이 페이지 반대편에는 그걸 받아 줄 서버도 없습니다.
✗ 업로드 없음
✗ 가입 없음
✓ 오프라인 동작
✓ 오픈 소스
✓ 파일은 기기 밖으로 나가지 않음
실시간 확인:확인 중…
오프라인:확인 중…
그냥 믿지 마시고 직접 확인해 보세요. 개발자 도구의 '네트워크' 탭을 켜 놓고 파일 두 개를 합쳐 보십시오. 페이지도, 그림도, 파일 이름도 실려 나가는 요청이 없습니다. 아니면 인터넷을 끊고 그냥 합쳐 보셔도 됩니다.
이 약속을 직접 확인하는 방법
내 문서는 나갈 곳이 없습니다. Content-Security-Policy에는 이 페이지가 연결할 수 있는 주소가 전부 적혀 있고, 그중 이 사이트 것은 하나도 없습니다. 이 도구는 거기에 아무것도 보태지 않습니다. 제 몫의 네트워크 기능이, 선택적인 것조차 없으니까요. 파일이 모일 수 있는 수신처가 여기엔 없고, 있다 한들 그리로 보낼 코드도 없습니다.
합치기야말로 올리지 않는 편이 가장 나은 작업입니다. 사람들이 붙이는 문서는 대개 어딘가에서 온 것들입니다. 계약서와 그 서명 장, 여권 스캔과 거래 내역서, 진단서와 신청서. 온라인 병합 서비스는 그것들을 한자리에, 이미 정리된 채로 쥐게 됩니다. 이 도구가 가진 것은 브라우저 속 페이지 하나뿐이고, 나머지 절반이 없습니다.
포맷 전체가 이 저장소에 있습니다. PDF는 객체 목록과, 각 객체가 어디서 시작하는지 적은 표입니다. src/objects.js가 그 문법을 읽고, src/reader.js가 표를 따라가고, src/assemble.js가 문서 사이로 페이지를 복사하고, src/writer.js가 결과를 씁니다. 넷 중 어느 것도 요청을 보낼 수 있는 것을 들여오지 않습니다. 라이브러리를 받아 오지도 않고, 서버에서 렌더링되는 것도 없습니다.
암호화된 파일은 열지 않고 돌려보냅니다. 비밀번호가 걸린 PDF는 거절합니다. 스캐너가 빈 비밀번호로 만들어 기술적으로는 열리는 종류도 마찬가지입니다. 문서의 보호를 벗기는 것은 페이지를 옮기는 것과는 다른 일이고, 그것을 조용히 해 버리는 도구는 시키지 않은 일을 하는 셈입니다.
완성된 파일은 어디서 만들어졌는지 말하지 않습니다. 생성기 줄도, 만든 날짜도, 도구 이름도 없습니다. 편집 프로그램이 남기는 XMP 패킷이나 사설 블록도 함께 옮기지 않습니다. 그것들은 예전에 있던 문서의 것이지, 방금 만든 문서의 것이 아니니까요. 페이지 안의 내용은 그대로 복사됩니다. 이 도구는 페이지를 옮길 뿐, 거기 적힌 것을 고쳐 쓰지 않습니다.
'페이지로 이동'이 아닌 동작은 복사되지 않습니다. PDF에는 열릴 때 실행되는 지시가 들어갈 수 있습니다. 이것을 재생하라, 이 양식을 저 주소로 보내라, 이 자바스크립트를 실행하라. 이 도구를 지나온 페이지는 다른 페이지와 웹 주소로 가는 링크를 지키고 나머지는 잃습니다. 남의 페이지 순서를 바꾼다는 것이, 그 문서의 스크립트를 내 새 파일로 들여올 이유는 되지 않습니다.
구글이 불러오는 것과, 구글에게 주지 않는 것. 광고와 측정 스크립트는 구글에서 옵니다. 둘 중 어느 쪽에도 내 문서에 관한 것은 넘어가지 않습니다. 파일도, 페이지도, 이름도, 크기도, 페이지 수도 마찬가지입니다. PDF를 읽고 복사하고 쓰는 코드는 한 줄도 빠짐없이 이 출처에서 제공되고 저장소에 공개되어 있습니다.
후원 버튼이 불러오는 것과, 거기에 주지 않는 것. 머리글의 'Buy me a coffee' 버튼은 cdnjs.buymeacoffee.com의 스크립트가 그리고 글꼴은 Google Fonts에서 가져옵니다. 그것은 링크 이상은 아닙니다. 방문을 알리지도 않고, 나에 대해서도 내 문서에 대해서도 건네받는 것이 없습니다. 누르지 않으면 아무 일도 일어나지 않고, 눌러서 가는 곳은 남의 사이트입니다.
오프라인에서도 동작합니다. 네트워크를 끊어도 이 페이지의 모든 것이 그대로 동작합니다. 가장 간단한 증거입니다. 합치려고 문서를 어딘가로 보내는 도구라면 거기서 멈출 테니까요.
직접 확인해 보세요. 위에 적은 어느 것도 그냥 믿으실 필요는 없습니다. 이 페이지는 저장소 안의 템플릿과 설정을 빌드 스크립트가 찍어 낸 결과이고, 그 스크립트는 누구나 읽고 직접 돌려 볼 수 있습니다. 결과물은 dist 브랜치에 그대로 올라가 있고요. 그래서 실제로 제공되는 파일과 소스를 빌드한 결과를 나란히 놓고 비교해 보실 수 있습니다:
먼저 읽어 볼 파일을 꼽자면, Content-Security-Policy는 config/site.toml, 그리고 복사 전체, 즉 한 문서에서 페이지를 들어내 다른 문서에 넣는 방식과 일부러 두고 오는 것들에 대해서는 src/assemble.js를 보십시오. 그 파일은 네트워크에 닿을 수 없고, 그 옆의 판독기와 기록기도 마찬가지입니다.
회사 보안 소프트웨어가 업로드를 경고한다면. 그것은 브라우저에서 파일이 선택되는 순간을 지켜보며, 페이지가 그것을 보낼 생각인지는 알 수 없습니다 — 그래서 고르는 순간에 경고합니다. 여기서는 아무것도 보내지 않습니다. 브라우저 개발자 도구를 열고 네트워크 탭으로 옮긴 뒤 파일을 골라 보세요. 그것을 실어 나르는 요청은 없고, 이 페이지 자체의 로컬 미리보기 말고는 요청 자체가 없습니다. 같은 확인을 IT 팀도 삼십 초면 할 수 있습니다.
1 PDF 고르기
비밀번호는 아무것도 업로드하지 않고 이 브라우저에서 없앨 수 있습니다. 이 사이트의 PDF 잠금 해제를 쓴 다음, 잠금이 풀린 사본을 여기로 다시 가져오세요.
2 페이지 배열하기
고른 모든 파일의 모든 페이지가, 나올 순서대로 놓여 있습니다. 타일은 어디를 잡고 끌어도 그 쪽이 옮겨집니다. 터치 화면에서는 목록이 계속 스크롤되도록 ⋮⋮ 손잡이에서만 끌 수 있습니다. 쪽은 화살표로 돌리고, ×로 빼냅니다. 여기서는 아직 아무것도 쓰이지 않았습니다. 문서는 4단계의 버튼을 누를 때 조립됩니다.
아래 각 쪽 모서리의 작은 번호 기준이고, 이 번호는 움직일 때마다 다시 매겨집니다. 큰 번호는 원래 파일에서 몇 쪽이었는지라 그쪽이 아닙니다. odd, even, all, last도 됩니다.
3 한 문서, 또는 여러 문서
북마크 유지하기 각 파일이 가지고 있던 목차를, 실제로 남은 페이지에 맞춰 다시 만듭니다. 페이지를 빼 버린 항목은 사라지고, 그 장이 아직 있는 항목은 남습니다. 여러 파일을 합치면 파일마다의 북마크가 그 파일 이름을 단 제목 아래로 들어갑니다.
Flate 스트림이 풀리지 않았습니다({detail})이 브라우저에는 CompressionStream이 없습니다LZW 스트림이 정의되지 않은 코드로 시작합니다이 스트림은 암호화되어 있습니다알 수 없는 필터, /{name}너무 깊이 중첩되었습니다끝을 넘어갔습니다{at}에 예상하지 못한 {found}{at}에 예상하지 못한 바이트 0x{hex}endstream이 없는 스트림{at}에 obj 키워드가 없습니다startxref가 없습니다xref 구역이 아닙니다/W가 없는 xref 스트림너비가 0인 필드를 가진 xref 스트림1쪽{n}쪽파일 1개파일 {n}개링크 1개링크 {n}개양식 칸 1개양식 칸 {n}개문서 1개문서 {n}개PDF 1개PDF {n}개{n}바이트{n} KB{n} MB{name}: PDF가 아니어서 안에 옮길 쪽이 없습니다.{name}: 열리기는 했지만 안에서 쪽을 하나도 찾지 못했습니다.{name}: {reason}{name}은 상호 참조 표가 그 내용과 맞지 않아서, 객체를 하나씩 훑어 읽었습니다. 그것은 수리이고 잘 되기는 했지만, 어디로 보내기 전에 결과를 확인하세요.이 PDF는 암호화되어 있습니다. 문서에서 암호를 벗기는 것은 쪽을 옮기는 것과는 다른 일이고, 이 도구는 그것을 몰래 하지 않습니다.취소했습니다.읽지 못했습니다({detail}).{size} · {pages}{size} · {pages} · 그중 {used}이 아직 순서에 남아 있음{name}과 그 모든 쪽을 빼기{n}번째 쪽을 옮기려면 끌기이 도구가 돌렸습니다{n}번째 쪽 빼기{name}, {n}쪽원본 {n}쪽순서에서 {n}번째{n}번째 쪽을 시계 반대 방향으로 돌리기{n}번째 쪽을 시계 방향으로 돌리기{n}번째 쪽을 앞으로{n}번째 쪽을 뒤로없음{from}, {to}{from}-{to}이것은 쪽 번호도 쪽 범위도 아닙니다: {list}. {total} 1-3, 8, 12- 처럼 써 주세요.이것들은 쪽 번호도 쪽 범위도 아닙니다: {list}. {total} 1-3, 8, 12- 처럼 써 주세요.쪽은 1개입니다.쪽은 {n}개입니다.먼저 쪽을 몇 개 적어 주세요 — 1-3, 8, 12- 같이.{files}에서 {pages}PDF 하나로{files}로, 한 ZIP에 담아 드리므로 {n}번이 아니라 한 번만 저장하면 됩니다— 그런데 그 칸에 범위 안의 쪽을 가리키는 것이 없어서 파일 하나로 나옵니다{parts}.{a} {b}문서 만들기문서 {n}개 만들기순서에 {pages}남은 쪽이 없습니다. 파일을 더하거나 «처음 상태로»를 누르세요.쪽을 복사하는 중{what} 쓰는 중쓰인 것을 확인하는 중{stage}…취소했습니다. 아무것도 바뀌지 않았고, 위의 쪽들은 두고 가신 그대로입니다.이건 잘 안 됐습니다: {detail}문서 하나, {size}{documents}, 모두 합쳐 {size}{files}에서 {pages}.확인했습니다: 이 페이지가 파일마다 다시 열어 쪽을 세었습니다.이번 작업은 확인이 안 맞습니다 — {problem}. 원본을 가지고 계세요.{n}개 모두 ZIP으로 내려받기내려받기{pages} · {size}완성된 파일이 {found}으로 열립니다. 1쪽을 요청했는데도요완성된 파일이 {found}으로 열립니다. {expected}쪽을 요청했는데도요여기서 다시 열어 {pages}을 세었습니다완성된 파일이 다시 열리지 않았습니다({detail}){links}이 함께 넘어왔고, 문서 안쪽을 가리키는 것들은 자기 쪽이 지금 있는 자리를 따라가도록 다시 쓰였습니다.{fields}이 함께 넘어왔고, 채워져 있던 그대로입니다.넘어오지 않는 것들. 더 이상 존재하지 않는 순서를 설명하기 때문입니다: 태그가 붙은 읽기 순서 트리, 쪽 이름표(«iii, iv, 1, 2»), 끼워 넣은 첨부, 그리고 문서 수준의 모든 JavaScript. 만든 프로그램 줄도, 만든 날짜도, 이 파일을 만든 도구의 이름도 넣지 않습니다.{links}이 이 파일에 없는 쪽을 가리키고 있어서, 읽는 사람을 엉뚱한 곳으로 보내는 대신 뒤에 아무것도 없는 채로 제자리에 두었습니다.«어느 쪽으로 가기»도 «웹 주소 열기»도 아닌 동작 1개 — 이 JavaScript 실행, 이 파일 열기, 이 양식 보내기 — 는 복사하지 않았습니다.«어느 쪽으로 가기»도 «웹 주소 열기»도 아닌 동작 {n}개 — 이 JavaScript 실행, 이 파일 열기, 이 양식 보내기 — 는 복사하지 않았습니다.이 파일들 가운데 둘 이상에서 같은 이름을 쓰는 양식 칸이 1개 있습니다({names}). 읽는 프로그램은 이름이 같은 칸을 한 칸으로 다루므로, 하나를 채우면 다른 하나도 채워집니다.이 파일들 가운데 둘 이상에서 같은 이름을 쓰는 양식 칸이 {n}개 있습니다({names}). 읽는 프로그램은 이름이 같은 칸을 한 칸으로 다루므로, 하나를 채우면 다른 하나도 채워집니다.«{name}»{list}, …쪽이 하나도 없는 문서는 문서가 아닙니다이 파일에는 문서 카탈로그가 없어서 다시 쓸 것이 없습니다. PDF가 아니거나, 여기서 고칠 수 있는 정도를 넘어 손상된 것입니다.PDF처럼 시작하지 않습니다. %PDF- 헤더가 없습니다.문서는 어디로도 가지 않았습니다. 파일 {total}개를 불러왔고 모두 이 사이트의 것입니다. {platform}무언가가 {hosts}에 접속했는데, 이 도구는 절대 그러지 않습니다. 살펴볼 만합니다. {platform}광고와 측정과 후원 버튼을 위한 이 사이트 자신의 스크립트가 호스트 {hosts}곳에서 왔습니다. 그중 어느 쪽도 문서나 그 1바이트도 받지 않았습니다.광고와 측정과 후원 버튼을 위한 이 사이트 자신의 스크립트가 호스트 {hosts}곳에서 왔습니다. 그중 어느 쪽도 문서나 그 1바이트도 받지 않았습니다.
원하는 결과가 나왔나요?
무엇이 잘못됐나요?
고맙습니다 — 큰 도움이 됩니다.
보내지는 것은 답변뿐이고, 그것도 버튼을 눌렀을 때만입니다. 파일도, 파일 이름도, 파일에 관한 어떤 정보도 보내지 않습니다.
# PDF 합치기 — 나누고 페이지 순서도 바꾸기
서버를 한 바퀴 돌지 않고 페이지를 옮깁니다.
> PDF를 합치고, 하나를 여럿으로 나누고, 페이지를 끌어서 원하는 순서로 놓습니다. 전부 내 브라우저 안에서 일어납니다. 업로드도 계정도 없고, 완성된 파일은 건네기 전에 한 번 더 열어서 페이지를 세어 봅니다.
이 페이지는 브라우저 안에서만 동작하는 대화형 도구입니다(https://abox.tools/ko/pdf-합치기/). 도구에 넘긴 어떤 것도 업로드되지 않습니다. 아래는 이 페이지가 도구에 대해 글로 설명하는 내용 전부입니다. 도구를 쓰려면 이 주소를 여세요.
## 문서는 **절대 업로드되지 않습니다**. 서버가 아예 없으니까요.
고른 문서는 모두 이 주소에서 제공된 코드가 이 기기의 메모리 안에서 열고, 뜯고, 다시 써 냅니다. 여기에는 업로드를 일으킬 수 있는 것이 없고, 이 페이지 반대편에는 그걸 받아 줄 서버도 없습니다.
- ✗ 업로드 없음
- ✗ 가입 없음
- ✓ 오프라인 동작
- ✓ 오픈 소스
- ✓ 파일은 기기 밖으로 나가지 않음
## PDF를 합치거나 나누거나 순서를 바꾸는 방법
1. **PDF를 고릅니다.** 선택 영역에 끌어다 놓거나 직접 찾아 주시고, 나중에 더 넣으셔도 됩니다. 파일마다의 페이지는 지금까지의 순서 뒤에 붙습니다. 폴더 두 개를 따로따로 합칠 수 있는 이유가 그것입니다. 브라우저가 디스크에서 바로 읽습니다.
2. **페이지를 원하는 순서로 놓습니다.** 손잡이를 잡고 페이지를 끌거나, 화살표로 한 칸씩 밉니다. 옆으로 스캔된 페이지를 돌리고, 한 장을 빼고, 아니면 칸에 `1-3, 8, 12-`라고 적어 한 무리를 한꺼번에 남기거나 빼거나 돌리십시오. 번호는 움직일 때마다 다시 매겨지므로, 보이는 것이 곧 완성될 파일입니다.
3. **한 문서로 낼지, 여러 개로 낼지 정합니다.** 보통은 하나입니다. 나머지는 자르는 방식입니다. 몇 페이지마다, 지정한 페이지 번호에서, 한 페이지에 한 파일, 아니면 페이지가 나온 원래 파일별로. 파일이 여러 개가 되면 하나의 ZIP으로 건네므로, 저장 확인이 쉰 번이 아니라 한 번입니다.
4. **만들고, 확인했다는 줄을 읽으십시오.** 문서가 다 쓰이면, 이 페이지의 같은 판독기가 각각을 다시 열어 페이지를 셉니다. 그것이 요청한 내용과 어긋나면 그 작업은 실패로 보고되고 다운로드도 제공되지 않습니다.
## 자세한 설명
[PDF 페이지를 합치고 나누고 순서 바꾸는 법](https://abox.tools/ko/가이드/pdf-합치기와-나누기/): 여러 PDF를 하나로 묶고, 하나를 여럿으로 자르고, 페이지를 옮기는 법. 순서를 바꾸면 무엇이 살아남고 어떤 도구도 못 가져가는 것은 무엇인지, 그리고 왜 문서를 어디에도 올릴 필요가 없는지.
## 상자 속 다른 도구
- [PDF 압축](https://abox.tools/ko/pdf-용량-줄이기/): 문서를 어디에도 보내지 않고 가볍게 만듭니다.
- [PDF 가리기](https://abox.tools/ko/pdf-가리기/): 글자를 파일에서 지우고, 지운 뒤에 파일을 검색해서 증명합니다.
- [이미지를 PDF로](https://abox.tools/ko/이미지-pdf-변환/): 사진을 문서 하나에 담습니다.
- [문서 스캐너](https://abox.tools/ko/문서-스캔/): 종이를 찍으십시오. 스캔한 것처럼 생긴 것이 돌아옵니다.
## 자주 묻는 질문
### 제 PDF가 어딘가로 업로드되나요?
아닙니다. 읽고 복사하고 쓰는 일은 내 브라우저가 내 하드웨어에서 합니다. 이 도구에는 서버 쪽이 없고, 페이지의 `Content-Security-Policy`에는 연결할 수 있는 주소가 전부 적혀 있는데 그중 이 사이트 것은 없습니다. 이 도구에는 선택적인 네트워크 기능조차 아예 없습니다.
### 몇 개까지 합칠 수 있고, 얼마나 큰 파일까지 되나요?
도구에 적어 둔 제한은 없습니다. 제한은 내 기기입니다. 문서는 작업하는 동안 메모리에 올라가 있으니, 노트북이라면 수백 메가바이트는 군말 없이 합치고 그 위 어딘가에서 버거워집니다. 요금도, 속도 제한도, 워터마크도, 대기열도 없습니다. 그런 일을 할 상대가 반대편에 없으니까요.
### 합치거나 나누면 품질이 떨어지나요?
아닙니다. 페이지 위의 것은 다시 인코딩되지도, 다시 그려지지도, 다시 압축되지도 않습니다. 각 페이지의 내용 스트림과 그것이 참조하는 글꼴, 이미지, 벡터 그림이 바이트 단위로 그대로 복사됩니다. 그래서 글자는 여전히 선택되고 검색되며, 사진은 같은 사진입니다. 바뀌는 것은 페이지의 순서와 그 주변 구조뿐입니다.
### 북마크와 링크는 어떻게 되나요?
둘 다 버리는 대신 다시 만듭니다. 가리키던 페이지가 결과에 남아 있는 북마크는 그 페이지가 옮겨 간 자리를 가리킵니다. 페이지를 빼 버린 북마크는 사라지되, 아래에 살아남은 항목이 있으면 제목으로 남습니다. 여러 파일을 합치면 파일마다의 북마크가 그 파일 이름을 단 제목 아래로 들어갑니다. 페이지 사이의 링크도 같은 방식으로 따라가고, 워드와 LaTeX이 쓰는 이름 붙은 목적지도 포함됩니다. 목적지가 함께 오지 못한 링크는, 읽는 사람을 엉뚱한 곳으로 보내느니 아무 일도 하지 않는 채로 남습니다. 웹 주소로 가는 링크는 그대로 유지됩니다.
### 따라오지 않는 것은 무엇인가요?
네 가지이고, 도구는 그것을 작은 글씨가 아니라 결과 화면에서 말해 줍니다. 스크린 리더가 쓰는 태그된 읽기 순서 트리, 페이지 라벨('iii, iv, 1, 2' 같은 번호 매기기), 내장된 첨부 파일, 그리고 '페이지로 이동'도 '웹 주소 열기'도 아닌 모든 동작, 문서 자바스크립트를 포함해서입니다. 앞의 둘은 페이지가 움직인 순간 더 이상 존재하지 않는 순서를 적어 둔 것이고, 마지막은 새 파일로 가져가 달라고 부탁한 적 없는 것입니다. 문서의 태그가 중요하다면 원본도 함께 보관하십시오.
### 작성한 양식은 살아남나요?
살아남습니다. 양식 필드와 거기에 입력한 내용이 페이지와 함께 옮겨 오고, 새 문서도 양식으로 등록되어 뷰어들이 양식으로 다룹니다. 합칠 때 알아 둘 것이 하나 있습니다. 이름이 같은 필드 두 개는 어떤 뷰어에게나 한 필드입니다. 그래서 같은 양식의 사본 두 부를 합치면, 한쪽 페이지에서 칸을 채우면 다른 쪽도 함께 채워집니다. 도구는 그런 경우를 알아채고 알려 줍니다.
### 비밀번호가 걸린 PDF도 열 수 있나요?
아닙니다. 일부러 그렇게 했습니다. 암호화된 문서는 그렇다고 알려 주며 거절합니다. 비밀번호가 비어 있어도 마찬가지인데, 스캐너와 복합기가 그렇게 저장하는 경우가 많습니다. 파일의 보호를 벗기는 것은 페이지를 옮기는 것과 다른 일이고, 그것을 조용히 해 버리는 도구는 시키지 않은 일을 하는 셈입니다.
### 왜 페이지 미리보기가 없나요?
페이지를 그리려면 글꼴, 그러데이션, 투명 그룹, 혼합 모드까지 다루는 완전한 PDF 렌더러가 필요하기 때문입니다. 썸네일 몇 장을 위해 1메가바이트가 넘는 엔진을 받아서 돌려야 한다는 뜻입니다. 대신 타일이 보여 주는 것은 순서를 바꿀 때 실제로 다루는 정보입니다. 페이지 번호, 종이의 모양과 크기, 어떤 회전으로 쓰일지, 그리고 어느 파일에서 왔는지. 세로 페이지 더미 속에 섞인 가로 스캔은 이것만으로도 한눈에 보입니다.
### 완성된 파일은 어디서나 열리나요?
열립니다. 결과물은 PDF 1.5로, 또는 넣은 파일 중 하나가 요구한 가장 높은 버전으로 쓰입니다. 1.5는 2003년 이후 나온 모든 뷰어가 이해합니다. 도구는 그것을 내 기기에서 실제로 확인하기도 합니다. 완성된 파일을 다시 열고 페이지 트리를 따라가며 페이지를 센 다음에야 건네줍니다.
### 무료인가요? 가입해야 하나요?
무료이고 계정도, 로그인도, 체험판도 없으며, 내 기기의 메모리가 허락하는 것 말고는 크기 제한도 없습니다. 이 사이트는 광고로 유지되는데, 그 광고에도 내 문서에 관한 것은 넘어가지 않습니다.
### 오프라인에서도 되나요?
됩니다. 페이지를 한 번 불러온 다음 인터넷을 끊어도 계속 동작합니다. 아무것도 업로드되지 않는다는 가장 간단한 증명이기도 하고요. 합치려고 문서를 어딘가로 보내는 도구라면 선을 뽑는 순간 멈춰 버릴 테니까요.
## 이 약속을 직접 확인하는 방법
- **내 문서는 나갈 곳이 없습니다.** Content-Security-Policy에는 이 페이지가 연결할 수 있는 주소가 전부 적혀 있고, 그중 이 사이트 것은 하나도 없습니다. 이 도구는 거기에 아무것도 보태지 않습니다. 제 몫의 네트워크 기능이, 선택적인 것조차 없으니까요. 파일이 모일 수 있는 수신처가 여기엔 없고, 있다 한들 그리로 보낼 코드도 없습니다.
- **합치기야말로 올리지 않는 편이 가장 나은 작업입니다.** 사람들이 붙이는 문서는 대개 어딘가에서 온 것들입니다. 계약서와 그 서명 장, 여권 스캔과 거래 내역서, 진단서와 신청서. 온라인 병합 서비스는 그것들을 한자리에, 이미 정리된 채로 쥐게 됩니다. 이 도구가 가진 것은 브라우저 속 페이지 하나뿐이고, 나머지 절반이 없습니다.
- **포맷 전체가 이 저장소에 있습니다.** PDF는 객체 목록과, 각 객체가 어디서 시작하는지 적은 표입니다. `src/objects.js`가 그 문법을 읽고, `src/reader.js`가 표를 따라가고, `src/assemble.js`가 문서 사이로 페이지를 복사하고, `src/writer.js`가 결과를 씁니다. 넷 중 어느 것도 요청을 보낼 수 있는 것을 들여오지 않습니다. 라이브러리를 받아 오지도 않고, 서버에서 렌더링되는 것도 없습니다.
- **암호화된 파일은 열지 않고 돌려보냅니다.** 비밀번호가 걸린 PDF는 거절합니다. 스캐너가 빈 비밀번호로 만들어 기술적으로는 열리는 종류도 마찬가지입니다. 문서의 보호를 벗기는 것은 페이지를 옮기는 것과는 다른 일이고, 그것을 조용히 해 버리는 도구는 시키지 않은 일을 하는 셈입니다.
- **완성된 파일은 어디서 만들어졌는지 말하지 않습니다.** 생성기 줄도, 만든 날짜도, 도구 이름도 없습니다. 편집 프로그램이 남기는 XMP 패킷이나 사설 블록도 함께 옮기지 않습니다. 그것들은 예전에 있던 문서의 것이지, 방금 만든 문서의 것이 아니니까요. 페이지 안의 내용은 그대로 복사됩니다. 이 도구는 페이지를 옮길 뿐, 거기 적힌 것을 고쳐 쓰지 않습니다.
- **'페이지로 이동'이 아닌 동작은 복사되지 않습니다.** PDF에는 열릴 때 실행되는 지시가 들어갈 수 있습니다. 이것을 재생하라, 이 양식을 저 주소로 보내라, 이 자바스크립트를 실행하라. 이 도구를 지나온 페이지는 다른 페이지와 웹 주소로 가는 링크를 지키고 나머지는 잃습니다. 남의 페이지 순서를 바꾼다는 것이, 그 문서의 스크립트를 내 새 파일로 들여올 이유는 되지 않습니다.
- **구글이 불러오는 것과, 구글에게 주지 않는 것.** 광고와 측정 스크립트는 구글에서 옵니다. 둘 중 어느 쪽에도 내 문서에 관한 것은 넘어가지 않습니다. 파일도, 페이지도, 이름도, 크기도, 페이지 수도 마찬가지입니다. PDF를 읽고 복사하고 쓰는 코드는 한 줄도 빠짐없이 이 출처에서 제공되고 저장소에 공개되어 있습니다.
- **후원 버튼이 불러오는 것과, 거기에 주지 않는 것.** 머리글의 'Buy me a coffee' 버튼은 cdnjs.buymeacoffee.com의 스크립트가 그리고 글꼴은 Google Fonts에서 가져옵니다. 그것은 링크 이상은 아닙니다. 방문을 알리지도 않고, 나에 대해서도 내 문서에 대해서도 건네받는 것이 없습니다. 누르지 않으면 아무 일도 일어나지 않고, 눌러서 가는 곳은 남의 사이트입니다.
- **오프라인에서도 동작합니다.** 네트워크를 끊어도 이 페이지의 모든 것이 그대로 동작합니다. 가장 간단한 증거입니다. 합치려고 문서를 어딘가로 보내는 도구라면 거기서 멈출 테니까요.
**직접 확인해 보세요.** 위에 적은 어느 것도 그냥 믿으실 필요는 없습니다. 이 페이지는 저장소 안의 템플릿과 설정을 빌드 스크립트가 찍어 낸 결과이고, 그 스크립트는 누구나 읽고 직접 돌려 볼 수 있습니다. 결과물은 `dist` 브랜치에 그대로 올라가 있고요. 그래서 실제로 제공되는 파일과 소스를 빌드한 결과를 나란히 놓고 비교해 보실 수 있습니다: https://github.com/A-Box-of-Tools/website
먼저 읽어 볼 파일을 꼽자면, Content-Security-Policy는 `config/site.toml`, 그리고 복사 전체, 즉 한 문서에서 페이지를 들어내 다른 문서에 넣는 방식과 일부러 두고 오는 것들에 대해서는 `src/assemble.js`를 보십시오. 그 파일은 네트워크에 닿을 수 없고, 그 옆의 판독기와 기록기도 마찬가지입니다.
PDF를 합치거나 나누거나 순서를 바꾸는 방법
PDF를 고릅니다. 선택 영역에 끌어다 놓거나 직접 찾아 주시고, 나중에 더 넣으셔도 됩니다. 파일마다의 페이지는 지금까지의 순서 뒤에 붙습니다. 폴더 두 개를 따로따로 합칠 수 있는 이유가 그것입니다. 브라우저가 디스크에서 바로 읽습니다.
페이지를 원하는 순서로 놓습니다. 손잡이를 잡고 페이지를 끌거나, 화살표로 한 칸씩 밉니다. 옆으로 스캔된 페이지를 돌리고, 한 장을 빼고, 아니면 칸에 1-3, 8, 12-라고 적어 한 무리를 한꺼번에 남기거나 빼거나 돌리십시오. 번호는 움직일 때마다 다시 매겨지므로, 보이는 것이 곧 완성될 파일입니다.
한 문서로 낼지, 여러 개로 낼지 정합니다. 보통은 하나입니다. 나머지는 자르는 방식입니다. 몇 페이지마다, 지정한 페이지 번호에서, 한 페이지에 한 파일, 아니면 페이지가 나온 원래 파일별로. 파일이 여러 개가 되면 하나의 ZIP으로 건네므로, 저장 확인이 쉰 번이 아니라 한 번입니다.
만들고, 확인했다는 줄을 읽으십시오. 문서가 다 쓰이면, 이 페이지의 같은 판독기가 각각을 다시 열어 페이지를 셉니다. 그것이 요청한 내용과 어긋나면 그 작업은 실패로 보고되고 다운로드도 제공되지 않습니다.
자세한 설명
PDF 페이지를 합치고 나누고 순서 바꾸는 법여러 PDF를 하나로 묶고, 하나를 여럿으로 자르고, 페이지를 옮기는 법. 순서를 바꾸면 무엇이 살아남고 어떤 도구도 못 가져가는 것은 무엇인지, 그리고 왜 문서를 어디에도 올릴 필요가 없는지.
아닙니다. 읽고 복사하고 쓰는 일은 내 브라우저가 내 하드웨어에서 합니다. 이 도구에는 서버 쪽이 없고, 페이지의 Content-Security-Policy에는 연결할 수 있는 주소가 전부 적혀 있는데 그중 이 사이트 것은 없습니다. 이 도구에는 선택적인 네트워크 기능조차 아예 없습니다.
몇 개까지 합칠 수 있고, 얼마나 큰 파일까지 되나요?
도구에 적어 둔 제한은 없습니다. 제한은 내 기기입니다. 문서는 작업하는 동안 메모리에 올라가 있으니, 노트북이라면 수백 메가바이트는 군말 없이 합치고 그 위 어딘가에서 버거워집니다. 요금도, 속도 제한도, 워터마크도, 대기열도 없습니다. 그런 일을 할 상대가 반대편에 없으니까요.
합치거나 나누면 품질이 떨어지나요?
아닙니다. 페이지 위의 것은 다시 인코딩되지도, 다시 그려지지도, 다시 압축되지도 않습니다. 각 페이지의 내용 스트림과 그것이 참조하는 글꼴, 이미지, 벡터 그림이 바이트 단위로 그대로 복사됩니다. 그래서 글자는 여전히 선택되고 검색되며, 사진은 같은 사진입니다. 바뀌는 것은 페이지의 순서와 그 주변 구조뿐입니다.
북마크와 링크는 어떻게 되나요?
둘 다 버리는 대신 다시 만듭니다. 가리키던 페이지가 결과에 남아 있는 북마크는 그 페이지가 옮겨 간 자리를 가리킵니다. 페이지를 빼 버린 북마크는 사라지되, 아래에 살아남은 항목이 있으면 제목으로 남습니다. 여러 파일을 합치면 파일마다의 북마크가 그 파일 이름을 단 제목 아래로 들어갑니다. 페이지 사이의 링크도 같은 방식으로 따라가고, 워드와 LaTeX이 쓰는 이름 붙은 목적지도 포함됩니다. 목적지가 함께 오지 못한 링크는, 읽는 사람을 엉뚱한 곳으로 보내느니 아무 일도 하지 않는 채로 남습니다. 웹 주소로 가는 링크는 그대로 유지됩니다.
따라오지 않는 것은 무엇인가요?
네 가지이고, 도구는 그것을 작은 글씨가 아니라 결과 화면에서 말해 줍니다. 스크린 리더가 쓰는 태그된 읽기 순서 트리, 페이지 라벨('iii, iv, 1, 2' 같은 번호 매기기), 내장된 첨부 파일, 그리고 '페이지로 이동'도 '웹 주소 열기'도 아닌 모든 동작, 문서 자바스크립트를 포함해서입니다. 앞의 둘은 페이지가 움직인 순간 더 이상 존재하지 않는 순서를 적어 둔 것이고, 마지막은 새 파일로 가져가 달라고 부탁한 적 없는 것입니다. 문서의 태그가 중요하다면 원본도 함께 보관하십시오.
작성한 양식은 살아남나요?
살아남습니다. 양식 필드와 거기에 입력한 내용이 페이지와 함께 옮겨 오고, 새 문서도 양식으로 등록되어 뷰어들이 양식으로 다룹니다. 합칠 때 알아 둘 것이 하나 있습니다. 이름이 같은 필드 두 개는 어떤 뷰어에게나 한 필드입니다. 그래서 같은 양식의 사본 두 부를 합치면, 한쪽 페이지에서 칸을 채우면 다른 쪽도 함께 채워집니다. 도구는 그런 경우를 알아채고 알려 줍니다.
비밀번호가 걸린 PDF도 열 수 있나요?
아닙니다. 일부러 그렇게 했습니다. 암호화된 문서는 그렇다고 알려 주며 거절합니다. 비밀번호가 비어 있어도 마찬가지인데, 스캐너와 복합기가 그렇게 저장하는 경우가 많습니다. 파일의 보호를 벗기는 것은 페이지를 옮기는 것과 다른 일이고, 그것을 조용히 해 버리는 도구는 시키지 않은 일을 하는 셈입니다.
왜 페이지 미리보기가 없나요?
페이지를 그리려면 글꼴, 그러데이션, 투명 그룹, 혼합 모드까지 다루는 완전한 PDF 렌더러가 필요하기 때문입니다. 썸네일 몇 장을 위해 1메가바이트가 넘는 엔진을 받아서 돌려야 한다는 뜻입니다. 대신 타일이 보여 주는 것은 순서를 바꿀 때 실제로 다루는 정보입니다. 페이지 번호, 종이의 모양과 크기, 어떤 회전으로 쓰일지, 그리고 어느 파일에서 왔는지. 세로 페이지 더미 속에 섞인 가로 스캔은 이것만으로도 한눈에 보입니다.
완성된 파일은 어디서나 열리나요?
열립니다. 결과물은 PDF 1.5로, 또는 넣은 파일 중 하나가 요구한 가장 높은 버전으로 쓰입니다. 1.5는 2003년 이후 나온 모든 뷰어가 이해합니다. 도구는 그것을 내 기기에서 실제로 확인하기도 합니다. 완성된 파일을 다시 열고 페이지 트리를 따라가며 페이지를 센 다음에야 건네줍니다.
무료인가요? 가입해야 하나요?
무료이고 계정도, 로그인도, 체험판도 없으며, 내 기기의 메모리가 허락하는 것 말고는 크기 제한도 없습니다. 이 사이트는 광고로 유지되는데, 그 광고에도 내 문서에 관한 것은 넘어가지 않습니다.
오프라인에서도 되나요?
됩니다. 페이지를 한 번 불러온 다음 인터넷을 끊어도 계속 동작합니다. 아무것도 업로드되지 않는다는 가장 간단한 증명이기도 하고요. 합치려고 문서를 어딘가로 보내는 도구라면 선을 뽑는 순간 멈춰 버릴 테니까요.