我一直想看到PDF的内部结构,比如它的原始源代码,这样我就能查看它。有什么方法可以做到吗?
qpdf --qdf original.pdf unpacked.pdf
另一个有用且免费的工具(GPL许可证,但据我所知仅适用于Linux)来查看PDF文件是当然PDFEdit。这个甚至带有图形用户界面(如果你喜欢),同时仍然允许您访问内部结构和“原始” PDF代码。
>>
/Border [0 0 0]
/Rect [121.02 332.48 363.24 343.64]
/StructParent 1321
/Subtype /Link
/Type /Annot
>>
endobj
64579 0 obj
<<
/Filter /FlateDecode
/Length 5771
>>
stream
Ũn0x/�+�}�ǹ����\֛ bYO�5[��X��W��L��(�������V�A3�C���������u큋_�a��ךm2N�6� ��A��8
�d���NQ⺢GI��G�[��)�̉Y��R�y{R����&�&�;��g�k1���ҋeTC�(W��`���*��(;�AEc<= mnZ+��|T��v
�.��зe�aޞ��V4�b���L����k�Oj.ֿ�y�����kc|I�� ��C�0��Hf�7d�/�z���m��o��A��B��IJ�%�.
!�%f�б���&�ޒ�4Ύ7�l�3���3`�
endstream
endobj
64580 0 obj
<<
/Border [0 0 0]
/Dest <E4AE7DD2769553EF1668>
/Rect [219 648.5 256.8 659.66]
/StructParent 1323
/Subtype /Link
/Type /Annot
>>
其他答案的一些最新观察。
Adobe不断地移动他们开源的2008标准副本,目前在此处 https://opensource.adobe.com/dc-acrobat-sdk-docs/standards/pdfstandards/pdf/PDF32000_2008.pdf
Web Archive目前在这里有一份副本 https://ia601003.us.archive.org/5/items/pdf320002008/PDF32000_2008.pdf
它们应该是相同的22,491,828个字节,所以要注意,它们都不包含任何勘误表。
PDF可以是纯mime "text/pdf",如完美注释生成自控制台键盘或命令行(速度太慢)或批处理文件。我不会让你看整个文件,但它是这样开始的:
REM Start with File "Magic" Signatures for a PDF
echo %%PDF-1.0>!Fname!
echo %%âãÏÓ>>!Fname!
echo %%01) Prepare file references>>!Fname!
for %%Z in (!Fname!) do set "FZ1=%%~zZ"
echo 1 0 obj>>!Fname!
echo ^<^</Names^<^</Dests 2 0 R^>^>/Outlines 3 0 R>>/PageLayout/OneColumn/PageMode/UseOutlines>>!Fname!
REM ToDo add files
REM /Lang (ga-IE)/MarkInfo^<^</Marked true^>^>/Names ^<^<^/EmbeddedFiles [(file.ext) 3 0 R]^>^>>>!Fname!
echo /Pages 4 0 R/Type/Catalog/ViewerPreferences^<^</DisplayDocTitle true^>^>^>^>>>!Fname!
echo endobj>>!Fname!
echo %%02) Prepare Named Destinations>>!Fname!
因此,经过注释的RAW PDF文件(请注意,我已经编辑了cmd文件的顺序,以便为XMP数据部分做准备,因此它们并不完全相同)可能如下所示:
%PDF-1.3
%âãÏÓ
%01) Prepare file references
1 0 obj
<</Lang(ga-IE)/Names<</Dests 3 0 R>>/Outlines 4 0 R/PageLayout/OneColumn/PageMode/UseOutlines
/PageLabels<</Nums[0<</S/A>>]>>/Pages 5 0 R/Type/Catalog/ViewerPreferences<</DisplayDocTitle true>>>>
endobj
%02) Reserved for big meta data
2 0 obj
<< >>
endobj
%03) Prepare Named Destinations
3 0 obj
<</Names [(Page1) [6 0 R /XYZ 0 792 null] (QRCode) [6 0 R /XYZ 25.0 317.0 1]]>>
endobj
%04) Prepare Outline / Bookmarks
...
...
许多人建议将二进制应用程序/PDF解压为文本/PDF,其中一些可能是混合的,因此仍然具有二进制应用程序文本。
针对此任务设计的三个最常见工具是qpdf(已提到,但使用混合QDF)、PDFtk(解压)和Mutool(不同的CLI选项),我最常用的是Mutool,因为在GL GUI中更容易更改输出设置。可以在MS Notepad中修改输出并预览结果。
因此任何文本编辑脚本都可以编写或编辑PDF,即使带有图形,而且几个应用程序可以将原始“二进制”PDF转换为原始“文本”PDF。但是,在其文本base64 RePrEx中暂时尝试编辑PDF是不可行的(虽然可能)。
gs -sDEVICE=pswrite some.pdf -sOutputFile=some.ps -dNOPAUSE -c quit
当您使用pdflatex生成PDF时,可以通过选项禁用压缩。这使得PDF更易读。
Unknown device: pswrite
,并发现现在应该是ps2write
。我的整个命令是
gs -sDEVICE=ps2write -sOutputFile=some.ps -dNOPAUSE -dBATCH example.pdf
。 - Chris