我想知道我们是否可以仅使用编码将文件类型从 png、jpeg 更改为 pdf。 因此,为了做到这一点,我首先必须弄清楚 pdf 文件与其他文件的不同之处。
最佳答案
您可以通过添加页眉和预告片将 image.PDF 文件编写为纯文本,因此这是一个简单的单色图像,如简单的 f 和 0 所示。注意彩色图像会更加多样化。所以每个黑色像素是 000000
,每个白色像素是 FFFFFF
%PDF-1.7
%µ¶
1 0 obj
<<
/Type /Catalog
/Pages 2 0 R
>>
endobj
2 0 obj
<<
/Type /Pages
/Count 1
/Kids [ 5 0 R ]
>>
endobj
3 0 obj
<<
/Length 2683981
/Type /XObject
/Subtype /Image
/Width 744
/Height 592
/BitsPerComponent 8
/ColorSpace /DeviceRGB
/Filter /ASCIIHexDecode
>>
stream
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
....
Dozens of lines later
ffffffffffffffffffffffffffffffffff000000ffffffffffffffffffffffff
ffffffffffffffffffffffffffffff000000000000000000000000ffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000
....
Thousands of lines later
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
>
endstream
endobj
4 0 obj
<<
/Length 43
>>
stream
q
557.93026 0 0 443.9445 0 0 cm
/Img3 Do
Q
endstream
endobj
5 0 obj
<<
/Type /Page
/MediaBox [ 0 0 557.93026 443.9445 ]
/Rotate 0
/Resources <<
/XObject <<
/Img3 3 0 R
>>
>>
/Contents 4 0 R
/Parent 2 0 R
>>
endobj
xref
0 6
0000000000 65536 f
0000000016 00000 n
0000000070 00000 n
0000000136 00000 n
0002684310 00000 n
0002684406 00000 n
trailer
<<
/Size 6
/Info <<
/Producer (SumatraPDF 3.4.14236)
>>
/Root 1 0 R
>>
startxref
2684589
%%EOF
这对于发布来说会非常臃肿,因此通常会导入源 scrap.PNG 或 fuzzy.peg 并使用 zip 样式“DeFlated”(“FlateDecode”重新加密为二进制)
SumatraPDF 生成的源 PDF 只有 23082 字节,如下所示,但对于这个问题,它被故意扩展以显示内部工作原理,但是图像可以由任何 PDF 库压缩回二进制文件
3 0 obj
<</DecodeParms<<>>/Type/XObject/Subtype/Image/Width 744/Height 592/BitsPerComponent 8/ColorSpace/DeviceRGB/Length 23082/Filter/FlateDecode>>
stream
xœíÙ–Ûº®Eóÿ?íûpƨëm‰àBÃNšó)±ÑAX®T>..............
注意,一旦放入 PDF 中,图像就不再具有 PNG 标识,也不具有 DPI (PDF 不可逆)
关于java - 是什么使 Pdf 文件成为 Pdf 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70381266/