Linux的shell的PDF,linux shell assemble PDF文件

daniel@daniel-mint ~/latex/linux/itext/daniel $ cat asm.sh

header_start=0

header_len=15

xref_start=$(strings -a -t d $1 | grep -e "xref" | awk '{print $1}')

trailer_start=$(strings -a -t d $1 | grep -e "trailer" | awk '{print $1}')

#echo $xref_start

#echo $trailer_start

xref_len=$(echo "$trailer_start - $xref_start" | bc)

#echo $xref_len

header_dump=$(echo "$1" | sed -re 's/^(.*).pdf/asm\_1\_header.bin/g')

dd if=$1 of=$header_dump bs=1 skip=$header_start count=$header_len

xref_dump=$(echo "$1" | sed -re 's/^(.*).pdf/asm\_1\_xref.bin/g')

dd if=$1 of=$xref_dump bs=1 skip=$xref_start count=$xref_len

daniel@daniel-mint ~/latex/linux/itext/daniel $ cat asm.sh

header_start=0

header_len=15

xref_start=$(strings -a -t d $1 | grep -e "xref" | awk '{print $1}')

trailer_start=$(strings -a -t d $1 | grep -e "trailer" | awk '{print $1}')

#echo $xref_start

#echo $trailer_start

xref_len=$(echo "$trailer_start - $xref_start" | bc)

#echo $xref_len

header_dump=$(echo "$1" | sed -re 's/^(.*).pdf/asm\_1\_header.bin/g')

dd if=$1 of=$header_dump bs=1 skip=$header_start count=$header_len

xref_dump=$(echo "$1" | sed -re 's/^(.*).pdf/asm\_1\_xref.bin/g')

dd if=$1 of=$xref_dump bs=1 skip=$xref_start count=$xref_len

trailer_dump=$(echo "$1" | sed -re 's/^(.*).pdf/asm\_1\_trailer.bin/g')

dd if=$1 of=$trailer_dump bs=1 skip=$trailer_start

#cat asm_daniel_xref.bin | awk 'NF==3' | awk 'NR!=1{printf("%d 0 obj is at offset: %d

", NR-1, $1);}'

cat asm_daniel_xref.bin | awk 'NF==3' | awk 'NR!=1{printf("%d %d

", $1, NR-1);}' | sort > tmp_"$xref_dump"

echo "$xref_start 0" >> tmp_"$xref_dump"

cat tmp_asm_daniel_xref.bin | awk 'BEGIN{loffset=0;lobjnum=0;}{printf("%3d %3d %3d

", loffset, $1-loffset, lobjnum);loffset=$1;lobjnum=$2;}' | awk 'NR!=1' > tmp_metrics_"$xref_dump"

cat tmp_metrics_"$xref_dump" | while read offset len objn

do

#echo $offset, $len, $objn

obj_name=$(echo "$1_$objn" | sed -re 's/^(.*).pdf/asm\_1\_obj/g' | awk '{printf("%s.bin", $0);}')

#echo $obj_name

dd if=$1 of=$obj_name bs=1 skip=$offset count=$len

done

使用sed以及awk用来格式化字符串

使用dd用来进行二进制拷贝

使用read用来解析文件内容到variable

daniel@daniel-mint ~/latex/linux/itext/daniel $ cat asm.sh

header_start=0

header_len=15

xref_start=$(strings -a -t d $1 | grep -e "xref" | awk '{print $1}')

trailer_start=$(strings -a -t d $1 | grep -e "trailer" | awk '{print $1}')

#echo $xref_start

#echo $trailer_start

xref_len=$(echo "$trailer_start - $xref_start" | bc)

#echo $xref_len

header_dump=$(echo "$1" | sed -re 's/^(.*).pdf/asm\_1\_header.bin/g')

dd if=$1 of=$header_dump bs=1 skip=$header_start count=$header_len

xref_dump=$(echo "$1" | sed -re 's/^(.*).pdf/asm\_1\_xref.bin/g')

dd if=$1 of=$xref_dump bs=1 skip=$xref_start count=$xref_len

trailer_dump=$(echo "$1" | sed -re 's/^(.*).pdf/asm\_1\_trailer.bin/g')

dd if=$1 of=$trailer_dump bs=1 skip=$trailer_start

#cat asm_daniel_xref.bin | awk 'NF==3' | awk 'NR!=1{printf("%d 0 obj is at offset: %d

", NR-1, $1);}'

cat asm_daniel_xref.bin | awk 'NF==3' | awk 'NR!=1{printf("%d %d

", $1, NR-1);}' | sort > tmp_"$xref_dump"

echo "$xref_start 0" >> tmp_"$xref_dump"

cat tmp_asm_daniel_xref.bin | awk 'BEGIN{loffset=0;lobjnum=0;}{printf("%3d %3d %3d

", loffset, $1-loffset, lobjnum);loffset=$1;lobjnum=$2;}' | awk 'NR!=1' > tmp_metrics_"$xref_dump"

cat tmp_metrics_"$xref_dump" | while read offset len objn

do

#echo $offset, $len, $objn

obj_name=$(echo "$1_$objn" | sed -re 's/^(.*).pdf/asm\_1\_obj/g' | awk '{printf("%s.bin", $0);}')

#echo $obj_name

dd if=$1 of=$obj_name bs=1 skip=$offset count=$len

done

grep -Ubo --binary-file=text stream asm_daniel_obj_2.bin | sed -e 's/:/ /g' | awk 'NR==1{printf("%d ",$1+7);}NR==2{printf("%d ", $1-10);}' > tmp_stream.bin

read xstart xend < tmp_stream.bin

dd if=asm_daniel_obj_2.bin of=flated.bin bs=1 skip=$xstart count=$[ $xend - $xstart ]

cat flated.bin | zlib-flate -uncompress > deflated.bin

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值