Nice programing

가능한 가장 작은 유효한 PDF는 무엇입니까?

nicepro 2020. 12. 8. 20:02
반응형

가능한 가장 작은 유효한 PDF는 무엇입니까?


가장 작은 GIF 를 본 단순한 호기심에서 가능한 가장 작은 유효한 PDF 파일은 무엇입니까?


이것은 흥미로운 문제입니다. 책을 읽고 다음과 같이 시작할 수 있습니다.

%PDF-1.0
1 0 obj<</Type/Catalog/Pages 2 0 R>>endobj 2 0 obj<</Type/Pages/Kids[3 0 R]/Count 1>>endobj 3 0 obj<</Type/Page/MediaBox[0 0 3 3]>>endobj
xref
0 4
0000000000 65535 f
0000000010 00000 n
0000000053 00000 n
0000000102 00000 n
trailer<</Size 4/Root 1 0 R>>
startxref
149
%EOF

291 바이트의 PDF 기쁨입니다. Acrobat이 열지 만 다소 불만이 있습니다. 그 안에 한 페이지가 있고 그것은 사양에서 허용하는 최소 3/72 "정사각형입니다.

그러나 Acrobat X는 더 이상 상호 참조 테이블을 사용하지 않으므로 제거 할 수 있습니다.

%PDF-1.0
1 0 obj<</Type/Catalog/Pages 2 0 R>>endobj 2 0 obj<</Type/Pages/Kids[3 0 R]/Count 1>>endobj 3 0 obj<</Type/Page/MediaBox[0 0 3 3]>>endobj
trailer<</Size 4/Root 1 0 R>>

Acrobat이 불평하지만 열립니다. 이제 우리는 178 바이트입니다. 트레일러에 / Size가 필요하지 않다는 것이 밝혀졌습니다. 이제 우리는 172에 있습니다.

%PDF-1.0
1 0 obj<</Type/Catalog/Pages 2 0 R>>endobj 2 0 obj<</Type/Pages/Kids[3 0 R]/Count 1>>endobj 3 0 obj<</Type/Page/MediaBox[0 0 3 3]>>endobj
trailer<</Root 1 0 R>>

사전에 성가신 / Type 요소가 모두 필요하지는 않습니다.

%PDF-1.0
1 0 obj<</Pages 2 0 R>>endobj 2 0 obj<</Kids[3 0 R]/Count 1>>endobj 3 0 obj<</MediaBox[0 0 3 3]>>endobj
trailer<</Root 1 0 R>>

이제 우리는 138 바이트입니다.

또한 사양에 "간접 참조가 될 것"이라고 말하고 / Count가 필요하고 헤더가 "반드시"% PDF-1.0이되었을 때 느슨한 제안을하고있는 것으로 나타났습니다. 이것은 제가 만들 수있는 것 중 가장 작으며 Acrobat X에서 열 수 있습니다.

%PDF-1.
trailer<</Root<</Pages<</Kids[<</MediaBox[0 0 3 3]>>]>>>>>>

70 바이트.

이제 내 편집기는 Windows 개행 규칙을 사용하지만 Acrobat은 Windows, Mac 또는 Unix 규칙을 허용하므로 16 진수 편집기를 사용하여 \ r \ n을 \ r로 바꾸고 마지막 개행을 모두 제거하여 67 바이트가 남았습니다.

25 50 44 46 2D 31 2E 0D 74 72 61 69 6C 65 72 3C 
3C 2F 52 6F 6F 74 3C 3C 2F 50 61 67 65 73 3C 3C 
2F 4B 69 64 73 5B 3C 3C 2F 4D 65 64 69 61 42 6F 
78 5B 30 20 30 20 33 20 33 5D 3E 3E 5D 3E 3E 3E 
3E 3E 3E 

마지막 끝 사전 (>>)을 떼어 내려고했지만 Acrobat에는 없습니다. Google 크롬 (FoxIt)에 내장 된 PDF 읽기는 열리지 않습니다.

PostScript (HA! 내가 뭘했는지 보시 겠어요?)로서 Acrobat이 파일을 "복구"하는 데 동의하면 파일이 최대 3550 바이트 (대부분 선택적 메타 데이터)까지 증가하지만 여러 명확한 사양 위반이 남습니다.


hello world 예제를 열 수 없습니다.

텍스트 내용이있는 작은 파일의 경우 :

%PDF-1.2 
9 0 obj
<<
>>
stream
BT/ 9 Tf(Test)' ET
endstream
endobj
4 0 obj
<<
/Type /Page
/Parent 5 0 R
/Contents 9 0 R
>>
endobj
5 0 obj
<<
/Kids [4 0 R ]
/Count 1
/Type /Pages
/MediaBox [ 0 0 99 9 ]
>>
endobj
3 0 obj
<<
/Pages 5 0 R
/Type /Catalog
>>
endobj
trailer
<<
/Root 3 0 R
>>
%%EOF

"Hello World"를 표시하는 가장 작은 pdf를 만들 것이라고 생각했습니다. 텍스트는 왼쪽 하단에 있습니다. 9 포인트 글꼴에 대해 죄송합니다. 더 큰 글꼴은 추가 바이트가 필요합니다. :)

Adobe Reader X의 경우 172 바이트 (줄 바꿈 전용 줄 바꿈으로 저장하고 후행 줄 바꿈 또는 널 바이트없이 저장 한 경우) :

%PDF-1.
1 0 obj<</Kids[<</Parent 1 0 R/Resources<<>>/Contents 2 0 R>>]>>endobj 2 0 obj<<>>stream
BT/ 9 Tf(Hello World)' ET
endstream
endobj trailer<</Root<</Pages 1 0 R>>>>

Chrome에 내장 된 PDF 뷰어의 경우 120 바이트 :

%PDF 1 0 obj<</Pages<</Kids[<</Contents<<>>stream
BT 9 Tf(Hello World)' ET endstream>>]>>>>endobj trailer<</Root 1 0 R>>

Chrome에서 쉽게 보려면 다음 URI를 주소 표시 줄에 붙여 넣으세요 (연결할 수없고 다른 브라우저에서는 전혀 작동하지 않음).

data:application/pdf,%25PDF%201%200%20obj%3C%3C%2FPages%3C%3C%2FKids%5B%3C%3C%2FContents%3C%3C%3E%3Estream%0ABT%209%20Tf(Hello%20World)'%20ET%20endstream%3E%3E%5D%3E%3E%3E%3Eendobj%20trailer%3C%3C%2FRoot%201%200%20R%3E%3E

참고URL : https://stackoverflow.com/questions/17279712/what-is-the-smallest-possible-valid-pdf

반응형