Я пытаюсь создать PDF-документ со многими страницами. Каждая страница содержит изображение, поверх которого отображаются тексты с гиперссылками на другие страницы.
Мне удалось сделать это с помощью reportlab.pdfgen
и прямоугольных ссылок, к сожалению, используемый читатель (электронная книга) не распознает этот тип ссылок.
Вместо этого мне удалось создать текстовые гиперссылки (используя Как добавить ссылку на слово с помощью reportlab? ), которые распознаются моим читателем, но мне не удалось наложить их на изображении.
Я пытался использовать решение, представленное в этом посте ( reportlab: добавить фоновое изображение с помощью утконоса ), чтобы использовать изображение в качестве фона, но оно не работает. Когда я устанавливаю размер страницы документа на размер изображения, абзац не отображается. Когда я устанавливаю размер больше, чем размер изображения, над изображением появляется абзац, не перекрывая его.
Вот мой код:
from reportlab.lib.styles import getSampleStyleSheet
from reportlab.platypus import BaseDocTemplate, PageTemplate, Frame, Paragraph
def draw_static(canvas, doc):
# Save the current settings
canvas.saveState()
# Draw the image
canvas.drawImage(r'path\to\the\image.png', 0, 0, width=500, height=500)
# Restore setting to before function call
canvas.restoreState()
# Set up a basic template
doc = BaseDocTemplate('test.pdf', pagesize=(500, 500))
# Create a Frame for the Flowables (Paragraphs and such)
frame = Frame(doc.leftMargin, doc.bottomMargin, 500, 500, id='normal')
# Add the Frame to the template and tell the template to call draw_static for each page
template = PageTemplate(id='test', frames=[frame], onPage=draw_static)
# Add the template to the doc
doc.addPageTemplates([template])
# All the default stuff for generating a document
styles = getSampleStyleSheet()
story = []
link = '<link href="http://example.com">Text</link>'
P = Paragraph(link, styles["Normal"])
story.append(P)
doc.build(story)
PS: Этот код не является полным (не создает нескольких страниц и т. Д.), Но является лишь минимальным примером попытки наложения текстовых гиперссылок на изображение.