繁体   English   中英

添加页面标题,img2pdf

[英]Add page title, img2pdf

我最近发现这个(很棒的)python 软件可以将多个图像转换为单个 pdf, img2pdf 创建第一个 pdf 后,我意识到每个页面都没有任何标题,并且很难确定原始图像是什么(因为有 400 个),有谁知道如何添加页面标题?

提前致谢。

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

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

必须在图像的同一文件夹中运行它。

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()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM