This repository has been archived on 2024-06-23. You can view files and clone it, but cannot push or open issues or pull requests.
mathdeptv2/工具/分年级专用工具/赋能卷生成.ipynb

137 lines
4.7 KiB
Plaintext

{
"cells": [
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0\n"
]
}
],
"source": [
"#在 临时文件/赋能答题纸 目录中保留一个pdf(赋能试卷的答题纸), 不留别的pdf文件. \n",
"#在 模板文件 目录中保留 赋能template.txt.\n",
"#在 临时文件/赋能答题纸 目录中保留output目录.\n",
"\"\"\"---设置文件名---\"\"\"\n",
"filename = \"赋能42\"\n",
"\n",
"\"\"\"---设置题目列表---\"\"\"\n",
"problems = r\"\"\"\n",
"746:753,31396,755\n",
"\n",
"\"\"\"\n",
"#完成后将含有 filename 的文件移至其它目录\n",
"\n",
"import os,re,json,shutil\n",
"from PIL import Image\n",
"\n",
"\n",
"def generate_number_set(string,dict):\n",
" string = re.sub(r\"[\\n\\s]\",\"\",string)\n",
" string_list = string.split(\",\")\n",
" numbers_list = []\n",
" for s in string_list:\n",
" if not \":\" in s:\n",
" numbers_list.append(s.zfill(6))\n",
" else:\n",
" start,end = s.split(\":\")\n",
" for ind in range(int(start),int(end)+1):\n",
" numbers_list.append(str(ind).zfill(6))\n",
" return numbers_list\n",
"\n",
"#读取数据库\n",
"with open(\"../../题库0.3/Problems.json\",\"r\",encoding = \"utf8\") as f:\n",
" jsondata = f.read()\n",
"pro_dict = json.loads(jsondata)\n",
"\n",
"#读取pdf文件并转化为png\n",
"pdffile = \"临时文件/赋能答题纸/\"+[f for f in os.listdir(\"临时文件/赋能答题纸\") if \".pdf\" in f][0]\n",
"try:\n",
" shutil.copy(pdffile,\"tempanswersheet.pdf\")\n",
"except:\n",
" os.remove(\"tempanswersheet.pdf\")\n",
" shutil.copy(pdffile,\"tempanswersheet.pdf\")\n",
"os.system(\"pdftocairo -png tempanswersheet.pdf\")\n",
"try:\n",
" os.rename(\"tempanswersheet-1.png\",\"临时文件/赋能答题纸/output/\"+filename+\"答题纸.png\")\n",
"except:\n",
" os.remove(\"临时文件/赋能答题纸/output/\"+filename+\"答题纸.png\")\n",
" os.rename(\"tempanswersheet-1.png\",\"临时文件/赋能答题纸/output/\"+filename+\"答题纸.png\")\n",
"os.rename(pdffile,\"临时文件/赋能答题纸/\"+filename+\"答题纸_raw.pdf\")\n",
"os.remove(\"tempanswersheet.pdf\")\n",
"\n",
"#图片下方涂白\n",
"pic = Image.open(\"临时文件/赋能答题纸/output/\"+filename+\"答题纸.png\")\n",
"whiteheight = pic.size[1]-880-5\n",
"whitewidth = pic.size[0]-100\n",
"whitecover = Image.new(\"RGB\",(whitewidth,whiteheight),(255,255,255))\n",
"pic1 = pic\n",
"pic1.paste(whitecover,(2,880))\n",
"pic1.save(\"临时文件/赋能答题纸/output/\"+filename+\"答题纸.png\")\n",
"\n",
"\n",
"#替换tex模板中的内容\n",
"problem_list = [id for id in generate_number_set(problems.strip(),pro_dict) if id in pro_dict]\n",
"\n",
"with open(\"模板文件/赋能template.txt\",\"r\",encoding=\"utf8\") as f:\n",
" texdata = f.read()\n",
"texdata = texdata.replace(\"背景待替换\",filename+\"答题纸.png\")\n",
"data_problems = \"\\n\\n\"\n",
"for id in problem_list:\n",
" problemset = pro_dict[id]\n",
" problem = problemset[\"content\"]\n",
" data_problems += \"\\\\item \" + \"{\\\\tiny (\"+id+\")} \"+problem + \"\\n\\n\"\n",
"texdata = texdata.replace(\"题目待替换\",data_problems)\n",
"\n",
"with open(\"临时文件/赋能答题纸/output/\"+filename+\".tex\",\"w\",encoding=\"utf8\") as f:\n",
" f.write(texdata)\n",
"\n",
"#编译文件\n",
"os.chdir(\"临时文件/赋能答题纸/output\")\n",
"os.system(\"xelatex -interaction=batchmode \" + filename +\".tex\")\n",
"print(os.system(\"xelatex -interaction=batchmode \" + filename +\".tex\"))\n",
"os.chdir(\"../../..\")"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "pythontest",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.8.15"
},
"orig_nbformat": 4,
"vscode": {
"interpreter": {
"hash": "91219a98e0e9be72efb992f647fe78b593124968b75db0b865552d6787c8db93"
}
}
},
"nbformat": 4,
"nbformat_minor": 2
}