pdf文件中的ID字段是什么?

pdf文件中的ID字段是什么?,pdf,Pdf,我正在研究一个我看到它的内容如下 有人知道底部的ID字段是什么吗 %PDF-1.4 %ÓôÌá 1 0 obj << /CreationDate(D:20131119194420-06'00') /Creator(PDFsharp 1.32.3057-g \(www.pdfsharp.net\)) /Producer(PDFsharp 1.32.3057-g \(www.pdfsharp.net\)) >> endobj 2 0 obj << /Type/Ca

我正在研究一个我看到它的内容如下

有人知道底部的ID字段是什么吗

%PDF-1.4
%ÓôÌá
1 0 obj
<<
/CreationDate(D:20131119194420-06'00')
/Creator(PDFsharp 1.32.3057-g \(www.pdfsharp.net\))
/Producer(PDFsharp 1.32.3057-g \(www.pdfsharp.net\))
>>
endobj
2 0 obj
<<
/Type/Catalog
/Pages 3 0 R
>>
endobj
3 0 obj
<<
/Type/Pages
/Count 1
/Kids[4 0 R]
>>
endobj
4 0 obj
<<
/Type/Page
/MediaBox[0 0 612 792]
/Parent 3 0 R
/Contents 5 0 R
/Resources
<<
/ProcSet [/PDF/Text/ImageB/ImageC/ImageI]
/ExtGState
<<
/GS0 6 0 R
>>
/Font
<<
/F0 8 0 R
>>
>>
/Group
<<
/CS/DeviceRGB
/S/Transparency
/I false
/K false
>>
>>
endobj
5 0 obj
<<
/Length 99
/Filter/FlateDecode
>>
stream
xœŠI
€@ïyE¼)¸ÄŒ^—«ðŽ
2"êÍ×)ènšº ER¢¿ÊŠq>t¡¼pA-t#áö@ÒªÄú¯À†ã¢R7#ç(ý~qîq:og½
endstream
endobj
6 0 obj
<<
/Type/ExtGState
/ca 1
>>
endobj
7 0 obj
<<
/Type/FontDescriptor
/Ascent 1005
/CapHeight 727
/Descent -210
/Flags 32
/FontBBox[-550 -303 1707 1072]
/ItalicAngle 0
/StemV 0
/XHeight 548
/FontName/Verdana,Bold
>>
endobj
8 0 obj
<<
/Type/Font
/Subtype/TrueType
/BaseFont/Verdana,Bold
/Encoding/WinAnsiEncoding
/FontDescriptor 7 0 R
/FirstChar 0
/LastChar 255
/Widths[1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 341 402 587 867 710 1271 862 332 543 543 710 867 361 479 361 689 710 710 710 710 710 710 710 710 710 710 402 402 867 867 867 616 963 776 761 723 830 683 650 811 837 545 555 770 637 947 846 850 732 850 782 710 681 812 763 1128 763 736 691 543 689 543 867 710 710 667 699 588 699 664 422 699 712 341 402 670 341 1058 712 686 699 699 497 593 455 712 649 979 668 650 596 710 543 710 867 1000 710 1000 332 710 587 1048 710 710 710 1777 710 543 1135 1000 691 1000 1000 332 332 587 587 710 710 1000 710 963 593 543 1067 1000 596 736 341 402 710 710 710 710 543 710 710 963 597 849 867 479 963 710 587 867 597 597 710 721 710 361 710 597 597 849 1181 1181 1181 616 776 776 776 776 776 776 1093 723 683 683 683 683 545 545 545 545 830 846 850 850 850 850 850 867 850 812 812 812 812 736 734 712 667 667 667 667 667 667 1018 588 664 664 664 664 341 341 341 341 679 712 686 686 686 686 686 867 686 712 712 712 712 650 699 650]
>>
endobj
xref
0 9
0000000000 65535 f 
0000000015 00000 n 
0000000180 00000 n 
0000000228 00000 n 
0000000283 00000 n 
0000000538 00000 n 
0000000707 00000 n 
0000000750 00000 n 
0000000935 00000 n
trailer
<<
/ID[<48189AA5E6D2394D8EF6E7842493B4A9><48189AA5E6D2394D8EF6E7842493B4A9>]
/Info 1 0 R
/Root 2 0 R
/Size 9
>>
startxref
2167
%%EOF
%PDF-1.4
%ÓôÌá
10 obj
>
endobj
20 obj
>
endobj
30 obj
>
endobj
40 obj
>>
/团体
>
>>
endobj
50 obj
>
流动
克什米
ïyE¼)¸ÄŒ^-ð
2“Í×)šnšERŠÊq>t¼pA-tŠŠŠÒŠŠR7Š(ý~qîq:og½
尾流
endobj
60 obj
>
endobj
70 obj
>
endobj
80 obj
>
endobj
外部参照
0 9
0000000000 65535 f
00000000150万元
0000000 180 00000 n
0000000 228 00000 n
0000000 283 00000 n
0000000 538 00000n
000000070700000N
0000000 75000000n
0000000 9350 00000n
拖车
>
起始外部参照
2167
%%EOF

这是关于PDF的加密。ID仅在加密期间需要:

a program that makes PDF files is only required to create the file 
identifier if the file is to be encrypted.

它指出ID只需要合理地唯一,并给出具体的ISO编号以查找更多信息。

从@Millie的回答中添加一些注释:

当对PDF的某些方面有疑问时,首先应该查看规范

它将ID条目指定为:

ID数组(如果存在加密条目,则为必需;否则为可选;PDF 1.1)

构成文件标识符(见14.4“文件标识符”)的两字节字符串数组。如果存在加密条目,则该数组和两字节字符串应为直接对象,且应为未加密的

注1:由于ID项未加密,因此可以检查ID密钥,以确保在不解密文件的情况下访问正确的文件。字符串为直接对象且未加密的限制确保了这一点

注意2尽管此条目是可选的,但如果缺少此条目,可能会阻止文件在某些依赖于唯一标识的文件的工作流中运行

注3ID字符串的值用作加密算法的输入。如果这些字符串是间接的,或者ID数组是间接的,则在写入时将对这些字符串进行加密。这将导致读卡器的循环条件:必须按t顺序解密ID字符串o使用它们来解密字符串,包括ID字符串本身。前面的限制阻止了这种循环条件

(表15–文件拖车字典中的条目)

上述注释2本质上是建议添加此可选值,即使未使用本文件其他地方应用的应/应/可规范语言约定

该建议在参考的第14.4节中更为明确:

ID条目是可选的,但应使用

在这些规范中,应该表示建议,建议被定义为必须做的事情,除非有充分的理由不这样做,这意味着PDF编写器必须创建此条目,除非它可以反对该要求(我很难想到反对该要求的理由).这应该能回答米莉回答的问题

知道为什么PdfSharp和phantomj都创建了它吗

尤其是而不是,正如上面另一条评论所假设的那样,它被认为是良好的实践

关于ID数组的内容,本规范在第14.4节继续:

该条目的值应为两个字节字符串的数组。第一个字节字符串应为基于文件最初创建时的内容的永久标识符,且在文件增量更新时不得更改。第二个字节字符串应为基于文件当时的内容的更改标识符它是上次更新的。首次写入文件时,两个标识符应设置为相同的值。如果在解析文件引用时两个标识符都匹配,则很可能找到了正确且未更改的文件。如果只有第一个标识符匹配,则找到了正确文件的不同版本

为了帮助确保文件标识符的唯一性,应该通过消息摘要算法来计算它们

文件标识符的计算不需要是可复制的;重要的是标识符可能是唯一的

因此,当它声称

文件标识符(拖车字典中的/ID条目)。这是一个任意字节字符串

ID项的值不是一个字符串,而是一个由两个字符串组成的数组。字符串值不是任意的,而是建议通过散列获得的唯一值。因此,它们尤其是不能重新用于不同的文档,如果它们是他只是武断

这个说法也不完全正确

如果要加密文件,则生成PDF文件的程序只需创建文件标识符

即使不加密,该程序也必须有充分的理由不创建文件标识符,因为这是规范中的建议。因此,如果没有这些理由,则需要一个程序来创建文件标识符


综上所述,任何PDF用户都必须随时准备查找没有文件标识符的PDF…毕竟不创建它可能是有原因的。

在(ISO 19005)中,拖车ID似乎是强制性的,所以这可能是一些PDF生成器的一个考虑因素。

,尽管在我读到的内容中,它还没有给出太多信息,并且表明答案在第一个链接中。奇怪的是,你知道为什么PdfSharp和phantomjs都创建了它吗?嗯,
a program that makes PDF files is only required to create the file 
identifier if the file is to be encrypted.