CodeGym /Các khóa học /Python SELF VI /Tạo và cấu trúc tệp PDF để tạo báo cáo

Tạo và cấu trúc tệp PDF để tạo báo cáo

Python SELF VI
Mức độ , Bài học
Có sẵn

1. Cấu trúc tệp PDF cho báo cáo

Bắt đầu tìm hiểu cách lưu và cấu trúc tệp PDF để tạo các báo cáo sao cho báo cáo của bạn trông như được tạo bởi một nhà thiết kế chuyên nghiệp.

Bắt đầu với những điều cơ bản. Như bạn đã biết, các báo cáo tốt không chỉ cần chứa thông tin hữu ích, mà còn phải dễ tiếp cận. Điều này có nghĩa rằng chúng cần có cấu trúc đúng. Hãy cùng tìm hiểu cách làm cho báo cáo của bạn vừa hữu ích vừa đẹp mắt.

Cách tổ chức và cấu trúc PDF đúng

Cấu trúc tài liệu - giống như kế hoạch của khối mã nguồn, chỉ khác trong thế giới văn bản. Cấu trúc tốt bao gồm:

  • Mục lục: Giúp nhanh chóng hiểu được tài liệu có gì và tìm được thông tin. Nếu bạn có một báo cáo lớn, thì mục lục chính là người bạn tốt nhất.
  • Các phần và tiểu phần: Thứ tự logic của thông tin giúp người đọc theo dõi ý tưởng của tác giả. Như trong cuộc sống: lúc đầu mở đầu, sau đó cao trào, và cuối cùng là kết thúc.
  • Các yếu tố trực quan: Bảng số liệu, đồ thị và hình ảnh thường có thể truyền tải nhiều hơn cả một trang văn bản.

Tạo mục lục và các phần để dễ dàng điều hướng

Việc tạo mục lục và các phần là chìa khóa để báo cáo của bạn không trở thành một mớ văn bản lộn xộn. Chia thông tin thành các khối logic và đừng quên tiêu đề.

Python

from PyPDF2 import PdfWriter, PdfReader

# Tạo tài liệu PDF mới
writer = PdfWriter()

# Thêm một trang trống
writer.add_blank_page(width=210, height=297)  # Định dạng chuẩn A4

# Ghi PDF vào tệp
with open("report.pdf", "wb") as f:
    writer.write(f)

2. Tạo báo cáo dưới định dạng PDF

Giờ đây, khi chúng ta biết cách cấu trúc báo cáo, đã tới lúc chuyển sang tạo báo cáo. PyPDF2 là người bạn đồng hành của bạn trong nhiệm vụ này.

Sử dụng PyPDF2 để tạo báo cáo từ dữ liệu

Tạo báo cáo từ dữ liệu không chỉ là sao chép và dán. Tài liệu của bạn cần có cảm giác sống động như chú mèo của bạn khi bạn muốn làm việc. PyPDF2 giúp bạn lấy dữ liệu, thêm chúng vào tài liệu và thậm chí tùy chỉnh giao diện của chúng.

Python

import PyPDF2

# Mở một tệp PDF hiện tại
with open('source.pdf', 'rb') as read_file:
    reader = PdfReader(read_file)
    writer = PdfWriter()

    # Sao chép trang tới tệp mới
    for page in reader.pages:
        writer.add_page(page)

    # Thêm tiêu đề
    writer.add_blank_page()
    page = writer.pages[-1]
    page.content = """Chào! Đây là báo cáo của tôi!""" # Lỗi!!
    
    # Ghi vào tệp mới
    with open('structured_report.pdf', 'wb') as write_file:
        writer.write(write_file)

Rất tiếc mã này sẽ không chạy được. PyPDF2 không hỗ trợ làm việc với nội dung trang, và thậm chí không thể thêm văn bản bằng nó. Nếu bạn cần thêm văn bản vào PDF hiện tại, bạn có thể sử dụng `ReportLab`.

3. Sử dụng `ReportLab`

Trong ví dụ sửa đổi này, chúng ta sẽ tạo PDF với PyPDF2 và sử dụng `ReportLab` để thêm văn bản. Sau đó, kết hợp kết quả vào một tệp PDF duy nhất.

Mã sửa đổi với `ReportLab` để thêm văn bản

Python

import PyPDF2
from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import A4

# Tạo tệp với tiêu đề bằng ReportLab
title_pdf = "title_page.pdf"
c = canvas.Canvas(title_pdf, pagesize=A4)
c.drawString(100, 800, "Chào! Đây là báo cáo của tôi!")
c.save()

# Tạo tệp PDF kết hợp
with open("source.pdf", "rb") as source_file, open(title_pdf, "rb") as title_file:
    reader_source = PyPDF2.PdfReader(source_file)
    reader_title = PyPDF2.PdfReader(title_file)
    writer = PyPDF2.PdfWriter()

    # Thêm trang tiêu đề
    writer.add_page(reader_title.pages[0])

    # Sao chép trang từ tệp nguồn
    for page in reader_source.pages:
        writer.add_page(page)

    # Lưu PDF mới với tiêu đề
    with open("structured_report.pdf", "wb") as output_file:
        writer.write(output_file)

print("Báo cáo đã được tạo thành công và lưu dưới tên 'structured_report.pdf'.")

Giải thích sửa đổi:

  1. Tạo trang tiêu đề: Sử dụng `ReportLab` để tạo tệp PDF với văn bản "Chào! Đây là báo cáo của tôi!".
  2. Kết hợp PDF: Sử dụng `PyPDF2` thêm trang tiêu đề và các trang khác từ `source.pdf`.
  3. Lưu tệp cuối cùng: Lưu tệp PDF kết hợp vào `structured_report.pdf`.

Thêm tiêu đề và các phần để cấu trúc tốt hơn

Bây giờ khi chúng ta đã có nền tảng cho tài liệu, hãy thêm một chút cấu trúc. Tiêu đề và tiểu mục sẽ giúp bạn không bị lạc đường trong rừng thông tin. PyPDF2 cho phép nhúng các trang, nhưng nếu bạn cần làm điều gì phức tạp hơn, như tùy chỉnh phông chữ, có lẽ hãy cân nhắc sử dụng thư viện ReportLab.

Python

from reportlab.lib.pagesizes import letter
from reportlab.pdfgen import canvas

def create_pdf(filename):
    # Tạo canvas PDF
    c = canvas.Canvas(filename, pagesize=letter)
    text = c.beginText(40, 750)

    # Tiêu đề
    text.setFont("Helvetica-Bold", 18)
    text.textLine("Báo cáo dự án 'Siêu bí mật'")

    # Tiểu mục
    text.setFont("Helvetica", 14)
    text.textLine("Các chương:")
    text.textLine("1. Giới thiệu")
    text.textLine("2. Phân tích dữ liệu")
    text.textLine("3. Kết luận")

    c.drawText(text)
    c.save()

create_pdf("detailed_report.pdf")

Lỗi và khó khăn

Như trong mọi lĩnh vực lập trình, xử lý tệp PDF cũng có những khó khăn. Một trong những nguồn gốc chính của rắc rối là sử dụng chính xác các chỉ số trang. Trong PyPDF2, cũng như trong Python nói chung, chỉ số trang bắt đầu từ số 0. Hãy cẩn thận để không vô tình thêm sai trang vào báo cáo của bạn.

Một khía cạnh khác có thể gây ra vấn đề là mã hóa văn bản sai. Tệp PDF có thể chứa văn bản được mã hóa dưới các định dạng khác nhau. Hãy đảm bảo rằng mã của bạn có thể xử lý chính xác các ký tự, đặc biệt nếu báo cáo của bạn cần sử dụng nhiều ngôn ngữ khác nhau.

Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION