gpt4 book ai didi

python - 如何使用 pymupdf 减小修改后的 PDF 的大小

转载 作者:行者123 更新时间:2023-12-03 08:27:03 86 4
gpt4 key购买 nike

我正在通过编辑某些单词并在 pymupdf 中的编辑区域顶部添加不同的单词来编辑 pdf。

代码运行成功,但是它生成了一个非常大的单页 pdf (9MB)。我认为这是因为绘制了许多形状和修订,但我似乎无法重构。

我知道from this post我不应该多次应用 page.apply_redactions() ,但如果我不这样做,文本就不会正确显示在编辑的方 block 顶部,或者会引发 ValueError:填充矩形必须是有限的且非空

任何重构较小输出 pdf 的帮助将不胜感激。

    doc = fitz.open(self.path) 
# get pdf background colour
col = fitz.utils.getColor("py_color")
# iterating through pages
for page in doc:

page.wrap_contents()
# geting the rect boxes which consists the matching regex
sensitive = self.get_sensitive_data(page.getText("text")
.split('\n'))
for data in sensitive:
areas = page.searchFor(data)
for area in areas:
text_page = page.get_textpage(clip=area)
text_page = text_page.extractDICT(area)
# text_page = area
max_length = fitz.getTextlength(str(max(column, key=len)), fontsize=fontsize)+14
area = format_border(page, area, data, fontsize, align=align, max_length=max_length)
area.y1 = add_yrect_line(column, area.y1, area.y1-area.y0)
col = fitz.utils.getColor("white")
redaction = page.addRedactAnnot(new_area, fill=col, text=" ") #flags not available
page.apply_redactions() # page.apply_redations(images=fitz.PDF_REDACT_IMAGE_NONE) to circumvent transparent image issues
writer = fitz.TextWriter(page.rect, color=color)
# align to top of box if align right:
writer.fill_textbox(new_area, variable, fontsize=fontsize, warn=True, align=align, font=font)
writer.write_text(page)
# To show what happened, draw the rectangles, etc.
shape = page.newShape()
shape.drawRect(new_area) # the rect within which we had to stay
shape.finish(stroke_opacity=0) # show in red color
shape.commit()

shape = page.newShape()
shape.drawRect(writer.text_rect) # the generated TextWriter rectangle
shape.drawCircle(writer.last_point, 2) # coordinates of end of text
shape.finish(stroke_opacity=0) # show with blue color
shape.commit()
writer = fitz.TextWriter(area, color=color)

最佳答案

如果不了解有关您正在处理的 PDF 页面的更多详细信息,则有点难以判断。然而,插入文本或绘图不会增加大量数据。所以我认为应用修订可能会导致问题:如果您的页面包含与任何密文矩形重叠的图像,则 apply_redactions() (不带参数!)将修改重叠的图像部分并将其空白......这对于每个图像都会发生,并且它的每一个重叠!结果是每个图像的未压缩新的 PNG 版本。因此,您应该尝试以下方法之一:

  • 请勿触摸任何图像:使用 page.apply_redactions(images=fitz.PDF_REDACT_IMAGE_NONE)
  • 删除至少有一个重叠的每个图像(可能是不可取的):page.apply_redactions(images=fitz.PDF_REDACT_IMAGE_REMOVE)
  • 或者至少在保存文件时使用 garbage=3, deflate=True 来压缩修改后的图像。

实际上,在这些类型的操作之后,您应该始终使用垃圾收集和压缩。

关于python - 如何使用 pymupdf 减小修改后的 PDF 的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66361238/

86 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com