명령줄에서 빈 PDF를 만드는 방법은 무엇입니까?

명령줄에서 빈 PDF를 만드는 방법은 무엇입니까?

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

배포 시 touch blank.pdf빈 PDF가 생성됩니다.문서. 빈 PDF를 생성할 수 있는 명령줄 도구가 있습니까?페이지?

답변1

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 상수 이미지"를 의미하지만 실제로는 "x 캔버스"로 생각할 수 있습니다. 이는 단일 색상 블록을 지정하는 방법이지만 이 경우에는 그렇지 않습니다. 더 많은 정보를 원하시면 방문해주세요http://imagemagick.org/Usage/canvas/#solid이것은 ImageMagick의 "사실상" 매뉴얼입니다. [파이프에서 추가된 정보] (이와 같은 것들은 pdf:a파일의 형식을 명시적으로 선언하는 데 사용할 수 있습니다. label:'some text', gradient:, rose:logo: 특수 파일 형식의 다른 예로 나타납니다.)

Anko는 이 수정 사항을 별도의 답변으로 게시할 것을 제안했기 때문에 그렇게 하고 있습니다.

답변2

그림가능한 가장 작은 GIF, 가장 작은 빈 페이지 PDF는 너무 작아서 불필요하지만 무해한 메타데이터가 파일 크기의 중요한 부분이 되고 압축으로 인해 실제로 작업이 더 단순해지기 때문에 수동으로 계산해야 합니다.. 또한 파일 구조의 어떤 비트가 필요하고 어떤 비트가 필요하지 않은지에 관한 PDF 사양의 규칙에 세심한 주의가 필요합니다. ( /Resources비어 있더라도 페이지 개체에 사전이 포함되어야 한다는 것을 알고 계셨습니까?아니요스트림을 포함해야 합니까 /Contents? )

PDF 1.5 개체와 상호 참조 스트림(파일이 ASCII로 완전히 인쇄 가능하다는 장점이 있음)을 사용하지 않는 경우 가능한 최선의 방법은 317바이트입니다. 복사하여 붙여넣는 경우 4개의 상호 참조 테이블 항목( 0 4및 그 사이의 줄) 모두 뒤에 공백이 있어야 합니다 trailer<<....아니요다음의 마지막 개행 문자여야 합니다 %%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진수 덤프를 해당 원시 바이너리 바이트로 바꾸거나 길이가 328바이트인 파일 /Length 15로 변경하고 허용해야 합니다. /Length 30/Filter/ASCIIHexDecode)

%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.4mm)로 표시되는 적절한 너비와 높이를 대체하십시오. 예를 들어 595 842A4의 경우. 원하는 용지 크기의 빈 PDF를 출력하는 쉘 스크립트에 이를 포함시킬 수 있습니다. 유일한 까다로운 부분은 startxref객체 3의 크기가 변경되더라도 오프셋이 정확하게 유지되는지 확인하는 것입니다.

답변3

(ImageMagick 유틸리티)가 설치되어 있는 경우 convert다음을 수행할 수 있습니다.

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

답변4

pdfTeX를 사용할 수 있습니다:

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

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

그러나 이로 인해 TeX 설치의 기본 용지 크기가 적용됩니다. 크기를 명시적으로 설정하려면 LaTeX로 이동할 수 있습니다.

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

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

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

TeX보다 훨씬 조용하지만 덜 컴팩트한 출력(약 2300바이트)을 생성합니다.

관련 정보