from reportlab.lib.pagesizes import A4, landscape from reportlab.pdfgen import canvas from PyPDF2 import PdfReader, PdfWriter from reportlab.lib.colors import Color import io def create_grid_overlay(): packet = io.BytesIO() c = canvas.Canvas(packet, pagesize=landscape(A4)) grid_spacing = 5 # Khoảng cách giữa các đường lưới c.setStrokeColor(Color(255, 0 ,0 , alpha = 0.2)) c.setLineWidth(0.2) # Vẽ các đường dọc for x in range(0, int(A4[1]), grid_spacing): c.line(x, 0, x, A4[0]) # Vẽ các đường ngang for y in range(0, int(A4[0]), grid_spacing): c.line(0, y, A4[1], y) # Thêm tọa độ vào lưới for x in range(0, int(A4[1]), grid_spacing): for y in range(0, int(A4[0]), grid_spacing): c.setFont("Helvetica", 1.2) c.drawString(x + 2, y + 2, f"({x}, {y})") # Dịch văn bản một chút để dễ nhìn hơn c.save() packet.seek(0) return PdfReader(packet) def add_grid_to_existing_pdf(existing_pdf_path, output_pdf_path): grid_overlay = create_grid_overlay() reader = PdfReader(existing_pdf_path) writer = PdfWriter() for page_number in range(len(reader.pages)): page = reader.pages[page_number] # Thêm trang lưới lên trang hiện tại của file PDF gốc if page_number < len(grid_overlay.pages): overlay_page = grid_overlay.pages[page_number] page.merge_page(overlay_page) writer.add_page(page) with open(output_pdf_path, "wb") as output_file: writer.write(output_file) # Ví dụ sử dụng: add_grid_to_existing_pdf("input_file.pdf", "output_file.pdf")