在 python 中使用 fpdf 创建 pdf。无法在循环中将图像向右移动
create pdf with fpdf in python. can not move image to the right in a loop
我使用 FPDF 生成带有 python 的 pdf。我有一个问题,我正在寻找解决方案。在文件夹“图像”中,有一些我想在一页上显示的图片。我做到了 - 也许不优雅。不幸的是我无法将图片向右移动。看起来 pdf_set_y 无法在循环中工作。
from fpdf import FPDF
from os import listdir
from os.path import isfile, join
onlyfiles = [f for f in listdir('../images') if isfile(join('../images', f))]
pdf = FPDF('L')
pdf.add_page()
pdf.set_font('Arial', 'B', 16)
onlyfiles = ['VI 1.png', 'VI 2.png', 'VI 3.png']
y = 10
for image in onlyfiles:
pdf.set_x(10)
pdf.set_y(y)
pdf.cell(10, 10, 'please help me' + image, 0, 0, 'L')
y = y + 210 #to got to the next page
pdf.set_x(120)
pdf.set_y(50)
pdf.image('../images/' + image, w=pdf.w/2.0, h=pdf.h/2.0)
pdf.output('problem.pdf', 'F')
如果你有 solution/help 给我就好了。非常感谢
问候亚历克斯
免责声明:我是 pText
我将在此解决方案中使用的库的作者。
让我们先创建一个空的 Document
:
pdf: Document = Document()
# create empty page
page: Page = Page()
# add page to document
pdf.append_page(page)
接下来我们将使用 Pillow
加载一个 Image
import requests
from PIL import Image as PILImage
im = PILImage.open(
requests.get(
"https://365psd.com/images/listing/fbe/ups-logo-49752.jpg", stream=True
).raw
)
现在我们可以创建一个 LayoutElement
Image
并使用它的 layout
方法
Image(im).layout(
page,
bounding_box=Rectangle(Decimal(20), Decimal(724), Decimal(64), Decimal(64)),
)
请记住原点(PDF space)在左下角。
最后,我们需要存储 Document
# attempt to store PDF
with open("output.pdf", "wb") as out_file_handle:
PDF.dumps(out_file_handle, pdf)
您可以在 GitHub, or using PyPi 上获取 pText
还有更多 examples,请查看它们以了解有关处理图像的更多信息。
我明白了。您想要在 pdf.image()
的调用中指定 x
和 y
位置。该评估基于此处 image
的文档:https://pyfpdf.readthedocs.io/en/latest/reference/image/index.html
因此您可以改为执行此操作(此处仅显示 for
循环):
for image in onlyfiles:
pdf.set_x(10)
pdf.set_y(y)
pdf.cell(10, 10, 'please help me' + image, 0, 0, 'L')
y = y + 210 # to go to the next page
# increase `x` from 120 to, say, 150 to move the image to the right
pdf.image('../images/' + image, x=120, y=50, w=pdf.w/2.0, h=pdf.h/2.0)
# new -> ^^^^^ ^^^^
您可以查看 pdfme 图书馆。它是 python 中创建 PDF 文档最强大的库。您可以添加 URL、脚注、页眉和页脚、表格以及您在 PDF 文档中需要的任何内容。
我看到的唯一问题是目前pdfme只支持jpg格式的图片。但如果这不是问题,它将帮助您完成任务。
查看文档 here。
我使用 FPDF 生成带有 python 的 pdf。我有一个问题,我正在寻找解决方案。在文件夹“图像”中,有一些我想在一页上显示的图片。我做到了 - 也许不优雅。不幸的是我无法将图片向右移动。看起来 pdf_set_y 无法在循环中工作。
from fpdf import FPDF
from os import listdir
from os.path import isfile, join
onlyfiles = [f for f in listdir('../images') if isfile(join('../images', f))]
pdf = FPDF('L')
pdf.add_page()
pdf.set_font('Arial', 'B', 16)
onlyfiles = ['VI 1.png', 'VI 2.png', 'VI 3.png']
y = 10
for image in onlyfiles:
pdf.set_x(10)
pdf.set_y(y)
pdf.cell(10, 10, 'please help me' + image, 0, 0, 'L')
y = y + 210 #to got to the next page
pdf.set_x(120)
pdf.set_y(50)
pdf.image('../images/' + image, w=pdf.w/2.0, h=pdf.h/2.0)
pdf.output('problem.pdf', 'F')
如果你有 solution/help 给我就好了。非常感谢 问候亚历克斯
免责声明:我是 pText
我将在此解决方案中使用的库的作者。
让我们先创建一个空的 Document
:
pdf: Document = Document()
# create empty page
page: Page = Page()
# add page to document
pdf.append_page(page)
接下来我们将使用 Pillow
Image
import requests
from PIL import Image as PILImage
im = PILImage.open(
requests.get(
"https://365psd.com/images/listing/fbe/ups-logo-49752.jpg", stream=True
).raw
)
现在我们可以创建一个 LayoutElement
Image
并使用它的 layout
方法
Image(im).layout(
page,
bounding_box=Rectangle(Decimal(20), Decimal(724), Decimal(64), Decimal(64)),
)
请记住原点(PDF space)在左下角。
最后,我们需要存储 Document
# attempt to store PDF
with open("output.pdf", "wb") as out_file_handle:
PDF.dumps(out_file_handle, pdf)
您可以在 GitHub, or using PyPi 上获取 pText 还有更多 examples,请查看它们以了解有关处理图像的更多信息。
我明白了。您想要在 pdf.image()
的调用中指定 x
和 y
位置。该评估基于此处 image
的文档:https://pyfpdf.readthedocs.io/en/latest/reference/image/index.html
因此您可以改为执行此操作(此处仅显示 for
循环):
for image in onlyfiles:
pdf.set_x(10)
pdf.set_y(y)
pdf.cell(10, 10, 'please help me' + image, 0, 0, 'L')
y = y + 210 # to go to the next page
# increase `x` from 120 to, say, 150 to move the image to the right
pdf.image('../images/' + image, x=120, y=50, w=pdf.w/2.0, h=pdf.h/2.0)
# new -> ^^^^^ ^^^^
您可以查看 pdfme 图书馆。它是 python 中创建 PDF 文档最强大的库。您可以添加 URL、脚注、页眉和页脚、表格以及您在 PDF 文档中需要的任何内容。
我看到的唯一问题是目前pdfme只支持jpg格式的图片。但如果这不是问题,它将帮助您完成任务。
查看文档 here。