首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过python将一个单词替换为另一个单词,并将一个图像替换为PDF文件中的另一个图像,这有可能吗?

通过python将一个单词替换为另一个单词,并将一个图像替换为PDF文件中的另一个图像,这有可能吗?
EN

Stack Overflow用户
提问于 2022-08-29 06:02:05
回答 1查看 139关注 0票数 0

我需要替换一个K字与K,其他词,为每个PDF文件,我有一个特定的路径文件的位置,并在此之上,我需要用另一个标志替换每一个标志。我有大约1000个PDF文件,所以我不想一次使用Acrobat并编辑一个文件。我怎么才能开始呢?

只要有一个合适的PDF阅读器可以通过Python访问(注意,我想用Python来完成这个任务),替换单词至少是可行的,但是更换图像可能更困难。我很可能必须找到当前图像的维数,并调整用于动态替换当前图像的图像大小,同时程序运行在这些PDF文件中。

嗨,我写了一些关于这个的代码:

代码语言:javascript
复制
from pikepdf import Pdf, PdfImage, Name
import os
import glob
from PIL import Image
import zlib

example = Pdf.open(r'...\Likelihood.pdf')
PagesWithImages = []
ImageCodesForPages = []  

# Grab all the pages and all the images in every page. 
for i in example.pages:
    if len(list(i.images.keys())) >= 1:
        PagesWithImages.append(i)
        ImageCodesForPages.append(list(i.images.keys()))

pdfImages = [] 

for i,j in zip(PagesWithImages, ImageCodesForPages):
    for x in j: 
        pdfImages.append(i.images[x])


# Replace every single page using random image, ensure that the dimensions remain the same?
for i in pdfImages:
    pdfimage = PdfImage(i)
    rawimage = pdfimage.obj
    im = Image.open(r'...\panda.jpg')
    pillowimage = pdfimage.as_pil_image()
    print(pillowimage.height)
    print(pillowimage.width)
    im = im.resize((pillowimage.width, pillowimage.height))
    im.show()
    rawimage.write(zlib.compress(im.tobytes()), filter=Name("/FlateDecode"))
    rawimage.ColorSpace = Name("/DeviceRGB")

所以只有一个问题,它并不能代替任何东西。如果您想知道为什么以及如何编写这段代码,我实际上是从以下文档中获得的:

https://buildmedia.readthedocs.org/media/pdf/pikepdf/latest/pikepdf.pdf

从第53页开始

我基本上把所有的pdfImages放在一个列表中,因为一个页面可以有多个图像。与此相结合,最后一个for循环基本上尝试替换所有这些图像,同时保持相同的宽度和高度大小。另外,请注意,我在这里更改了文件路径名,这绝对不是问题所在。

再次谢谢

EN

回答 1

Stack Overflow用户

发布于 2022-09-19 23:53:06

我知道我做错了什么。因此,对于任何想要用PDF文件上的另一个图像替换图像的人,您所做的是:

代码语言:javascript
复制
from pikepdf import Pdf, PdfImage, Name
from PIL import Image
import zlib

example = Pdf.open(filepath, allow_overwriting_input=True)
PagesWithImages = []
ImageCodesForPages = []  

# Grab all the pages and all the images in every page. 
for i in example.pages:
    imagelists = list(i.images.keys())
    if len(imagelists) >= 1:
        for x in imagelists:
            rawimage = i.images[x]
            pdfimage = PdfImage(rawimage)
            rawimage = pdfimage.obj 
            pillowimage = pdfimage.as_pil_image()
            im = Image.open(imagePath)
            im = im.resize((pillowimage.width, pillowimage.height))
            rawimage.write(zlib.compress(im.tobytes()), filter=Name("/FlateDecode"))
            rawimage.ColorSpace = Name("/DeviceRGB")
            rawimage.Width, rawimage.Height = pillowimage.width, pillowimage.height

example.save()

本质上,我更改了第一行中的论证,因此我指定可以覆盖。同时,我还添加了最后一行,这实际上允许我保存。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73524659

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档