명령 행에서 빈 PDF를 작성하는 방법


57

최근에 하나의 빈 PDF 페이지 (8.5 "x 11"크기)가 필요했고 명령 줄에서 만드는 방법을 모른다는 것을 깨달았습니다.

발행 touch blank.pdf하면 빈 PDF 파일이 생성 됩니다 . 빈 PDF 페이지 를 생성하는 명령 줄 도구가 있습니까?


왜 필요한가요? 비 이중 프린터에서 양면 인쇄를 에뮬레이트하기위한 인쇄 패키지가 있습니다. 이렇게하려면 홀수 페이지 수가있는 작업에 대해 짝수 페이지를 인쇄 할 때 빈 페이지를 추가로 배치해야합니다. 이를 위해 양식 피드를 lp로 보냅니다. 빈 페이지 파일 등을 만들지 않고 트릭을 수행합니다.
Joe

10
@Joe Brian이 이것을 원하거나 필요로하는 이유는 우리 사업이 아닙니다.
Iain 홀더

6
@IainHolder : 더 많은 SE 사용자가 당신처럼 생각했으면 좋겠습니다.
Mehrdad

3
@IainHolder-나는 OP의 사업을 엿 보려고하지 않습니다! 나는 그것이 내가하고있는 것과 같은 것이면 다른 방법이 있다고 제안하고 싶었습니다. 종종 이와 같은 것은 xy 문제 ( meta.stackexchange.com/questions/66377/what-is-the-xy-problem )이므로 목표가 무엇인지 묻는 것이 좋습니다.
Joe

5
위의 링크를 자세히 읽었습니다. 나는 이것이 논란의 여지가있는 문제라는 것을 몰랐다. TL; DR-당신이하고있는 것을 알고 있다면, 당신은 당신이 묻는 질문에 대한 답변을 원합니다. 잘 모르는 사람이라면 잘못된 질문을하고 실제 문제가 무엇을 도울 수 있는지에 대한 설명을했을 수 있습니다.
Joe

답변:


85

convertKetan의 답변에 사용 된 ImageMagick 유틸리티는 다음과 같이 쓸 수 있습니다.

convert xc:none -page Letter a.pdf

또는

convert xc:none -page A4 a.pdf

또는 (가로 A4 용지의 경우)

convert xc:none -page 842x595 a.pdf

, 빈 텍스트 파일을 만들지 않고. @chbrown은 이것이 더 작은 pdf 파일을 생성한다는 것을 알았습니다.

"xc :"는 "X Constant Image"를 의미하지만 실제로는 "x canvas"로 생각할 수 있습니다. 색상의 단일 블록을 지정하는 방법입니다 (이 경우에는 없음). 자세한 정보는 http://imagemagick.org/Usage/canvas/#solid에 있으며 ImageMagick의 "사실상"매뉴얼입니다. [파이프 정보로 보충 (같은 것들 pdf:a명시 적으로 파일의 형식을 선언하는 데 사용 될 수있다. label:'some text', gradient:, rose:logo: 특별 파일 포맷의 다른 예 것 같습니다.)

Anko는이 수정 사항을 별도의 답변으로 게시 할 것을 제안 했으므로 수행하고 있습니다.


2
ImageMagick에는 실제로 유용한 매뉴얼이 없습니다. "xc : <foo>"는 "X Constant Image"를 의미하지만 실제로는 "x canvas"로 생각할 수 있습니다. 색상의 단일 블록을 지정하는 방법입니다 (이 경우 none) . ImageMagick 의 "사실상"매뉴얼 인 imagemagick.org/Usage/canvas/#solid에 대한 자세한 정보 .
파이프

2
현명한 용지 크기를 원하는 경우 Letter 대신 A4에서도 작동합니다.
TRiG

@TRiG : 물론입니다. 편집 할 때 언급하지 않은 것이 유감이지만이 경우에는 알고있었습니다.
BartekChom

내가 대답 한 것으로 대답을 바꿨습니다~/bin
Brian Fitzpatrick

빈 페이지가 n 인 pdf 파일을 생성하도록이 명령을 변경할 수 있습니까?
Brian Fitzpatrick

34

가장 작은 GIF 처럼 가장 작은 빈 페이지 PDF는 직접 작성해야합니다. 크기가 너무 작기 때문에 불필요한 메타 데이터 비트가 파일 크기의 중요한 부분이되고 압축하면 실제로 크기가 커지기 때문 입니다. 또한 파일 구조의 비트가 필요하거나 필요하지 않은 비트에 대한 PDF 사양의 규칙에주의를 기울여야합니다. (페이지 개체가 /Resources비어 있어도 사전을 포함해야 하지만 스트림 을 포함 할 필요 는 없다는 것을 알고 계셨습니까 /Contents?)

PDF 1.5 객체 및 상호 참조 스트림을 사용하지 않으면 (파일을 완전히 인쇄 가능한 ASCII로 사용할 수 있다는 이점이 있음) 317 바이트가 최선이라고 생각합니다. 복사 및 붙여 넣기하면, 상호 참조 테이블 항목의 네 가지에 후행 공백 (사이의 선이있을 필요가 있다는 사실을 양지 0 4trailer<<...), 거기되어 있지 애프터 마지막 개행 있어야 %%EOF.

%PDF-1.4
1 0 obj<</Type/Catalog/Pages 2 0 R>>endobj
2 0 obj<</Type/Pages/Count 1/Kids[3 0 R]>>endobj
3 0 obj<</Type/Page/MediaBox[0 0 612 792]/Parent 2 0 R/Resources<<>>>>endobj
xref
0 4
0000000000 65535 f 
0000000009 00000 n 
0000000052 00000 n 
0000000101 00000 n 
trailer<</Size 4/Root 1 0 R>>
startxref
178
%%EOF

상호 참조 테이블을 수동으로 제작 된 v1.5 상호 참조 스트림으로 바꾸면 더 이상 인쇄 할 수없는 ASCII (294 바이트) 가격으로 파일이 약간 작아집니다. (가독성을 위해 전혀 입력 할 수는 없지만 아래의 외부 참조 스트림은 16 진 덤프되었지만 스트림 사전 에는 반영 되지 않습니다 . 유효한 PDF를 복구하려면 16 진 덤프를 원시 이진 바이트에 해당하거나, 변경 /Length 15/Length 30/Filter/ASCIIHexDecode328 바이트 길이의 파일을 수락.)

%PDF-1.5
1 0 obj<</Type/Catalog/Pages 2 0 R>>endobj
2 0 obj<</Type/Pages/Count 1/Kids[3 0 R]>>endobj
3 0 obj<</Type/Page/MediaBox[0 0 612 792]/Parent 2 0 R/Resources<<>>>>endobj
4 0 obj<</Type/XRef/Size 5/W[1 1 1]/Root 1 0 R/Length 15>>stream
0000ff01090001340001650001b200endstream endobj
startxref
178
%%EOF

또한 객체 1에서 3까지 객체를 객체 스트림에 래핑하는 방법을 실험했지만 스트림이 압축되어 있어도 저장하는 것보다 더 많은 오버 헤드가 추가됩니다.

외부 참조 스트림의 가능한 대안적인 제형은

4 0 obj<</Type/XRef/Size 4/W[0 1 0]/Index[1 4]/Root 1 0 R/Length 4>>stream
091365b2endstream endobj

슬프게도, 실제 스트림 데이터의 길이가 상당히 절약 되었음에도 불구하고 추가 /Index[1 4]는 1 바이트의 절약을 모두 소모합니다. 또한 객체 0을 파일에서 완전히 제거 할 수 있는지 여부는 확실하지 않습니다. (그것은 개체 0 세대 번호가 있어야하는지 여부 -1 나에게도 불분명하다. 경우 그이있어 필요하지, 당신이 실제로 더 많은 바이트를 저장

4 0 obj<</Type/XRef/Size 5/W[1 1 0]/Root 1 0 R/Length 10>>stream
000001090134016501b2endstream endobj

.)

용지 크기를 변경하려면 612 792PostScript 포인트 (72 PostScript 포인트 = 1 US 인치 또는 25.4 밀리미터)로 표시된 적절한 너비와 높이로 교체하십시오 . 예를 들어 595 842A4의 경우입니다. 원하는 용지 크기의 빈 PDF를 뱉어내는 쉘 스크립트에 이것을 포함시킬 수 있습니다. 유일한 까다로운 부분은 startxref객체 3의 크기가 변경 되어도 오프셋이 정확하게 유지 되도록하는 것 입니다.



5
meta.codegolf에 게시하여 다음과 같은 내용이 제대로
Nate Eldredge

이것은 텍스트 편집기 에서 빈 페이지로 유효한 PDF 문서를 만드는 좋은 솔루션이지만 OP가 요청한 명령 줄 솔루션 과 정확히 일치하지는 않습니다 .
Kurt Pfeifle

23

당신이있는 경우 convert(AN ImageMagick이 유틸리티)를 설치, 당신이 할 수 있습니다 :

touch a.txt && convert a.txt -page Letter a.pdf

1
convert또한 -size출력 PDF 크기를 설정하는 데 사용할 수 있는 옵션이 있습니다.
mkc

21
convert xc:none -page Letter a.pdf빈 txt 파일을 만들지 않고 쓸 수도 있습니다.
BartekChom

3
@BartekChom의 방법은 더 빈 페이지를 만드는 것 같습니다. 더 작은 파일을 생성 할 수 있으며 파일을 선택할 수 없으며 (null)글꼴 오류가 발생 하지 않습니다 .
chbrown

1
@BartekChom 나는 그것을 별도의 답변으로 원하므로 그것을 찬성 할 수 있습니다.
Anko

1
내가 가지고 convert.im6: improper image header a.txt이 '@ 오류 / txt.c / ReadTXTImage / 429. convert.im6 : 이미지가 정의되지 않았습니다a.pdf' @ error/convert.c/ConvertImageCommand/3044.
Sigur

12

echo .bp | groff -T pdf > t.pdf

세계에서 가장 저평가 된 소프트웨어 인 groff가 제공합니다.


2
내가 얻을 groff: can't find `DESC' filegroff:fatal error: invalid device `pdf'에 CentOS 7.2에 groff의 버전 1.22.2와.
gla3dr

bash 4.1.2runninggroff 1.18.1.4
zundarz를

2
@ gla3dr groff-base만이 아닌 완전한 groff 패키지를 설치하십시오.
기린 선장

1
.bp"break page"를 나타 내기 때문에 2 페이지의 문서가 생성됩니다. 1 페이지의 문서를 만들려면 더 간단한 작업 만 수행하십시오 echo | groff -T pdf > blank.pdf.
Faheem Mitha

솔루션 아주 좋은, 그러나 echo .bp참으로 교체해야합니다 echo, @FaheemMitha 말했다처럼
myrdd

8

pdfTeX를 사용할 수 있습니다 :

echo '\shipout\hbox{}\end' | pdftex

texput.pdfImageMagick이 사용하는 것의 절반 인 약 900 바이트의 빈 단일 페이지를 생성 합니다.

그래도 TeX 설치시 용지 크기 기본값을 사용하게됩니다. 크기를 명시 적으로 설정하려면 대신 LaTeX로 이동하십시오.

echo '\documentclass[letterpaper]{article}\usepackage[pass]{geometry}
      \begin{document}\shipout\hbox{}\end{document}' | pdflatex

또 다른 옵션은 편리한 ps2pdf스크립트 이지만 Ghostscript의 PDF 드라이버를 사용하는 것입니다 .

echo showpage | ps2pdf -sPAPERSIZE=letter - blank.pdf

이는 TeX보다 훨씬 조용하지만 적은 출력 (약 2300 바이트)을 생성합니다.


1
변형을 사용합니다 echo "" | ps2pdf -sPAPERSIZE=a4 - blank.pdf. 2200 바이트에서 약간 더 작습니다.
Faheem Mitha

echo '\documentclass[letterpaper]{article}\usepackage[pass]{geometry} \begin{document}\shipout\hbox{}\end{document}' | pdflatex를 만듭니다 article.pdf. blank.pdf직접 만들 수 있습니까?
Faheem Mitha

@ FaheemMitha : 흠, 빈 페이지가있는 ps2pdf가 0 페이지를 포함하는 PDF 파일을 생성 할 것으로 기대하지만 실제로 시도 할 때 페이지가 있습니다. 그 어디에서 오는지 궁금 ...
헤닝 Makholm

@Faheem : 최소한 Texlive를 사용 -jobname <basename>하면 명령 줄 에서 출력 파일의 기본 이름을 설정할 수 있습니다 .
Henning Makholm

1
@FaheemMitha : 각 페이지 \shipout\hbox{}또는 showpage한 페이지를 생성합니다. TeX와 Postscript에는 모두 사용할 수있는 반복 구조가 있지만 원하는 스크립팅 언어를 사용하여 명령을 적절한 횟수만큼 복제하는 것이 더 간단 합니다.
Henning Makholm

3

빈 페이지로 PDF를 만드는 쉬운 방법은 다음을 사용하는 것입니다 rst2pdf.

echo -e '.. raw:: pdf\n\n   PageBreak' | rst2pdf -o blank.pdf

단일 공간에서 에코 만 수행하면 페이지가없는 PDF 파일 (빈 파일과 동일하지 않음)이 생깁니다.


2

명령 행에 다음을 입력하십시오.

ps2pdf blank.pdf

이 명령 ps2pdf은 PostScript 파일을 pdf로 변환하는 데 사용됩니다

ps2pdf file.ps file.pdf

1
ps2pdf blank.pdfPostscript 파일을 인수로 기대하기 때문에 오류를 반환합니다. 그리고 두 번째 명령에는 기존의이 필요합니다 file.pdf. 뭔가 빠졌습니까?
Faheem Mitha

1
이것을 시도하십시오 : 1 touch blank.ps.; 2 ps2pdf blank.ps blank.pdf.; 3.pdftk A=1.pdf B=blank.pdf cat A1-end B output 2.pdf
빅토리아 스튜어트

2

마지막으로 빈 페이지를 보여주는 PDF를 만드는 Ghostscript 방법은 다음과 같습니다.

 gs -sDEVICE=pdfwrite -o empty.pdf -c showpage

페이지 크기는 Letter 일 가능성이 높습니다. A4를 원한다면 다음을 사용하십시오.

 gs -sDEVICE=pdfwrite -o empty.pdf -g5950x8420 -c showpage

배경 :-c매개 변수 뒤에는 유효한 PostScript 문자열이 올 수 있으며 Ghostscript는 해석하려고합니다. 그리고 PostScript의 빈 페이지는 다음 짧은 코드 블록으로 표시됩니다.

%!PS
showpage
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.