PDF工具: pdftk

delete pages

#!/bin/bash# 检查 pdftk 是否安装
if ! command -v pdftk &> /dev/null
thenecho "pdftk 未安装,请先安装 pdftk。"exit 1
fi# 检查是否提供了 PDF 文件作为参数
if [ $# -ne 1 ]; thenecho "用法: $0 <input_pdf_file>"exit 1
fiinput_file=$1# 检查输入文件是否存在
if [ ! -f "$input_file" ]; thenecho "输入的 PDF 文件 $input_file 不存在。"exit 1
fi# 获取总页数
total_pages=$(pdftk "$input_file" dump_data | grep "NumberOfPages" | awk '{print $2}')# 提示用户输入要去除的页面
read -p "请输入要去除的页面(可以是单个页码或用逗号分隔的多个页码,如 3 或 3,5): " pages_to_remove# 生成页面范围
page_range=""
for ((i = 1; i <= total_pages; i++)); doskip=falsefor page in $(echo $pages_to_remove | tr ',' ' '); doif [ "$i" -eq "$page" ]; thenskip=truebreakfidoneif [ "$skip" = false ]; thenif [ -z "$page_range" ]; thenpage_range="$i"elsepage_range="$page_range $i"fifi
done# 执行 pdftk 命令
output_file="${input_file%.*}_removed.pdf"
pdftk "$input_file" cat $page_range output "$output_file"
echo "已生成去除指定页后的文件: $output_file"

divide pages

#!/bin/bash# 检查 pdftk 是否安装
if ! command -v pdftk &> /dev/null
thenecho "pdftk 未安装,请先安装 pdftk。"exit 1
fi# 检查是否提供了 PDF 文件作为参数
if [ $# -ne 1 ]; thenecho "用法: $0 <input_pdf_file>"exit 1
fiinput_file=$1# 检查输入文件是否存在
if [ ! -f "$input_file" ]; thenecho "输入的 PDF 文件 $input_file 不存在。"exit 1
fi# 获取 PDF 文件的总页数
total_pages=$(pdftk "$input_file" dump_data | grep "NumberOfPages" | awk '{print $2}')# 计算分割的组数
groups=$(( (total_pages + 49) / 50 ))# 进行分割
for ((i = 1; i <= groups; i++)); dostart_page=$(( (i - 1) * 50 + 1 ))end_page=$(( i * 50 ))if [ $end_page -gt $total_pages ]; thenend_page=$total_pagesfioutput_file="${input_file%.*}_${start_page}-${end_page}.pdf"pdftk "$input_file" cat $start_page-$end_page output "$output_file"echo "已生成文件: $output_file"
done

merge pages

#!/bin/bash# 检查 pdftk 是否安装
if ! command -v pdftk &> /dev/null
thenecho "pdftk 未安装,请先安装 pdftk。"exit 1
fi# 初始化文件列表
file_list=""# 生成文件列表
for i in $(seq 1 50 700); dostart=$iend=$((i + 49))if [ $end -gt 700 ]; thenend=700fifile="z-$start-$end.pdf"if [ -f "$file" ]; thenfile_list="$file_list $file"elseecho "文件 $file 不存在,跳过。"fi
done# 合并文件
if [ -n "$file_list" ]; thenpdftk $file_list cat output merged.pdfecho "PDF 文件合并完成,合并后的文件名为 merged.pdf。"
elseecho "没有找到有效的 PDF 文件进行合并。"
fi

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/890424.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IOC 和 DI 详解及其简单用法

1. IOC 详解 1.1 Bean 的声明 IOC 控制反转,就是将对象的控制权交给 Spring 的 IOC 容器,由 IOC 容器创建及管理对象。IOC 容器创建的对象称为 bean 对象。 而 Spring 框架为了更好的标识 Web 应用程序开发当中,bean 对象到底归属于哪一层,又提供了 @Component 的衍生注解:…

开源一款DDS信号发生扩展板-FreakStudio多米诺系列

信号发生扩展板通过SPI接口生成可调频率和幅度的正弦波、方波和三角波,频率小于1MHz。支持幅度调节,提供原始和6倍放大输出接口。配备5阶低通滤波器、噪声抑制功能,优化信号稳定性。原文链接: FreakStudio的博客 摘要 信号发生扩展板通过SPI接口生成可调频率和幅度的正弦波…

Windows系统更改/迁移用户目录

Windows系统更改/迁移用户目录Windows系统更改/迁移用户目录 迁移的原因C盘空间不足 不想将我的文档等放在C盘,方便重做系统 其他原因迁移有什么风险么目前没发现有什么风险迁移过程 准备工作 更改/迁移用户目录之前先自行备份当前用户的资料(下载目录、桌面文件等),以免数…

[2025.2.26 JavaWeb学习]登录校验

流程图会话技术指浏览器与服务器的一次连接,直到某一方断开,某个浏览器的一次会话可以包含多次请求和响应会话跟踪:一种维护浏览器状态的方法,服务器需要识别多次请求是否来自于同一浏览器,以便在同一次会话的多次请求间共享数据

cmcc_simplerop

打开ida查看,可以看到是静态编译,所以无法常规用ret2libc此时可以用最简单的方法系统调用 首先ida上面的偏移量是错误的,我们手动用gdb算一下距离ebp为0x1c因为要实现execve("/bin/sh",0,0)找int 0x80,eax,ebx,ecx,edx因为程序里面没有binsh或sh,所以我们得手动…

day4复健-字符串

题目练习:反转字符串 知识学习: StringBuilder:内容可变的字符串容器StringJoiner练习: 阿拉伯数字转换为罗马数字练习2:练习3:

软件开发与创新——万年历功能新增与代码优化

一、项目名称与来源 上海海洋大学C语言期末大作业 二、原项目运行 运行环境: 系统:Windows11 24H2 cpu:i7-10750H 编译器:Dev c++ 5.11 运行结果:点击查看代码 #include <stdio.h> #include <stdlib.h>// 定义每个月的天数,第一行为平年,第二行为闰年 int d…

逆向软件设计和开发---学生信息管理程序

一、来源 源代码来自同学大一上学期C语言大作业 二、运行环境 Dev-C++ 6.3 三、源代码及运行结果 1.源代码点击查看代码 #include <stdio.h> #include <stdlib.h> #include <string.h>#define MAX_NAME_LENGTH 20 #define MAX_SCORE_COUNT 5// 学生信息结构体…

在鹅厂做java开发是什么体验

离职已有好几个月,准备写一篇关于之前在腾讯做Java开发的经历,现在来谈谈在Java领域里,在腾讯做Java开发的体验。随便写写别较真。首先,介绍一下腾讯里与Java相关的部门。主要有CDG(云与智慧产业事业群)中的腾讯广告和FIT(金融科技事业群)理财通。其他部门则包括TEG中的…

软件二次开发

软件来源:舍友期末大作业 软件运行环境:dev C++ 软件运行图: 软件伸缩代码图: 问题:菜单只会出现一次,在多次操作之后菜单会被顶走,届时用户只能依照记忆操作系统 更改的代码: 在循环执行选项的代码部分增加了菜单的输出 更改后的代码运行:

换根dp

概念 换根 \(dp\) ,又被称为二次扫描,是属于树形 \(dp\) 的一类但比一般树形dp更难。 特点通常是没有指定根结点,且根结点的变化会对一些值产生影响。通常需要两次 \(dfs\) ,第一次 \(dfs\) 预处理信息,第二次 \(dfs\) 开始换根动态规划。求解的答案通常需要结合所有相连的…

千锋教育MyBatisPlus全套课程,简单快速一套精通MyBatisPlus框架(代码生成器_引入_使用)

https://www.bilibili.com/video/BV1aa4y1A7iN?spm_id_from=333.788.videopod.episodes&vd_source=0d7b1712ce42c1a2fa54bb4e1d601d78代码生成器_引入_使用 https://github.com/godmaybelieve