이 작업이 성가신 이유는 CSV에 페이지가 없기 때문입니다. CSV는 끝없이 이어지는 표이고, PDF는 크기가 정해진 직사각형을 쌓은 것입니다. 변환할 때마다 어디서 자를지 정해야 하는데, 잘 못하는 도구는 모두 같은 방식으로 정합니다. 용지가 끝나는 곳에서 자르고, 남은 열은 오른쪽 가장자리 밖으로 밀려나게 둡니다.
그래서 중요한 질문은 "어떻게 변환하나"가 아닙니다. 파일 자체는 거의 어떤 방법으로든 만들어지니까요. 중요한 것은 어떤 열과 어떤 행이 실제로 PDF에 들어가는가입니다. 이것을 먼저 정하면 변환은 간단합니다.
변환하기 전에 파일 줄이기
행이 40,000개인 PDF는 문서가 아니라 파일 크기가 붙은 실수입니다. 612쪽을 여는 사람은 없습니다. 받는 사람이 모든 행을 필요로 한다면 CSV를 보내세요.
PDF는 가공이 아니라 읽기 위한 결과물일 때 알맞은 형식입니다. 그렇다면 다음과 같아야 합니다.
- 필터링되어 있어야 합니다. 전체 내보내기가 아니라 이 받는 사람에게 해당하는 행만 담습니다.
- 열이 좁혀져 있어야 합니다. A4 가로 용지에는 열 6~10개가 읽기 좋게 들어갑니다. 15개는 사람이 읽을 수 있는 어떤 글자 크기로도 들어가지 않습니다.
- 대개 요약되어 있어야 합니다. 40,000행을 30행으로 줄이는 GROUP BY가 실제로 원했던 문서인 경우가 많습니다.
변환 전에 이 작업을 해 두느냐가 쓸 만한 보고서와 잘려 나간 표 600쪽을 가릅니다.
방향과 열 너비
읽기 편한 결과를 좌우하는 설정이 두 가지 있는데, 둘 다 기본값이 잘못되어 있습니다.
가로 방향으로 설정하세요. 열이 다섯 개 미만인 파일은 예외입니다. A4 세로에는 좁은 열이 대략 여섯 개, 가로에는 열 개가 들어갑니다.
배율(%)이 아니라 "너비를 한 페이지에 맞추기"로 줄이세요. 모든 스프레드시트에 있는 기능인데 찾는 사람이 거의 없습니다. Excel에서는 페이지 레이아웃 → 크기 조정 → 너비: 1페이지입니다. 이 설정이 없으면 11번째 열부터는 마지막 행 뒤에 따로 인쇄되어, 12쪽짜리 표가 40쪽짜리 PDF가 됩니다.
그다음, 한 번만 설정해 두면 좋은 것이 두 가지 있습니다.
- 모든 페이지에 머리글 행 반복. Excel에서는 *인쇄 제목 → 반복할 행(위쪽)*입니다. 머리글이 첫 페이지에만 있는 표는 두 번째 페이지부터 읽을 수 없습니다.
- 눈금선 켜기. 인쇄할 때는 기본적으로 꺼져 있는데, 너비가 넓은 표는 눈금선이 없으면 가로로 따라 읽기가 매우 어렵습니다.
상황별 방법
데스크톱의 스프레드시트에서
CSV를 열고 위의 설정을 적용한 뒤 인쇄 → PDF로 저장을 선택합니다. 여기서 소개하는 방법 중 결과물이 가장 보기 좋고, 코드를 쓰지 않고 제목과 페이지 번호를 넣을 수 있는 유일한 방법입니다.
다만 가져오기 단계는 조심하세요. Excel은 CSV를 열 때 날짜처럼 보이는 것을 모두 변환하고, PDF는 그 실수를 영구히 남깁니다. 주문 ID 열이 43831로 나타났다면 파일에는 2020-01-01이었던 것입니다. 데이터에 ID, 앞쪽의 0, 긴 숫자가 들어 있다면 텍스트로 가져오세요.
명령줄에서
스타일을 정할 필요 없이 단순하고 정확한 표가 필요하다면 이렇게 합니다.
csvlook data.csv | enscript -B -f Courier8 -o - | ps2pdf - out.pdf
레이아웃을 제어하고 싶다면 HTML을 거치는 편이 더 실용적입니다. 어떤 시스템에도 헤드리스 브라우저가 있고, 브라우저는 표의 쪽 나누기를 아주 잘합니다.
csvtomd data.csv > table.md
pandoc table.md -o out.pdf
HTML 방식의 장점은 스타일시트에 @page { size: A4 landscape }와 thead { display: table-header-group }을 쓰는 것만으로, 스프레드시트가 대화상자 깊숙이 숨겨 둔 두 가지, 곧 용지 방향과 머리글 반복을 그대로 얻을 수 있다는 점입니다.
휴대폰에서
실제로 변환이 필요해지는 곳이 바로 여기입니다. 파일은 이메일 안에 있고, 필요한 사람은 스프레드시트 앱 없이 화면에서 읽을 수 있는 것을 원하며, 노트북은 가까이에 없습니다.
중요한 점은 다른 곳과 같습니다. 내보내기 전에 필터링하고 열을 좁히세요. 열 5개, 행 40개의 휴대폰 크기 PDF는 좋은 결과물입니다. 파일 전체를 휴대폰 크기 PDF로 만든 것은 그렇지 않습니다.
PDF로 바로 변환하며, 내보낼 열과 스타일을 물려받지 않고 직접 고를 수 있습니다. 그 전에 시각적 필터 편집기나 SQL 쿼리로 인쇄할 가치가 있는 행만 남기도록 파일을 줄일 수 있고, 이 단계가 PDF를 읽을 수 있는지를 결정합니다.
기능PDF가 알맞지 않은 경우
세 가지 경우가 있으며, 요청의 대부분이 여기에 해당합니다.
"Excel 없이도 열 수 있게." 이미 열 수 있습니다. CSV는 메모장, TextEdit, 모든 브라우저, Google 스프레드시트, Numbers, 그리고 모든 휴대폰에서 열립니다. 보기 흉할까 걱정된다면 보통은 다른 형식이 아니라 더 좁은 파일이 해결책입니다.
"수정하지 못하게." PDF는 의미 있는 수준에서 읽기 전용이 아닙니다. 쉽게 편집할 수 있고 쉽게 추출할 수 있습니다. 필요한 것이 무결성이라면 답은 파일 형식이 아니라 서명이나 체크섬입니다.
"데이터를 활용할 수 있게." PDF는 표 형식 데이터를 담기에 가장 나쁜 그릇이며, 거기서 다시 꺼내는 일에는 하나의 산업이 달려 있을 정도입니다. 받는 사람이 숫자로 무언가를 한다면 CSV를 보내고, 요약 PDF를 함께 보내세요.
PDF가 정말 적합한 경우는 인쇄할 것, 쪽 구성을 고정해 보관할 것, 공식 기록에 첨부할 것, 전달되어도 레이아웃이 유지되어야 하는 것입니다.
보고서처럼 보이게 만들기
결과가 얼마나 좋아지는지를 기준으로 한 네 가지입니다.
- 숫자는 오른쪽 정렬, 텍스트는 왼쪽 정렬. 가독성을 이만큼 바꾸는 것은 없고, 설정도 하나뿐입니다.
- 소수점 자릿수 고정.
1.5와1.4999999가 섞인 열은 엉성해 보이고, 대개 실제 정밀도가 아니라 부동소수점 오차입니다. - 머리글과 바닥글 추가. 제목, 데이터가 다루는 날짜(인쇄한 날짜가 아닙니다), 페이지 번호를 넣습니다.
- 파일이 무엇인지 밝히기. 맨 위에 한 줄로 출처, 적용한 필터, 행 수를 적습니다. 반년 뒤에는 이것이 문서와 수수께끼를 가릅니다.
내보내기 전에 파일을 고쳐야 할 때, 예를 들어 열 반올림, 합계 계산, 행 삭제 같은 작업은 휴대폰에서 수식 열이 처리합니다. 결과는 CSV 안에 저장되므로 무엇으로 인쇄하든 숫자가 같습니다.
기능표 대신 차트
무언가를 변환하기 전에 물어볼 만한 질문이 있습니다. 받는 사람이 원하는 것은 행일까요, 아니면 전체 모양일까요? 12개월의 추세는 하나의 선이고, 12개월 표는 읽는 데 더 오래 걸리는 더 나쁜 선입니다.
가장 강력한 문서는 대개 첫 페이지에 차트를 두고 그 뒤에 요약한 표를 붙인 것입니다. 둘 다 만들 수 있는 도구라면 2분이면 되고, 어느 한쪽만 있을 때보다 훨씬 쓸모가 있습니다.