首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >添加页面标题,img2pdf

添加页面标题,img2pdf
EN

Stack Overflow用户
提问于 2019-01-21 16:37:11
回答 1查看 458关注 0票数 1

我最近发现了一个(很棒的) python软件,它可以将多张图片转换成一张img2pdf格式的图片。创建第一个pdf后,我意识到每个页面都没有任何标题,很难识别原始图像(因为有400个),有人知道如何添加页面标题吗?

提前谢谢。

EN

回答 1

Stack Overflow用户

发布于 2020-01-11 03:59:53

我试图找到同样的解决方案,但最终还是写了一个Python程序来解决它。我不知道它是否对你有帮助,但尽管如此,这里还是有一个解决方案。

在Python中,我使用PIL.Image和ImageDraw遍历所有图像,并将文件名放入每个图像中。在那之后,我使用img2pdf作为python库来生成pdf。

必须在与图像相同的文件夹中运行。

代码语言:javascript
复制
import os
import img2pdf
from PIL import Image, ImageDraw, ImageFont, ExifTags

# Enter the path to the font you want, 'fc-list' on ubuntu will get a list of fonts you can use.
#image_text_font = ImageFont.truetype('/Library/Fonts/Arial.ttf', 15)
image_text_font = ImageFont.truetype("/usr/share/fonts/truetype/dejavu/DejaVuSansMono.ttf", 32)

# Tags the images with 'file name' in the upper left corner
def tag_images():
    for file in os.listdir('.'):
        if file.endswith(".jpg") and str(file+"_tagged.jpg") not in os.listdir('.') and not file.endswith("_tagged.jpg"):
            one_image = check_and_adjust_rotation(Image.open(file))
            one_image_draw = ImageDraw.Draw(one_image)

            # Add textbox to image
            size = one_image_draw.textsize(file, font=image_text_font)
            offset = image_text_font.getoffset(file)
            one_image_draw.rectangle((10, 10, 10 + size[0] + offset[0], 10 + size[1] + offset[1]), fill='white', outline='black')

            # Add text to image
            one_image_draw.text((10,10), file, font=image_text_font, fill='black')

            # Save tagged image
            one_image.save(file + "_tagged.jpg")
            print(f'Tagged and saved "{file}_tagged.jpg".')

# Generate the PDF
def generate_pdf_from_multiple_images():
    with open("output.pdf", "wb") as f:
        f.write(img2pdf.convert([image_file for image_file in os.listdir('.') if image_file.endswith("_tagged.jpg")]))

# Use exif information about rotation to apply proper rotation to the image
def check_and_adjust_rotation(image):
    try :
        for orientation in ExifTags.TAGS.keys() : 
            if ExifTags.TAGS[orientation]=='Orientation' : break 
        exif=dict(image._getexif().items())
        print(exif[orientation])

        if   exif[orientation] == 3 : 
            image=image.rotate(180, expand=True)
        elif exif[orientation] == 6 : 
            image=image.rotate(270, expand=True)
        elif exif[orientation] == 8 : 
            image=image.rotate(90, expand=True)
    except:
        traceback.print_exc()

    return image

def main():
    tag_images()
    generate_pdf_from_multiple_images()

if __name__ == '__main__':
    main()
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54286037

复制
相关文章

相似问题

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