mygems

CSV를 PDF로 변환하는 방법

CSV에는 페이지가 없고 PDF는 페이지로만 이루어져 열이 잘립니다. 변환하기 전에 무엇을 담을지 정하는 방법을 알려드립니다.

작성: uos ·

이 작업이 성가신 이유는 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로 만든 것은 그렇지 않습니다.

CSV File Viewer - Smart CSViPhone 및 iPad · Android

PDF로 바로 변환하며, 내보낼 열과 스타일을 물려받지 않고 직접 고를 수 있습니다. 그 전에 시각적 필터 편집기나 SQL 쿼리로 인쇄할 가치가 있는 행만 남기도록 파일을 줄일 수 있고, 이 단계가 PDF를 읽을 수 있는지를 결정합니다.

기능

PDF가 알맞지 않은 경우

세 가지 경우가 있으며, 요청의 대부분이 여기에 해당합니다.

"Excel 없이도 열 수 있게." 이미 열 수 있습니다. CSV는 메모장, TextEdit, 모든 브라우저, Google 스프레드시트, Numbers, 그리고 모든 휴대폰에서 열립니다. 보기 흉할까 걱정된다면 보통은 다른 형식이 아니라 더 좁은 파일이 해결책입니다.

"수정하지 못하게." PDF는 의미 있는 수준에서 읽기 전용이 아닙니다. 쉽게 편집할 수 있고 쉽게 추출할 수 있습니다. 필요한 것이 무결성이라면 답은 파일 형식이 아니라 서명이나 체크섬입니다.

"데이터를 활용할 수 있게." PDF는 표 형식 데이터를 담기에 가장 나쁜 그릇이며, 거기서 다시 꺼내는 일에는 하나의 산업이 달려 있을 정도입니다. 받는 사람이 숫자로 무언가를 한다면 CSV를 보내고, 요약 PDF를 함께 보내세요.

PDF가 정말 적합한 경우는 인쇄할 것, 쪽 구성을 고정해 보관할 것, 공식 기록에 첨부할 것, 전달되어도 레이아웃이 유지되어야 하는 것입니다.

보고서처럼 보이게 만들기

결과가 얼마나 좋아지는지를 기준으로 한 네 가지입니다.

  1. 숫자는 오른쪽 정렬, 텍스트는 왼쪽 정렬. 가독성을 이만큼 바꾸는 것은 없고, 설정도 하나뿐입니다.
  2. 소수점 자릿수 고정. 1.5와 1.4999999가 섞인 열은 엉성해 보이고, 대개 실제 정밀도가 아니라 부동소수점 오차입니다.
  3. 머리글과 바닥글 추가. 제목, 데이터가 다루는 날짜(인쇄한 날짜가 아닙니다), 페이지 번호를 넣습니다.
  4. 파일이 무엇인지 밝히기. 맨 위에 한 줄로 출처, 적용한 필터, 행 수를 적습니다. 반년 뒤에는 이것이 문서와 수수께끼를 가릅니다.
CSV Editor - Smart CSViPhone 및 iPad

내보내기 전에 파일을 고쳐야 할 때, 예를 들어 열 반올림, 합계 계산, 행 삭제 같은 작업은 휴대폰에서 수식 열이 처리합니다. 결과는 CSV 안에 저장되므로 무엇으로 인쇄하든 숫자가 같습니다.

기능

표 대신 차트

무언가를 변환하기 전에 물어볼 만한 질문이 있습니다. 받는 사람이 원하는 것은 행일까요, 아니면 전체 모양일까요? 12개월의 추세는 하나의 선이고, 12개월 표는 읽는 데 더 오래 걸리는 더 나쁜 선입니다.

가장 강력한 문서는 대개 첫 페이지에 차트를 두고 그 뒤에 요약한 표를 붙인 것입니다. 둘 다 만들 수 있는 도구라면 2분이면 되고, 어느 한쪽만 있을 때보다 훨씬 쓸모가 있습니다.

자주 묻는 질문

CSV 파일을 PDF로 변환하려면 어떻게 하나요?
스프레드시트에서 열어 가로 방향과 '너비를 1페이지에 맞추기'를 설정하고, 머리글 행 반복과 눈금선을 켠 뒤 PDF로 인쇄합니다. 명령줄에서는 HTML이나 Markdown으로 변환해 브라우저나 pandoc이 쪽 나누기를 하게 합니다. 휴대폰에서는 PDF로 바로 내보내는 앱을 쓰면 몇 번의 탭으로 끝납니다. 세 경우 모두 파일을 먼저 필터링하는 것이 결과를 읽을 수 있는지를 결정합니다.
PDF에서 열이 잘리는 이유는 무엇인가요?
인쇄 배율 기본값이 100%라서, 페이지 너비를 넘는 부분이 줄어들지 않고 마지막 행 뒤에 별도의 페이지로 인쇄되기 때문입니다. '너비를 1페이지에 맞추기'를 설정하세요. Excel에서는 페이지 레이아웃 → 크기 조정에 있습니다. 그 크기로도 읽을 수 없다면 한 페이지에 비해 열이 너무 많은 것이므로, 줄이는 것이 아니라 열을 좁혀야 합니다.
PDF의 모든 페이지에 머리글 행을 반복하려면 어떻게 하나요?
Excel에서는 페이지 레이아웃 → 인쇄 제목 → '반복할 행(위쪽)'에 머리글 행을 지정합니다. Google 스프레드시트에서는 인쇄 → 머리글 및 바닥글 → 고정된 행 반복입니다. HTML 기반 변환에서는 머리글을 `thead`에 넣고 `display: table-header-group`을 지정하면 같은 효과를 얻습니다.
PDF와 CSV 중 무엇을 보내야 하나요?
받는 사람이 숫자로 무언가를 한다면 CSV를 보내세요. PDF는 표 데이터를 다시 꺼내기 가장 어려운 형식이기 때문입니다. 읽거나, 인쇄하거나, 쪽 구성을 고정해 보관하는 용도라면 PDF를 보냅니다. PDF로 만들어도 데이터를 수정할 수 없게 되는 것은 아니므로, 무결성이 걱정이라면 답이 아닙니다.
CSV를 PDF로 내보낼 때 행은 몇 개가 좋은가요?
질문에 답할 수 있는 만큼, 가능한 한 적게 담으세요. 수만 행짜리 PDF는 첫 페이지 너머까지 읽는 사람이 없는 문서입니다. 관련 있는 행으로 필터링하거나 GROUP BY로 요약하세요. 실제로 원했던 것은 30행의 요약과 차트인 경우가 많고, 전체 파일은 원본 CSV로 첨부하는 편이 낫습니다.
PDF에서 날짜와 ID가 바뀐 이유는 무엇인가요?
PDF가 만들어지기 전, 가져오는 시점에 스프레드시트가 변환했기 때문입니다. 주문 ID는 일련번호 날짜가 되고, 긴 숫자는 지수 표기가 되며, 앞쪽의 0은 사라집니다. 열을 자동 감지하게 두지 말고 CSV를 텍스트로 가져오거나, 값을 다시 해석하지 않는 도구로 변환하세요. PDF는 그 앞 단계에서 생긴 실수를 영구히 기록합니다.

uos — PDF를 내보내는 Smart CSV Viewer를 만들고 있어서, PDF에 무엇을 담아야 하고 무엇을 담지 말아야 하는지 자주 질문을 받습니다.