这两天有个任务,Y老师想为阅读馆设计一套任务卡,每张卡片上是书籍的对应信息,以及与这本书对应的任务。Y老师有一个excel文件里面有对应的书籍信息,但是需要把它们做成美美的图书任务卡才行。
现在问题来了,单独一张一张P肯定不现实,而且订好了模板之后放入内容都是机械而重复的工作,所以我写了个脚本来解决,接下来说一下解决方式。
我的想法是首先把底部的模板做好,然后写一个HTML文件,这个文件的网页使用这张模板为背景,然后我在上面需要的地方添加上字。之后使用Python写个脚本可以批处理的读入excel文件中的所有数据库信息,并且将他们生成到html的代码文件的对应位置,这样我可以得到100个HTML文件,最后将这些文件转化成图片或PDF文件,然后再用PS进行批处理进行剪裁和修改图片大小即可。
下面说一下具体步骤:
1. 用PS做好图片模板,这里不再多说,成品如下。
2. 将改模板写成html文件,我的代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
<html> <head> <title>任务单</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <style type="text/css"> <!-- .l{ font-family: "微软雅黑"; color:#563128; background-image: url(images/4.jpg); background-repeat: no-repeat; background-position: top center; line-height:130% } .book{ margin-top: 130px; text-align: center; font-size:21px; } .task{ font-size:20px; margin-top: 120px; text-align: center; } --> </style> </head> <body bgcolor="#FFFFFF" leftmargin="0" topmargin="0" marginwidth="0" marginheight="0" class="l"> <div class="book"> <td valign="middle" width="800" align="center" style="padding-right: 10px; padding-left: 10px; border-color: rgb(255, 255, 255); background-color: rgb(248, 248, 248);"> <p style="white-space: normal;"> <span>《讨厌黑夜的席奶奶 》</span> </p> <p style="white-space: normal;"> <span> (美) 凯利·杜兰·瑞安 文 (美)阿诺德·洛贝尔 图 </span> </p> <p style="white-space: normal;"> <span> 林良 译</span> </p> <p style="white-space: normal;"> <span> 河北教育出版社 </span> </p> </td> </div> </body> </html> |
3. 用Python读入CSV文件并且生成html文件的代码如下,这里我在输入中文字符到文本的时候本来用的是printf语句,但是一直有格式问题,最后生成了str
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 |
#! usr/bin/python #coding=utf-8 import os import xlrd import sys reload(sys) sys.setdefaultencoding( "utf-8" ) excelFile = "C:\\Users\\Dada\\Desktop\\book\\book.xls" data = xlrd.open_workbook(excelFile) table = data.sheets()[0] nrows = table.nrows ncols = table.ncols book = ['name','author','trans','publish'] for i in xrange(0, nrows): rowValues = table.row_values(i) j = 0 for item in rowValues: book[j] = item j = j + 1 print type(book[0]) print book[0] if(os.path.exists('C:\\Users\\Dada\\Desktop\\book\\html') == False): os.mkdir(r'C:\\Users\\Dada\\Desktop\\book\\html') fp = open('C:\\Users\\Dada\\Desktop\\book\\html\\' + str(i) + ".html", 'w') mystr = '''<html> <head> <title>任务单</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <style type="text/css"> <!-- .l{ font-family: "微软雅黑"; color:#563128; background-image: url(images/4.jpg); background-repeat: no-repeat; background-position: top center; line-height:130% } .book{ margin-top: 130px; text-align: center; font-size:21px; } .task{ font-size:20px; margin-top: 120px; text-align: center; } --> </style> </head> <body bgcolor="#FFFFFF" leftmargin="0" topmargin="0" marginwidth="0" marginheight="0" class="l"> <div class="book"> <td valign="middle" width="800" align="center" style="padding-right: 10px; padding-left: 10px; border-color: rgb(255, 255, 255); background-color: rgb(248, 248, 248);"> <p style="white-space: normal;"> <span>《'''+book[0]+''' 》</span> </p> <p style="white-space: normal;"> <span> '''+book[1]+''' </span> </p> <p style="white-space: normal;"> <span> '''+book[2]+''' 译</span> </p> <p style="white-space: normal;"> <span> '''+book[3]+''' </span> </p> </td> </div> </body> </html> ''' fp.write(mystr) fp.close() print "down!" |
1 2 |
此外这个步骤需要安装Python和xlrd库,指令如下 |
1 |
pip install xlrd |
4. HTML文件生成后,我到网上下载了一个软件叫做webshot,它可以把网站截图,并且支持批处理,这样我就可以把我的网页生成图片了,下载链接如下:
5. 要注意一下因为该软件截图的大小是817*617像素,所以我的背景图直接做成了这个像素大小的,如果大小不对截出来的图可能会只有一部分。此外,还要生成一个让webshot软件来读html文件地址的脚本,代码如下:
1 2 3 4 5 6 7 8 9 10 11 |
import os import sys if(os.path.exists('C:\\Users\\Dada\\Desktop\\book') == False): os.mkdir(r'C:\\Users\\Dada\\Desktop\\book') fp = open('C:\\Users\\Dada\\Desktop\\book\\web.txt', 'w') for i in range(100): print >> fp, 'http://localhost/html/%d.html' % (i) fp.close() print 'Done!' |
6. Webshot软件只能截屏能访问的网站,所以我们需要安装一下XAMPP,并且把html文件放到htdocs文件夹中,写的地址也应该是localhost的地址,选定读取的txt和生成的图片存储位置。
7. 最后因为生成的图片名字是乱码的,可以用以下的代码写进bat文件,放到图片目录下运行,即可批处理成按照数字顺序命名,再之后如果图片还需要什么操作,比如剪裁或者修改大小,可以用PS的批处理完成,这里不在赘述。
1 2 3 4 5 6 7 8 9 10 11 |
echo off&setlocal enabledelayedexpansion cls pause set /p suffix=请输入需要修改的文件后缀: set a=1 for /f "delims=" %%i in ('dir /b *.%suffix%') do ( ren "%%i" "!a!.jpg" set /a a+=1 ) echo 文件名批量修改成功, 按任意键退出... pause>nul |
8. 所有循环劳动需要花你的时间超过五分钟的事情,都用脚本来解决。