137 lines
4.7 KiB
Plaintext
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
|
|
}
|