Skip to content

Instantly share code, notes, and snippets.

@cmplstofB
Created July 29, 2019 10:00
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save cmplstofB/7f38411f0b6f69b632e6a220e7544046 to your computer and use it in GitHub Desktop.
Save cmplstofB/7f38411f0b6f69b632e6a220e7544046 to your computer and use it in GitHub Desktop.
PDFの分析(コマンドライン)
pdffile=main.pdf
startxref="$(dd if="$pdffile" bs=1 2> /dev/null | tr -d '\r' | (tail -n 2 | head -n 1))"
eval -- "$(printf 'dd if="$pdffile" bs=1 skip="$startxref" 2> /dev/null | tr -d \047\r\047 | awk \047NR==%d+3,NR==%d+2\047' $(
dd if="$pdffile" bs=1 skip="$startxref" 2> /dev/null | tr -d '\r' | (head -n 2 | tail -n 1)))" > xref.ssv
# trailerの/Rootの第1引数+1(例: /Root 13 0 R→14)
< xref.ssv sed -n -e '13{s/ .*//p}'
dd if="$pdffile" bs=1 skip="$(< xref.ssv sed -n -e '14{s/0*\([1-9][0-9]*\) .*/\1/p}')" 2> /dev/null | tr -d '\r' |
sed -n -e '1,/>>/p'
# ↑これで表示された/Pagesの第1引数+1
dd if="$pdffile" bs=1 skip="$(< xref.ssv sed -n -e '12{s/0*\([1-9][0-9]*\) .*/\1/p}')" 2> /dev/null | tr -d '\r' |
sed -n -e '1,/>>/p'
# ↑これで表示された/Kidsの第1配列の第1引数+1
dd if="$pdffile" bs=1 skip="$(< xref.ssv sed -n -e '10{s/0*\([1-9][0-9]*\) .*/\1/p}')" 2> /dev/null | tr -d '\r' |
sed -n -e '1,/>>/p'
# ↑これで表示された/Contentsの第1引数+1
dd if="$pdffile" bs=1 skip="$(< xref.ssv sed -n -e '8{s/0*\([1-9][0-9]*\) .*/\1/p}')" 2> /dev/null | tr -d '\r' |
sed -n -e '1,/>>/p'
# /Lengthの値(例: 100)
dd if="$pdffile" bs=1 skip="$(< xref.ssv sed -n -e '8{s/0*\([1-9][0-9]*\) .*/\1/p}')" 2> /dev/null | tr -d '\r' |
sed -n -e '/stream/,${n;p}' | dd bs=1 count=100 2> /dev/null > stream.bin
<<. python3 -
import zlib
stream = open('stream.bin',mode='rb')
print(zlib.decompress(stream.read()))
stream.close()
.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment