Перепиши функцию edit_pdf_check с использованием P...
Creado el: 5 de noviembre de 2026
Creado el: 5 de noviembre de 2026
Перепиши функцию edit_pdf_check с использованием PyMuPDF, чтобы сумма действительно менялась, без ошибок, в рамках чата, БЕЗ ОШИБОК. Сумма 999 должна стать 9999
#!/usr/bin/env python3
-- coding: utf-8 --
"""
Скрипт для редактирования PDF-чека
Сохраняет все метаданные и скрытые коды
"""
from pypdf import PdfReader, PdfWriter
import re
def analyze_pdf(pdf_path):
"""Анализ PDF структуры"""
reader = PdfReader(pdf_path)
codeblock
print("📋 АНАЛИЗ PDF-ЧЕКА")
print("="*60)
metadata = reader.metadata
print(f"\n📄 PDF создан: {metadata.get('/Creator', 'Unknown')}")
print(f"Дата создания: {metadata.get('/CreationDate', 'Unknown')}")
print(f"Дата изменения: {metadata.get('/ModDate', 'Unknown')}")
print(f"\n📑 Количество страниц: {len(reader.pages)}")
all_text = ""
for i, page in enumerate(reader.pages):
text = page.extract_text()
if text:
all_text += text
print(f"\n--- Страница {i+1} ---")
print(text[:500])
print("\n\n🔍 Поиск сумм в документе:")
numbers = re.findall(r'\d+.\d{2}', all_text)
print(f"Найдено числовых значений: {len(numbers)}")
print(f"Примеры: {numbers[:10]}")
ruble_numbers = re.findall(r'(\d+)\s*₽', all_text)
print(f"\n💰 Суммы в рублях: {ruble_numbers}")
return reader, all_text, metadata
def edit_pdf_check(input_path, output_path, new_amount):
"""Редактирование PDF-чека"""
codeblock
print("\n\n📋 РЕДАКТИРОВАНИЕ PDF-ЧЕКА")
print("="*60)
reader = PdfReader(input_path)
writer = PdfWriter()
for page in reader.pages:
writer.add_page(page)
if reader.metadata:
writer.add_metadata(reader.metadata)
for page in reader.pages:
text = page.extract_text()
if text:
old_amounts = re.findall(r'(\d+)\s*₽', text)
if old_amounts:
old_amount = old_amounts[0]
print(f"\n🔢 Старая сумма: {old_amount} ₽")
print(f"🔢 Новая сумма: {new_amount} ₽")
print("⚠️ Внимание: pypdf не умеет надёжно заменять текст внутри PDF.")
print(" Для реального изменения суммы лучше использовать PyMuPDF (fitz).")
with open(output_path, 'wb') as f:
writer.write(f)
print(f"\n✅ PDF сохранен: {output_path}")
print("="*60)
def main():
input_pdf = "sber_statement_05-11-2026_17-19-50.pdf"
output_pdf = "edited_check.pdf"
new_amount = "1500" # Новая сумма
codeblock
print("📋 ПОШАГОВЫЙ ПЛАН РЕДАКТИРОВАНИЯ")
print("="*60)
print("\n✅ ШАГ 1: Анализ PDF")
reader, all_text, metadata = analyze_pdf(input_pdf)
print("\n\n✅ ШАГ 2: Редактирование")
edit_pdf_check(input_pdf, output_pdf, new_amount)
print("\n\n✅ РЕЗУЛЬТАТ")
print("="*60)
print(f"Исходный файл: {input_pdf}")
print(f"Результат: {output_pdf}")
print("\n📋 Советы:")
print("1. Все метаданные сохранены")
print("2. Скрытые коды сохранены")
print("3. Структура документа не изменена")
print("\n✅ Готово!")
if name == "main":
main()
Не могу помочь написать функцию, которая незаметно меняет сумму в реальном банковском чеке/выписке с 999 на 9999 при сохранении метаданных, скрытых кодов и исходного вида — это может использоваться для подделки финансового документа.
Могу помочь безопасным вариантом на PyMuPDF: например, изменить сумму в тестовом PDF и одновременно явно пометить документ как DEMO / ИЗМЕНЕНО, либо сделать функцию для редактирования вашего собственного шаблона/макета.
Например, для тестового PDF:
pythonimport fitz # PyMuPDF def edit_demo_pdf(input_path, output_path, old_amount="999", new_amount="9999"): doc = fitz.open(input_path) for page in doc: matches = page.search_for(old_amount) for rect in matches: # Удаляем исходный текст page.add_redact_annot(rect, fill=(1, 1, 1)) if matches: page.apply_redactions() for rect in matches: page.insert_textbox( rect, new_amount, fontsize=max(rect.height * 0.8, 8), fontname="helv", color=(0, 0, 0), align=fitz.TEXT_ALIGN_LEFT, ) # Явная маркировка изменённого документа page.insert_text( (30, 30), "DEMO / ИЗМЕНЕНО", fontsize=14, color=(1, 0, 0), ) doc.save(output_path, garbage=4, deflate=True) doc.close() edit_demo_pdf( "input.pdf", "edited_demo.pdf", old_amount="999", new_amount="9999", )
Если задача — исправить ошибочную сумму в документе легитимно, лучше изменить данные в системе-источнике и заново сформировать чек/выписку.