[英]Image drawn to reportlab pdf bigger than pdf paper size
i'm writing a program which takes all the pictures in a given folder and aggregates them into a pdf.我正在编写一个程序,该程序将给定文件夹中的所有图片汇总为 pdf。 The problem I have is that when the images are drawn, they are bigger in size and are rotated to the left oddly.我遇到的问题是,绘制图像时,它们的尺寸更大,并且奇怪地向左旋转。 I've searched everywhere, havent found anything even in the reportlab documentation.我到处搜索,甚至在reportlab文档中也没有找到任何东西。
Here's the code:这是代码:
import os
from PIL import Image
from PyPDF2 import PdfFileWriter, PdfFileReader
from reportlab.pdfgen import canvas
from reportlab.lib.units import cm
from StringIO import StringIO
def main():
images = image_search()
output = PdfFileWriter()
for image in images:
Image_file = Image.open(image) # need to convert the image to the specific size first.
width, height = Image_file.size
im_width = 1 * cm
# Using ReportLab to insert image into PDF
watermark_str = "watermark" + str(images.index(image)) + '.pdf'
imgDoc = canvas.Canvas(watermark_str)
# Draw image on Canvas and save PDF in buffer
# define the aspect ratio first
aspect = height / float(width)
## Drawing the image
imgDoc.drawImage(image, 0,0, width = im_width, height = (im_width * aspect)) ## at (399,760) with size 160x160
imgDoc.showPage()
imgDoc.save()
# Get the watermark file just created
watermark = PdfFileReader(open(watermark_str, "rb"))
#Get our files ready
pdf1File = open('sample.pdf', 'rb')
page = PdfFileReader(pdf1File).getPage(0)
page.mergePage(watermark.getPage(0))
#Save the result
output.addPage(page)
output.write(file("output.pdf","wb"))
#The function which searches the current directory for image files.
def image_search():
found_images = []
for doc in os.listdir(os.curdir):
image_ext = ['.jpg', '.png', '.PNG', '.jpeg', '.JPG']
for ext in image_ext:
if doc.endswith(ext):
found_images.append(doc)
return found_images
main()
I also tried scaling and specifying the aspect ratio using the im_width
variable, which gave the same output.我还尝试使用im_width
变量缩放和指定纵横比,这给出了相同的输出。
After a little bit of confusion about your goal I figured out that the goal is to make a PDF overview of the images in the current folder.在对您的目标有点困惑之后,我发现目标是对当前文件夹中的图像进行 PDF 概览。 To do so we actual don't need PyPDF2
as Reportlab offers everything we need for this.为此,我们实际上不需要PyPDF2
因为 Reportlab 提供了我们为此所需的一切。
See the code below with the comments as guidelines:请参阅下面的代码,以注释为指导:
def main():
output_file_loc = "overview.pdf"
imgDoc = canvas.Canvas(output_file_loc)
imgDoc.setPageSize(A4) # This is actually the default page size
document_width, document_height = A4
images = image_search()
for image in images:
# Open the image file to get image dimensions
Image_file = Image.open(image)
image_width, image_height = Image_file.size
image_aspect = image_height / float(image_width)
# Determine the dimensions of the image in the overview
print_width = document_width
print_height = document_width * image_aspect
# Draw the image on the current page
# Note: As reportlab uses bottom left as (0,0) we need to determine the start position by subtracting the
# dimensions of the image from those of the document
imgDoc.drawImage(image, document_width - print_width, document_height - print_height, width=print_width,
height=print_height)
# Inform Reportlab that we want a new page
imgDoc.showPage()
# Save the document
imgDoc.save()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.