from tkinter import *
from tkinter import messagebox
from tkinter.scrolledtext import ScrolledText
from bs4 import BeautifulSoup, NavigableString
import ctypes
import re
class HTMLProcessorApp:
def __init__(self, master):
self.master = master
master.title("就业办导航网一键更改格式")
master.geometry("1200x600")
main_frame = Frame(master)
main_frame.pack(fill=BOTH, expand=1, padx=10, pady=10)
self.input_label = Label(main_frame, text="输入HTML内容:")
self.input_label.grid(row=0, column=0, sticky=W)
self.input_text = ScrolledText(main_frame, wrap=WORD, font=('宋体', 12))
self.input_text.grid(row=1, column=0, sticky="nsew", padx=(0, 10))
self.process_btn = Button(main_frame,
text="处理 HTML →",
command=self.process_html,
height=3,
bg="#4CAF50",
fg="white")
self.process_btn.grid(row=1, column=1, padx=10)
output_header = Frame(main_frame)
output_header.grid(row=0, column=2, sticky=EW)
self.output_label = Label(output_header, text="处理结果:")
self.output_label.pack(side=LEFT)
self.copy_btn = Button(output_header,
text="📋 复制结果",
command=self.copy_output,
bg="#2196F3",
fg="white")
self.copy_btn.pack(side=RIGHT, padx=5)
self.output_text = ScrolledText(main_frame,
wrap=WORD,
font=('宋体', 12))
self.output_text.grid(row=1, column=2, sticky="nsew", padx=(10, 0))
main_frame.grid_columnconfigure(0, weight=1)
main_frame.grid_columnconfigure(2, weight=1)
main_frame.grid_rowconfigure(1, weight=1)
def process_html(self):
"""处理HTML并显示结果"""
input_content = self.input_text.get("1.0", END)
try:
processed = process_html(input_content)
self.output_text.delete("1.0", END)
self.output_text.insert(END, processed)
except Exception as e:
self.output_text.delete("1.0", END)
self.output_text.insert(END, f"处理出错:{str(e)}")
def copy_output(self):
"""复制输出内容到剪贴板"""
output_content = self.output_text.get("1.0", END).strip()
if output_content:
try:
self.master.clipboard_clear()
self.master.clipboard_append(output_content)
messagebox.showinfo("操作成功", "内容已复制到剪贴板")
except Exception as e:
messagebox.showerror("复制失败", f"无法访问剪贴板:{str(e)}")
else:
messagebox.showwarning("内容为空", "输出区域没有可复制的内容")
def process_html(html):
"""HTML文档处理主函数"""
soup = BeautifulSoup(html, 'html.parser')
for p in soup.find_all('p'):
base_style = "font-family: 宋体, SimSun; font-size: 18px;"
if p.find('img'):
base_style += " text-align: center;"
p['style'] = base_style
new_contents = []
buffer = []
prev_was_header = False
for content in p.contents:
if content.name == 'br':
if buffer:
text = ''.join(buffer).strip()
if re.match(r'^[一二三四五六七八九十]、', text):
new_contents.append(soup.new_tag('br'))
strong = soup.new_tag('strong')
strong.string = f' {text}'
new_contents.append(strong)
new_contents.append(soup.new_tag('br'))
prev_was_header = True
else:
if prev_was_header:
new_contents.append(soup.new_tag('br'))
prev_was_header = False
span = soup.new_tag('span')
span.string = f' {text}'
new_contents.append(span)
new_contents.append(content)
buffer = []
else:
new_contents.append(content)
elif isinstance(content, NavigableString):
cleaned = content.strip()
if cleaned:
buffer.append(cleaned)
else:
if buffer:
span = soup.new_tag('span')
span.string = ' ' + ''.join(buffer)
new_contents.append(span)
buffer = []
new_contents.append(content)
if buffer:
text = ''.join(buffer).strip()
if re.match(r'^[一二三四五六七八九十]、', text):
new_contents.append(soup.new_tag('br'))
strong = soup.new_tag('strong')
strong.string = f' {text}'
new_contents.append(strong)
new_contents.append(soup.new_tag('br'))
else:
span = soup.new_tag('span')
span.string = f' {text}'
new_contents.append(span)
p.clear()
for item in new_contents:
if isinstance(item, str):
p.append(NavigableString(item))
else:
p.append(item)
for table in soup.find_all('table'):
table['style'] = "font-family: 宋体, SimSun; font-size: 18px;"
return str(soup)
if __name__ == "__main__":
root = Tk()
ctypes.windll.shcore.SetProcessDpiAwareness(1)
ScaleFactor = ctypes.windll.shcore.GetScaleFactorForDevice(0)
root.tk.call('tk', 'scaling', ScaleFactor / 75)
app = HTMLProcessorApp(root)
root.mainloop()