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 "\bxref\b" | awk '{print $1}')
trailer_start=$(strings -a -t d $1 | grep -e "\btrailer\b" | 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 "\bxref\b" | awk '{print $1}')
trailer_start=$(strings -a -t d $1 | grep -e "\btrailer\b" | 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\n", NR-1, $1);}'
cat asm_daniel_xref.bin | awk 'NF==3' | awk 'NR!=1{printf("%d %d\n", $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\n", 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 "\bxref\b" | awk '{print $1}')
trailer_start=$(strings -a -t d $1 | grep -e "\btrailer\b" | 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\n", NR-1, $1);}'
cat asm_daniel_xref.bin | awk 'NF==3' | awk 'NR!=1{printf("%d %d\n", $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\n", 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
linux shell assemble PDF文件的更多相关文章
- 浅谈linux系统中pdf文件的默认打开方式
atril.gimp和evince,三者均可以打开application/pdf格式文件.gimp为一款图像处理软件:atril为mate环境下常用的文档查看器:evince为gnome环境下常用的文 ...
- Linux shell - 重命名文件和文件夹(mv)
linux下重命名文件或文件夹的命令mv既可以重命名,又可以移动文件或文件夹. 例子:将目录A重命名为B mv A B 例子:将/a目录移动到/b下,并重命名为c mv /a /b/c
- linux shell 脚本 历史文件清理脚本,按天,按月,清理前N天的历史文件,删除指定大小历史文件,历史文件归档清理
不知道大家那有没有要清理的这个事情.需要清理目录历史文件.可能后续也会有很多其他地方需要清理历史文件,可能会用到. 我这两天空闲写了个脚本,清理比较方便,有要进行清理的大量历史文件的话可以用. 脚本用 ...
- linux shell exec 关联文件描述符
在写shell脚本时,如果多个命令的输入或输出都是同一个文件,而这个文件的路径和名字都很长,则需要书写很多次同样的路径会很浪费时间,我们可以使用exec命令来关联一个自定义的文件描述符到一个特定的文件 ...
- Linux shell逐行读取文件的方法
方法1:while循环中执行效率最高,最常用的方法. function while_read_line_bottom(){ while read line do echo $line done < ...
- linux shell 删除指定文件夹下面 名称不包含指定字符的文件
find /app/jenkins/jenkins/jobs/scam/* ! -name config.xml | xargs rm -rf 删除/app/jenkins/jenkins/jobs/ ...
- linux shell 学习笔记--文件测试符
. 文件测试操作 ---------------- 返回true 如果... -e 文件存在 -a 文件存在 这个选项的效果与-e 相同.但是它已经被弃用了,并且不鼓励使用 -f file 是一个re ...
- Linux Shell 之 对文件中的行、单词、字符进行迭代
在进行文本文件进行处理时,对文件件中的行.单词.字符进行迭代和遍历是非常常用的操作.而将一个简单的循环用于迭代,再加上来自stdin或文件的重定向,这就是对文件中的行.单词.和字符进行迭代的基本方法. ...
- linux在线预览pdf文件开发思路
准备:swftools,flexpaper 基本思路: 1,将pdf文件转化成swf文件 2,使用flexpaper预览swf文件 主要代码: 1,在linux中安装swftools.官网下载swft ...
随机推荐
- 设置div标签可以输入文字
1.contenteditable 属性可以设置div标签为克输入标签, 2.input和textarea虽然是常用的输入标签,但是这两个标签不能设置最大高度和最小高度, 随意如果想随着输入的内容 ...
- final-finally-finalize有什么区别
一.final 1.final用于声明属性.方法和类,分别表示属性不可变,方法不可覆盖类和类不可能被继承(不可能再派生出新的子类). final属性:被final修饰的变量不可变. 1).引用不可变 ...
- 洛谷 P1049 装箱问题(01背包)
一道水题,但看到好久没有发博客了,再一看是一道noip普及组t4,就做了. 题目链接 https://www.luogu.org/problemnew/show/P1049 解题思路 一道裸的01背包 ...
- 01 spring循环依赖
作者:Mythsman原文:https://blog.mythsman.com/post/5d838c7c2db8a452e9b7082c/转载自:猿天地原文来自:https://mp.weixin. ...
- 702:Crossing River (贪心)
[题目描述] N个人过河,一次过去2个回来一个,给出每个人所需时间,问最小过河时间. [题目链接] http://noi.openjudge.cn/ch0406/702/ [算法] 一开始想样例是怎么 ...
- Zookeeper-技术专区-配置以及学习
zookeeper 一.zookeeper下载 zookeeper下载可以直接去官网进行下载 https://zookeeper.apache.org/releases.html ,可以选择最新版本 ...
- C#设计模式:单例模式(Singleton)
一,单例模式:它的主要特点不是根据客户程序调用生成一个新的实例,而是控制某个类型的实例数量-唯一一个,就是保证在整个应用程序的生命周期中,在任何时刻,被指定的类只有一个实例,并为客户程序提供一个获取该 ...
- 02.Linux-CentOS系统NFS挂载时拒绝访问挂载问题
问题: 在挂载nfs时报拒绝访问挂载:mount -t nfs 192.163.1.10:/home/opneuser/upload /home/openuser/upload/ 报错信息:Mount ...
- 同步mysql
ElasticSearch同步MySql 标签: elasticsearchmysql 2016-07-01 09:07 4636人阅读 评论(8) 收藏 举报 分类: Elasticsearch( ...
- JavaScript判断对象是否相等
实现一. var obj = {a:'a'},obj1 = {b:'b'},obj2 = {a:'a'};就是使用JSON.stringify()先把对象转化成字符串,这样就可以啦 console.l ...