问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

我用pypdf2填充了一个pdf的表单域值,但是输出的pdf不显示这个值,要点一...

发布网友 发布时间:2022-04-26 15:24

我来回答

2个回答

懂视网 时间:2022-05-03 12:49

 

  最近再网上下了一本pdf电子书(扫描版),质量不错。只是边缘太宽了,看起来不方便,就想着找一个切边工具。搜了一圈二,没有找到好用的,就自己动手。

win10 下载python3 官方网址:https://www.python.org/

安装包

pip install PyPDF2

 

这里用到了PdfFileReader PageObject PdfFileWriter 这几个主要的类,以下简单的pdf操作

import PyPDF2
  
pdfFile = open(‘123.pdf‘,‘rb‘)

pdfReader = PyPDF2.PdfFileReader(pdfFile)
pdfWriter = PyPDF2.PdfFileWriter()

#获取页数
count = pdfReader.numPages

#获取目录信息
outlines = pdfReader.getOutlines()
 
#获取原始页面的size
firstpage = pdfReader.getPage(0)
w = float(firstpage.mediaBox.getWidth())
h = float(firstpage.mediaBox.getHeight())

#读取pdf文件第一页
pageObj = pdfReader.getPage(0) 

#写入pdf页
pdfWriter.addPage(pageObj)

#写入书签
pdfWriter.addBookmark(title=‘Hello PyPDF2‘, pagenum=1)

#写入文件
pdfWriter.write(open(‘321.pdf‘,‘wb‘))

pdfFile.close()

 完整切边代码

 

# -*- coding: utf-8 -*-
"""
Created on Tue Apr 21 17:51:20 2020

@author: teyond

下载的pdf边缘很大,代码切了一下,同样加载了标签
"""


import PyPDF2

#-----------------------------------------------------------------------------
#解析目录
page_marks = {} #标签
#信息整理:父索引序号,页内索引号,标题,类型
def get_bookmark_info(strline,level_id):
 dtn = strline
 idobj = dtn.page 

 return level_id,pageLabels[idobj.idnum],dtn.title,dtn.typ
 
#第一级索引信息
def get_fist_grade(strline,level1_id=0):
 num = level1_id
 parent_id = level1_id
 for subline in strline:
 if isinstance(subline, list):
  num,parent_id = get_second_grade(subline,num)
 else:
  num = num+1
  page_marks[num] = get_bookmark_info(subline,level1_id)
  #print(‘level1---:‘,num,parent_id)
 return num,parent_id
#第二级索引信息
def get_second_grade(strline,level2_id=0): 
 num = level2_id
 parent_id = level2_id
 for subline in strline:
 if isinstance(subline, list):
  num,parent_id= get_third_grade(subline,num)
 else:
  num = num+1
  page_marks[num] = get_bookmark_info(subline,level2_id)
  #print(‘level2---:‘,num,parent_id)
 return num,parent_id
#第三级索引信息
def get_third_grade(strline,level3_id=0): 
 num = level3_id
 parent_id = level3_id
 for subline in strline:
 if isinstance(subline, list):
  num,parent_id = get_fourth_grade(subline,num)
 else:
  num = num+1
  page_marks[num] = get_bookmark_info(subline,level3_id)
  #print(‘level3---:‘,num,parent_id)
 return num,parent_id
#第四级索引信息
def get_fourth_grade(strline,level4_id=0): 
 num = level4_id
 parent_id = level4_id
 for subline in strline:
 if isinstance(subline, list):
  continue
 else:
  num = num+1
  page_marks[num] = get_bookmark_info(subline,level4_id)
  #print(‘level4---:‘,num,parent_id)
 return num,parent_id
#-----------------------------------------------------------------------------
  
pdfFile = open(‘123.pdf‘,‘rb‘)

pdfReader = PyPDF2.PdfFileReader(pdfFile)
pdfWriter = PyPDF2.PdfFileWriter()

#-----------------------------------------------------------------------------
#检索页面
count = pdfReader.numPages
pageLabels = {} #标签页
for index in range(count):
 pageObj = pdfReader.getPage(index) 
 pageLabels[pageObj.indirectRef.idnum] = index #页码索引

outlines = pdfReader.getOutlines()
get_fist_grade(outlines)
#print(page_marks)
#------------------------------------------------------------------------------
 
#获取原始页面的size
firstpage = pdfReader.getPage(0)
w = float(firstpage.mediaBox.getWidth())
h = float(firstpage.mediaBox.getHeight())

#切边后在原页面位置
xs = w*0.21 #截取页面left
xe = w*0.79 #截取页面right
ys = 0
ye = h
#----------------------------------------------------------------------------- 
#页面剪切 页面四个顶点,位置需要输出自己调整
for index in range(count):
 pageObj = pdfReader.getPage(index) 
 pageObj.mediaBox.uppderLeft = (xs,ye)
 pageObj.mediaBox.uppderRight = (xe,ye)
 pageObj.mediaBox.lowerLeft = (xs,ys)
 pageObj.mediaBox.lowerRight = (xe,ys) 
 pdfWriter.addPage(pageObj) 
#----------------------------------------------------------------------------- 
#添加书签 
pg_marks={}
for index in range(1,len(page_marks)+1):
 (pt_index,pgnum,pgtitle,bktyp) = page_marks[index]
 if pt_index==0:
 #添加书签,建书签索引
 pg_marks[index]=pdfWriter.addBookmark(title=pgtitle, pagenum=pgnum, fit=bktyp)
 else:
 #存在父节点,书签定向到父节点下面 
 pts = pg_marks[pt_index]
 pg_marks[index]=pdfWriter.addBookmark(title=pgtitle, pagenum=pgnum,parent=pts, fit=bktyp)
#----------------------------------------------------------------------------- 
#写入文件
pdfWriter.write(open(‘321.pdf‘,‘wb‘))

pdfFile.close()

  

使用PyPDF2对pdf切边并保留书签addBookMark

标签:info   div   stp   ret   ges   位置   write   上下   org   

热心网友 时间:2022-05-03 09:57

PDF和PS一样都有图层概念的,你只需要打开图层选项(默认左侧菜单第三项),将没有显示的图层选上就成(就是那个小眼睛),或者合并图层即可。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
ef英语哪个好 EF英孚英语培训怎么样? 英孚英语好不好 EF英孚教育到底好不好 大佬们,麦芒7和荣耀10那个值得入手?2500以下的机子还有啥好推荐的么... 介绍几款2500元以前的手机 像素一定要高 其他的不做要求 近期想入手一部安卓手机,价格2200到2500左右…买HTC desire Z还是 三星... 笔记本忘记开机密码怎么办急死了 笔记本电脑屏幕开机锁忘记密码 怎么办?急死了 华硕笔记本电脑开机密码忘记了怎样找回?系统是Windows 7旗舰版... pdf合并后表单域不见了,第二份文件不可编辑 打开PDF时出现 该文档包含交互式表单区域 是什么意思 为什么PDF中无法添加新域?我在编辑PDF页脚遇到的问题 什么东西的成分有氦气 pdf所有表单域不显示值 外墙吊篮升降机为什么只能降不能升 升降机按不起来 氦气用化学用语表示 PDF表格怎么不能填写呀 液压升降分散机不能升降怎么回事 氢气和氦气哪个实用? 施工升降机只能下,不能上是什么原因? Adobe打开的PDF表单,无法填写,就是无法键入,即使用“选择工具”或“手形工具”都无法键入。 在宇宙中只有地球有氧气吗?其他星球的气体是什么成分? 升降机升不起来重的东西 这是怎么回事 一个男人把自己浪漫的结婚照和酒席视频发朋友圈,过了一个月又通通删了,代表什么意思? 车窗玻璃自动升降不起作用了,是因为什么? 家用室内吊装升降机只下不升怎么回事? 氦气和氧气哪个重? 洁净的空气中有哪些元素 填写pdf格式表格时遇到的问题 端游QQ飞飞中国城能开出什么奖励 怎么样点亮QQ飞飞 PDF表单填写 运动健康在哪里找 同学情的句子 单反相机背带与手腕带上四方固定环和日字扣哪有卖? 怎样点亮QQ飞飞 PDF文件提示:你无法保存键入本表单的数据。如果要保留副本,请打印你完成的表单。怎么才能直接保存??? 怎么点亮QQ飞飞? 3R,4R,4D,5D分别是多少寸的?分别是多少英寸X多少英寸的? Adobe reader或其它PDF阅读器无法使用表单时间域名的下拉菜单 苹果112相机中黄色小二四方怎么打开 QQ飞飞是什么游戏,好玩吗?怎么我在腾讯的游戏里找不到这个 形容“同学情”,“同窗情”的词或者句子都有什么? 为什么镜头是圆的,拍出的相片是方的? QQ飞飞飞车! 同学情是什么样的? 林哈夫的相机型号 QQ飞飞车如何点亮