Существует ли какая-либо библиотека, инструмент или функция для замены изображения в PDF на текст? - PullRequest
0 голосов
/ 07 ноября 2019

Я пытаюсь отделить изображения от PDF с помощью PYTHON и хочу пометить это изображение абзацем, на который он ссылается. Для этого я выделил все изображения в этом файле PDF с помощью тега «XObject» в файле PDF,но так как, я тоже хочу, чтобы изображение к абзацуДля этого я планировал сначала заменить изображение каким-нибудь необычным текстом, а затем использовать его, чтобы получить абзац для этого изображения.

Сначала я попытался заменить изображение другим изображением, чтобы проверить код, приведенный вссылка-> https://arunmozhi.in/2019/01/29/replacing-image-in-a-pdf-with-python/, но не может заменить изображение изображением / текстом. Ниже приведен код, который я использовал по той же ссылке.

def replace_image(filepath, new_image):
    OBJECT_ID = "5 0 obj"

    f = open(filepath, "r",encoding="latin")
    contents = f.read()
    f.close()

    image = Image.open(new_image)
    width, height = image.size
    length = os.path.getsize(new_image)

    start = contents.find(OBJECT_ID)
    stream = contents.find("stream", start)
    image_beginning = stream + 7

    # Process the metadata and update with new image's details
    meta = contents[start: image_beginning]
    meta = meta.split("\n")
    new_meta = []
    for item in meta:
        if "/Width" in item:
            new_meta.append("/Width {0}".format(width))
        elif "/Height" in item:
            new_meta.append("/Height {0}".format(height))
        elif "/Length" in item:
            new_meta.append("/Length {0}".format(length))
        else:
            new_meta.append(item)
    new_meta = "\n".join(new_meta)
    # Find the end location
    image_end = contents.find("endstream", stream) - 1

    # read the image
    f = open(new_image, "r", encoding="latin")
    new_image_data = f.read()
    f.close()

    # recreate the PDF file with the new_sign
    with open(filepath.replace(".pdf","op.txt"), "wb") as f:
        f.write(bytes(contents[:start],"latin"))
        f.write(bytes("\n","latin"))
        f.write(bytes(new_meta,"latin"))
        f.write(bytes(new_image_data,"latin"))
        f.write(bytes(contents[image_end:],"latin"))

Ошибка - мне нужно использовать LATIN для чтения pdf, чтобы избежать ошибки недопустимых символов. Теперь я не могу записать содержимое обратно в pdf,После сохранения он выдает мне «INVALID PDF» по указанному пути.

Все, что мне нужно, - 1. Имя изображения с номером абзаца / текстом, принадлежащим изображению.

...