Python pptx lấy kích thước hình ảnh

Các nhà khoa học dữ liệu dành một lượng thời gian đáng kể để trực quan hóa dữ liệu để kể chuyện hoặc truyền đạt thông tin chuyên sâu cho người dùng cuối của một sản phẩm dữ liệu. Thông thường, khả năng giải thích ngắn gọn và chính xác các phương pháp được sử dụng và những hiểu biết sâu sắc thu được dựa trên phương tiện truyền thông và thời gian chuẩn bị trực quan hóa. Để hạn chế thời gian dành cho việc tạo báo cáo hoặc trang trình bày PowerPoint theo cách thủ công, mỗi lần một trang, chúng tôi có thể tự động hóa quy trình. Hãy tự động tạo một bản trình chiếu chứa các ô được tạo bằng Python. Nó không quá khó, nhưng có một số mẹo chắc chắn sẽ giúp quá trình này dễ dàng hơn. Chúng tôi sẽ sử dụng thư viện python-pptx được đọc trong các tệp PowerPoint mẫu và tạo các trang trình bày mới với nội dung thú vị. Python-pptx có khả năng thêm văn bản, SmartArt và các định dạng phương tiện khác vào các trang chiếu dựa trên tệp mẫu.  

Chuẩn bị tệp Mẫu PowerPoint

Xóa toàn bộ slide trong file Template PowerPoint

Xóa tất cả các trang chiếu trong tệp vì bất kỳ trang chiếu nào trong tệp sẽ tự động được thêm vào bộ trang chiếu mới của bạn. Đáng tiếc là thư viện python-pptx không cho phép xóa các slide, vì vậy chúng tôi cần tệp mẫu trống

Tùy chỉnh tệp PowerPoint mẫu qua Slide Master View

Chúng tôi có thể điều chỉnh giao diện của các trang trình bày theo cách chúng tôi muốn chúng xuất hiện. Chẳng hạn, chúng ta có thể chỉ định vị trí của hình ảnh, biểu đồ hoặc văn bản trên trang trình bày. Để chèn hình ảnh, chúng tôi phải chỉ định trình giữ chỗ hình ảnh [không phải trình giữ chỗ nội dung có mục đích chung]. Để thay đổi bố cục của các slide mẫu của chúng tôi.  

  1. Mở tệp PowerPoint mẫu của bạn
  2. Vào View -> Slide Master để hiện tất cả các mẫu slide
  3. Tùy chỉnh các trang trình bày mẫu bằng cách thêm các trang trình bày mới với các trình giữ chỗ cụ thể ở các vị trí mong muốn. Để chèn trình giữ chỗ Ảnh, hãy chọn một trang chiếu mẫu hoặc sao chép trang chiếu đó, chuyển đến tab Trang chiếu cái, bấm vào Chèn trình giữ chỗ, chọn Ảnh, sau đó vẽ một đường viền hình chữ nhật ở nơi bạn muốn hình ảnh xuất hiện trên trang chiếu.  
  4. Xóa bất kỳ yếu tố nào mà bạn không muốn
  5. Chuyển về Chế độ xem thông thường và lưu tệp PowerPoint mẫu, nếu không, sàn trình chiếu mới của chúng tôi sẽ mở trong Chế độ xem trang trình bày theo mặc định.  

Slide Master Xem tệp PowerPoint mẫu

Tạo đánh dấu PowerPoint

Chạy phân tích_ppt. py trong dòng lệnh với tệp PowerPoint Mẫu trống của bạn làm đầu vào để tạo đánh dấu có nhãn của các loại trang trình bày tiêu chuẩn trong bản trình bày PowerPoint của bạn.  

python analyze_ppt.py datathrillz_template.pptx datathrillz_template_markup.pptx

Đánh dấu cho Slide 0 của tệp PowerPoint mẫu

Tệp PowerPoint đánh dấu này sẽ cho phép chúng tôi dễ dàng xác định bố cục trang chiếu và trình giữ chỗ nội dung mà chúng tôi muốn sử dụng.  

Tự động tạo slide PowerPoint

Bây giờ tệp mẫu đã được chuẩn bị và chúng tôi biết cách truy cập các trình giữ chỗ khác nhau trên trang trình bày, chúng tôi có thể xây dựng bộ bài của mình theo chương trình. Dưới đây, tôi bao gồm mã để nhập các thư viện cần thiết và tạo các hàm trợ giúp để tạo PowerPoint

import pandas as pd
import numpy as np
from datetime import date
import matplotlib.pyplot as plt
import seaborn as sns

def _add_image[slide, placeholder_id, image_url]:
    '''
    Funtion to add an image to a PowerPoint slide with a Picture placeholder.
    Will automatically insert the image without cropping the image
    Arguments:
     - slide: slide object from the python-pptx library containing the slide on which you want the table to appear
     - placeholder_id - index of the Picture placeholder
     - image_url - path to the image
    '''
    from PIL import Image
    placeholder = slide.placeholders[placeholder_id]
 
    # Calculate the image size of the image
    im = Image.open[image_url]
    width, height = im.size
 
    # Make sure the placeholder doesn't zoom in
    placeholder.height = height
    placeholder.width = width
 
    # Insert the picture
    placeholder = placeholder.insert_picture[image_url]
 
    # Calculate ratios and compare
    image_ratio = width / height
    placeholder_ratio = placeholder.width / placeholder.height
    ratio_difference = placeholder_ratio - image_ratio
 
    # Placeholder width too wide:
    if ratio_difference > 0:
        difference_on_each_side = ratio_difference / 2
        placeholder.crop_left = -difference_on_each_side
        placeholder.crop_right = -difference_on_each_side
    # Placeholder height too high
    else:
        difference_on_each_side = -ratio_difference / 2
        placeholder.crop_bottom = -difference_on_each_side
        placeholder.crop_top = -difference_on_each_side
    return[slide]

def df_to_table[slide, df]:
    """
    Adds a table to slide of a PowerPoint presentation containing a Table placeholder.
    The table is a standard Powerpoint table, and can easily be modified with the Powerpoint tools,
    for example: resizing columns, changing formatting etc.
    Arguments:
     - slide: slide object from the python-pptx library containing the slide on which you want the table to appear
     - df: Pandas DataFrame with the data
     """
    title = slide.shapes.title
    title.text = "Summary Table for Iris Dataset"
    table_placeholder = slide.placeholders[12]
    rows,cols = report_data.shape
    shape = table_placeholder.insert_table[rows=rows+1, cols=cols+1]
    table = shape.table
    # do column header
    for ch,head in enumerate[report_data.columns.tolist[]]:
        cell = table.cell[0, ch+1]
        cell.text = head
    
    # row headers 
    for rh, head in enumerate[report_data.index.tolist[]]:
        cell = table.cell[rh+1, 0]
        cell.text = head

    for rr in range[rows]:
        for cc in range[cols]:
            cell = table.cell[rr+1, cc+1]
            cell.text = "{:.2f}".format[df.iloc[rr,cc]]

def create_ppt[infile, outfile, report_data, chart]:
    """ Take the input powerpoint file and use it as the template for the output
    file.
    Arguments:
    - infile: input/template PowerPoint file path
    - outfile: path to name of output PowerPoint file  
    - report_data: dataframe with report data 
    - chart: path to the image for insertion
    """
    from pptx import Presentation
    from pptx.util import Inches
    
    prs = Presentation[infile]
    # Use the output from analyze_ppt to understand which layouts and placeholders
    # to use
    # Create a title slide first
    title_slide_layout = prs.slide_layouts[0]
    slide = prs.slides.add_slide[title_slide_layout]
    title = slide.shapes.title
    subtitle = slide.placeholders[1]
    title.text = "Report on the Iris Data Set"
    subtitle.text = "Generated on {:%m-%d-%Y}".format[date.today[]]
    
    # Create the summary chart
    graph_slide_layout = prs.slide_layouts[10]
    slide = prs.slides.add_slide[graph_slide_layout]
    title = slide.shapes.title
    title.text = "Bar Plot of Mean Sepal Width from Iris Dataset"
    slide = _add_image[slide,1,chart]
    
    # Add Table Slide
    slide = prs.slides.add_slide[prs.slide_layouts[6]]
    df_to_table[slide, report_data]
        
    prs.save[outfile]

Bây giờ, chúng tôi tạo tệp PowerPoint, mỗi lần một trang chiếu – bắt đầu bằng trang chiếu tiêu đề và kết thúc bằng trang chiếu có bảng được chèn

report_name = r"datathrillz\pptx_python\iris.csv"
df = pd.read_csv[report_name]
report_data = create_pivot[df]
chart_path = r"datathrillz\pptx_python\report-image.png"
create_chart[df, chart_path]
infile = r"datathrillz\pptx_python\datathrillz_template.pptx" 
outfile = r"datathrillz\pptx_python\final_report.pptx"
create_ppt[infile, outfile, report_data, chart_path]

Dưới đây là các slide được tạo [theo thứ tự xuất hiện. trang chiếu tiêu đề, trang chiếu có Hình ảnh được chèn và trang chiếu có Bảng được chèn]

Chúng tôi có thể thêm tài liệu mới vào PowerPoint trước khi gửi đi. Bằng cách tự động xuất số liệu sang PowerPoint, thời gian quý báu được tiết kiệm để chúng tôi có thể tập trung vào những điều thú vị khác. Quy trình này rất phù hợp với phần báo cáo của quy trình phân tích dữ liệu và tiết kiệm thời gian nếu các bản chiếu phải được tạo nhiều lần. Tuy nhiên, có một vài giới hạn của python-pptx cần lưu ý khi tạo tệp PowerPoint

  1. python-pptx không thể xóa slide
  2. python-pptx không thể thêm các thành phần vào trang chiếu, chỉ điền vào chỗ dành sẵn. Người dùng phải chỉ định trước trình giữ chỗ văn bản nếu họ muốn chèn văn bản và tương tự cho hình ảnh và phương tiện khác
  3. python-pptx không thể chỉ nhập các định dạng hình ảnh dựa trên vectơ vào tệp PowerPoint. jpeg,. png. hoặc. gif

Bài viết này đã trình bày cách tạo bản trình bày PowerPoint bằng Python và cách dễ dàng sử dụng quy trình này cho trường hợp sử dụng báo cáo kinh doanh. Bất kỳ ai cũng có thể sử dụng PowerPoint, điều này giúp bạn dễ dàng theo dõi câu chuyện mà dữ liệu vẽ nên.  

Chủ Đề