给定一个多页 PDF 文档,如何检查给定页面是否旋转(-90、90 或 180\xc2\xba)?最好使用 Python (pdfminer, pyPDF) ...
\n\n更新:页面是扫描的,大部分页面都是由文本组成的。
\n我有下面的代码
d = {'Name': 'James', ' Date':'1/1/2016','City':'Wilmo','County':'United States'}
input_file = PdfFileReader(open(baseDir + 'medicareRRF.pdf', "rb"))
inFields = input_file.getFields()
watermark = PdfFileReader(open(baseDir + "justSign.pdf", "rb"))
output_file = PdfFileWriter()
input_page = input_file.getPage(0)
input_page.mergePage(watermark.getPage(0))
output_file.addPage(input_page)
thisPage = output_file.getPage(0)
output_file.updatePageFormFieldValues(thisPage, d)
Run Code Online (Sandbox Code Playgroud)
哪个用字典(d)正确填写PDF,但是如何检查和取消选中PDF上的框?以下是其中一个框的getField()信息:
u'Are you ok': {'/FT': '/Btn','/Kids': [IndirectObject(36, 0),
IndirectObject(38, 0)],'/T': u'Are you ok','/V': '/No'}
Run Code Online (Sandbox Code Playgroud)
我尝试添加{'Are you ok' : '/Yes'}和其他几个类似的方法,但没有任何效果.
我PyPdf2用来拆分大PDF页面。问题在于此过程非常缓慢。
这是我使用的代码:
import os
from PyPDF2 import PdfFileWriter, PdfFileReader
with open(input_pdf_path, "rb") as input_file:
input_pdf = PdfFileReader(input_file)
directory = "%s/paging/" % os.path.dirname(input_pdf_path)
if not os.path.exists(directory):
os.makedirs(directory)
page_files = []
for i in range(0, input_pdf.numPages):
output = PdfFileWriter()
output.addPage(input_pdf.getPage(i))
file_name = "%s/#*#*#*##-%s.pdf" % (directory, i)
page_files.append(file_name)
with open(file_name, "wb") as outputStream:
output.write(outputStream)
Run Code Online (Sandbox Code Playgroud)
使用此代码分割177页pdf大约需要35到55秒。有没有办法可以改善此代码?还有其他更适合此工作的图书馆吗?
我有一个大约 7000 页和 479 MB 的 PDF 文件。如果页面包含特定单词,我已经使用 PyPDF4 创建了一个 python 脚本来仅提取特定页面。该脚本有效,但新的 PDF 文件,尽管它只有原始 7000 页的 650 页,但现在比原始文件有更多的 MB(准确地说是 498 MB)。
有没有办法降低新PDF的文件大小?
我使用的脚本:
from PyPDF4 import PdfFileWriter, PdfFileReader
import os
import re
output = PdfFileWriter()
input = PdfFileReader(open('Binder.pdf', 'rb')) # open input
for i in range(0, input.getNumPages()):
content = ""
content += input.getPage(i).extractText() + "\n"
#Format 1
RS = re.search('FIGURE', content)
RS1 = #... Only one search given as example. I have more, but are irrelevant for the question.
#.... …Run Code Online (Sandbox Code Playgroud) 我观看了一个视频,了解如何将 PDF 文件合并为一个 PDF 文件。我尝试在代码中进行一些修改,以便处理包含 PDF 文件的文件夹 主文件夹(Spyder)有,Demo.py这就是代码
import os
from PyPDF2 import PdfFileMerger
source_dir = os.getcwd() + './PDF Files'
merger = PdfFileMerger()
for item in os.listdir(source_dir):
if item.endswith('pdf'):
merger.append(item)
merger.write('.PDF Files/Output/Complete.pdf')
merger.close()
Run Code Online (Sandbox Code Playgroud)
我有一个名PDF Files为主文件夹的子文件夹Spyder,在这个子文件夹中我放置了 PDF 文件,并在子文件夹中PDF Files创建了一个名为Output. item尽管在打印循环内部时,我得到了 PDF 名称,但我收到了关于 1.pdf 的错误文件未找到。
错误回溯
Traceback (most recent call last):
File "demo.py", line 9, in <module>
merger.append(item)
File "C:\Users\Future\AppData\Local\Programs\Python\Python36\lib\site-packages\PyPDF2\merger.py", line 203, in append
self.merge(len(self.pages), fileobj, bookmark, pages, import_bookmarks)
File "C:\Users\Future\AppData\Local\Programs\Python\Python36\lib\site-packages\PyPDF2\merger.py", …Run Code Online (Sandbox Code Playgroud) 我有一个包含很多子文件夹的文件夹,里面有PDF文件。在这些文件中查找信息真是一团糟,所以我正在编写一个程序来解析这些文件夹和文件,在 PDF 文件中搜索关键字,并返回包含该关键字的 PDF 文件的名称。
\n它正在发挥作用。事实上,差不多了。
\n我遇到此错误:PyPDF2.errors.PdfReadError: PDF starts with '\xe2\x99\xa3\xe2\x96\xac', but '%PDF-' expected当我的程序到达某些文件夹时(很难知道到底是哪一个)。从我的角度来看,我的文件夹中的所有 PDF 文件都是相同的,所以我不明白为什么我的程序可以处理某些文件而不能处理其他文件。
预先感谢您的回复。
\n我在使用pyPDF逻辑将两个pdf文件合并到我的django站点时遇到了麻烦.我编写的代码可以在本地服务器上的python文件中运行时合并文件(但我需要明确标识要合并的文件:
from pyPdf import PdfFileReader, PdfFileWriter
output = PdfFileWriter()
input1 = PdfFileReader(file("abc_form0.pdf", "rb"))
input2 = PdfFileReader(file("abc_form1.pdf", "rb"))
total_pages = input1.getNumPages()
total_pages1 = input2.getNumPages()
for page in xrange(total_pages):
output.addPage(input1.getPage(page))
for page in xrange(total_pages1):
output.addPage(input2.getPage(page))
outputStream = file("output.pdf", "wb")
output.write(outputStream)
outputStream.close()
Run Code Online (Sandbox Code Playgroud)
此代码(来自我的django站点)用于显示单个PDF.但是,如果选择了多个PDF,则只显示最终的PDF,因此需要集成pyPDF以创建包含所有请求文件的文件.
class ABCAdmin(admin.ModelAdmin):
actions = ['print_selected_pdf']
def create_pdf(self, request, queryset):
response = HttpResponse(mimetype="application/pdf")
response['Content-Disposition'] = 'attachment; filename=form.pdf'
for obj in queryset:
response.write(obj.form)
ABC.objects.filter(pk=obj.pk).update(user=request.user,pdf_printed="1",request_time=time.strftime("%H:%M:%S"),request_date=datetime.datetime.today())
return response
def print_selected_pdf(self, request, queryset):
# prints the pdfs for those that are selected,
# regardless if …Run Code Online (Sandbox Code Playgroud) 我目前正在编写一个小工具(Python + pyPdf)来测试PDF以确保打印机符合性.
唉,我已经对第一项任务感到困惑:检测PDF是否至少有3毫米'流血'(页面周围没有打印任何内容).我已经知道我无法检测完整文档的出血,因为似乎没有全局文档.然而,在页面上我总共可以检测到五个不同的盒子:
mediaBoxbleedBoxtrimBoxcropBoxartBox我阅读了关于那些盒子的pyPdf文档,但我理解的唯一一个mediaBox似乎代表整个页面大小(即文件).
在bleedBox很显然应该定义出血,但是,这并不似乎总是如此.
我注意到的另一件事是,例如使用PDF,所有这些盒子在每页上都有完全相同的大小(完全没有出血),但是当我打开它时会出现大量的流血; 这让我认为单个文本元素有自己的偏移量.
所以,显然,只是计算出血mediaBox并且bleedBox不是一个可行的选择.
如果有人能够了解这些盒子实际上是什么以及我可以从中得出什么结果(例如,一个盒子总是小于另一个盒子),我将非常高兴.
奖金问题:有人能告诉我文档中提到的"默认用户空间单位"究竟是什么?我很确定这指的是我的机器,但我想在任何地方执行.mmmm
我有一个带有一些超链接的PDF文档,我需要从pdf中提取所有文本。我使用了http://www.endlesslycurious.com/2012/06/13/scraping-pdf-with-python/中的PDFMiner库和代码 来提取文本。但是,它不会提取超链接。
例如,我有一段文字说出Check this link out,并附有链接。我能够提取单词Check this link out,但是我真正需要的是超链接本身,而不是单词。
我该怎么做呢?理想情况下,我更喜欢用Python来做,但是我也愿意用任何其他语言来做。
我看过了itextsharp,但是还没有使用过。我正在上运行Ubuntu,希望对您有所帮助。
我整个上午都在尝试将页码添加到 pdf 文档中,但我无法弄清楚。我想使用 python,pyPdf 或 reportlab。
有没有人有任何想法?
pdf ×10
pypdf ×10
python ×9
pdfminer ×2
python-3.x ×2
checkbox ×1
django ×1
django-admin ×1
hyperlink ×1
pypdf2 ×1
reportlab ×1
typography ×1