在ArcMap中批量创建文本框批量输出PDF
先发下牢骚,由于某个家长不负责任的行为导致我家这片区域的小孩上了一个星期的网课。。。
神兽在家,除了上网课,小奔运动打卡,写字和计算练习当然也要安排上
出计算练习题当然也不可能手写,刚好以前做土地确权时用ArcMap批量输出过地块示意图的PDF,出计算练习题就更简单了,就用到了文本框,连图层都不用加,数据驱动页面也不需要使用
首先要自己制作两个Python脚本工具
Python脚本工具的制作可以学习帮助文档
还可以参考
ArcMap自定义脚本工具制作
https://liyuanxiang.blog.csdn.net/article/details/52774278
新建一个ArcMap工程
在工程的工作目录右键新建一个『工具箱』
右键点击建好的『计算练习』工具箱添加Python脚本,生成『批量创建文本框』工具
右键点击建好的『计算练习』工具箱添加Python脚本,生成『批量输出PDF』工具,『批量输出PDF』工具设置了两个长整型参数:『最大整数』和『输出页数』
『最大整数』是参与计算的最大整数
『输出页数』是输出PDF的页数
『最大整数』和『输出页数』两个参数可以设置范围和默认值
我这里设置的范围是0到100,默认值是10
在ArcMap中无法直接用Python代码凭空创建文本框(或许是我没找到),但可以调用现有的文本框的clone方法,生成新的文本框,因此要在工程里先添加文本框
在页面视图先把图层框移到页面外,再添加一个文本框作每一页的标题,就叫『计算练习』吧
然后再添加一个文本框作为要新建计算式文本框的母框,设置好字体对齐等,这个母框的名字在代码中会被调用
使用『批量创建文本框』工具生成文本框
后面生成的文本框都会克隆母框的属性,但名字会以母框名字为基础自动叠加
使用『批量输出PDF』工具输出PDF
下面是『批量创建文本框』工具的代码:
import arcpymxd = arcpy.mapping.MapDocument("CURRENT") #获取当前工程
tableText = arcpy.mapping.ListLayoutElements(mxd, "TEXT_ELEMENT", "ZXtext")[0] #获取当前工程中名字为“ZXtext”的文本框
# 克隆100个文本框,调整位置,均匀分布成25行4列
Y = 28.0
for num in range(1, 26):NewY = Y - numnewTxt1 = tableText.clone() #克隆母框newTxt1.elementPositionX = 1.0 #设置文本框锚点位置的X值newTxt1.elementPositionY = NewY #设置文本框锚点位置的Y值newTxt1.text = newTxt1.name #将文本框的文本内容赋值为文本框的名字newTxt2 = tableText.clone()newTxt2.elementPositionX = 6.0newTxt2.elementPositionY = NewYnewTxt2.text = newTxt2.namenewTxt3 = tableText.clone()newTxt3.elementPositionX = 11.0newTxt3.elementPositionY = NewYnewTxt3.text = newTxt3.namenewTxt4 = tableText.clone()newTxt4.elementPositionX = 16.0newTxt4.elementPositionY = NewYnewTxt4.text = newTxt4.nameY -= 0.08
mxd.save() #保存工程
del mxd
下面是『批量输出PDF』工具的代码:
import arcpy, os, randomzuidazhengshu = arcpy.GetParameterAsText(0) #以字符串的形式返回参数列表第一个参数的值,最大整数
shuchuyeshu = arcpy.GetParameterAsText(1) #以字符串的形式返回参数列表第二个参数的值,输出页数
zxint1=int(zuidazhengshu) #字符串转为整数
zxint2=int(shuchuyeshu) #字符串转为整数
zx1=zxint1+1liebiao1=[]
liebiao2=[]
liebiao3=[]
liebiao4=[]
liebiao5=[]path1=os.path.dirname(__file__) #获取当前脚本所在路径
path2=path1 + u"\u005c"+u"\u51fa\u9898"+ u"\u005c" #在当前脚本所在路径后添加“\出题\”# 判断当前脚本所在文件夹中是否有“出题”文件夹,如果没有就创建
if not os.path.exists(path2):os.mkdir(path2)finalpdf_filename = path2 + "chuti3.pdf" #设置输出PDF的路径# 判断“出题”文件夹中是否有“chuti3.pdf”,如果有就删除
if os.path.exists(finalpdf_filename):os.remove(finalpdf_filename)
finalPdf = arcpy.mapping.PDFDocumentCreate(finalpdf_filename) #在“出题”文件夹中创建PDF文件“chuti3.pdf”temp_filename = path2 + "zxtemp3.pdf" #设置临时PDF的路径# 生成文本框的名字,追加到列表liebiao1
for num in range(1,101):zifunum="ZXtext_%d"%numliebiao1.append(zifunum)# 生成加法计算式列表liebiao2,形如:["1+1=","1+2=",...,"10+10="]
for i1 in range(1,zx1): for j1 in range(1,zx1):zxs1="%d+%d="%(i1,j1)liebiao2.append(zxs1)# 生成减法计算式列表liebiao3,形如["2-1=","3-1=","3-2=",...,"10-9="]
for i2 in range(2,zx1): for j2 in range(1,i2):zxs2="%d-%d="%(i2,j2)liebiao3.append(zxs2)# 生成含0计算式列表liebiao4,形如["0+1=","1+0=","1-1=",...,"0+10=","10+0=","10-10="]
liebiao4.append("0+0=")
for i3 in range(1,zx1): zxs3="0+%d="%i3zxs4="%d+0="%i3zxs5="%d-%d="%(i3,i3)liebiao4.append(zxs3)liebiao4.append(zxs4)liebiao4.append(zxs5)mxd = arcpy.mapping.MapDocument("CURRENT") #获取当前工程# 批量生成临时PDF,追加到“chuti3.pdf”中
for pageNum in range(1, zxint2 + 1):templist1=random.sample(liebiao2,75) #从加法计算式列表liebiao2中随机抽取75个生成新列表,顺序打乱且不重复templist2=random.sample(liebiao3,20) #从减法计算式列表liebiao2中随机抽取20个生成新列表,顺序打乱且不重复templist3=random.sample(liebiao4,5) #从含0计算式列表liebiao2中随机抽取5个生成新列表,顺序打乱且不重复templist4=templist1+templist2+templist3 #组合生成新列表templist4liebiao5=random.sample(templist4,100) #从新列表templist4中随机抽取100个生成列表liebiao5,顺序打乱且不重复if len(liebiao1)==100 and len(liebiao5)==100: #判断两个列表中元素是否都是100for i in range(0,100):elm = arcpy.mapping.ListLayoutElements(mxd, "TEXT_ELEMENT", liebiao1[i])[0] #获取当前工程中名字为列表liebiao1中第i个元素的文本框elm.text = liebiao5[i] #将当前工程中名字为列表liebiao1中第i个元素的文本框的内容改为列表liebiao5中第i个元素if os.path.exists(temp_filename): #删除临时PDFos.remove(temp_filename)arcpy.mapping.ExportToPDF(mxd, temp_filename) #生成临时PDF,这个PDF只有一页finalPdf.appendPages(temp_filename) #将临时PDF追加到“chuti3.pdf”中finalPdf.saveAndClose() #保存“chuti3.pdf”
if os.path.exists(temp_filename): #删除临时PDFos.remove(temp_filename)del mxd
在ArcMap中批量创建文本框批量输出PDF相关推荐
- word中创建文本框
word中创建文本框 在插入中点击"文本框"选项卡,如下图所示: 手工添加自己想要的文本框格式,然后选择所创建的文本框,在工具栏处会发现多了一个&qu ...
- SAP ABAP屏幕(Dialog)开发中,获取文本框的内容并且存到数据库中。
续更SAP相关内容. 这次讲一下在ABAP屏幕开发中怎样获取文本框的值. 在C# Winform开发中,我们直接 textBox.Text就可以取到文本框的值,但在ABAP中要繁琐一些. 好了,操作. ...
- php 取html文本框的值,jQuery中怎么获取文本框的值
jQuery中获取文本框的值方法:首先新建文件,并使用script标签在当前页面引入[jquery.min.js]文件:然后使用input标签创建文本框,并设置其id为myinput:最后给butto ...
- tableView cell 中如果有文本框点击自动滚动不被键盘挡住
tableView cell 中如果有文本框点击自动滚动不被键盘挡住 tableView 是继承UIscrollView,所以自然有setContentOffset方法,该方法可以设置tableVie ...
- word中图形或文本框的组合问题
word中图形或文本框的组合问题 按住CTRL键选择要组合的图片或文本框,记得箭头线或线条也要选择,然后右击,选择组合!然后整个就能一起移动!
- html获得文本框的值,jQuery中怎么获取文本框的值?
jQuery中怎么获取文本框的值?下面本篇文章给大家介绍一下.有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助. jQuery中获取文本框值的方法 下面就结合简单的代码示例,给大家介绍j ...
- wxpython中的所有文本框都是TextCtrl,不同的形式的文本框通过样式来实现,下面创建了一个密码输入框...
''' wx.TE_CENTER:控件中的文本居中. wx.TE_LEFT:控件中的文本左对齐.默认行为. wx.TE_NOHIDESEL:文本始终高亮显示,只适用于Windows. wx.TE_PA ...
- python 批量创建变量_Python批量生成和调用变量
这几天写代码中遇到的一个常见问题,在Python 中如何批量的生成一些变量,如生成变量X1, X2, X3 ,并在后续的方法中调用,完成赋值.取值等操作.这个问题也算是常见的吧,之前遇到过,也不了了之 ...
- MFC中修改静态文本框中文字的字体、颜色
假设有一个静态文本框控件,其ID为:IDC_STATIC_XSDJ,且关联一个control类的CStatic类型的变量m_static_xsdj. 设置字体时自然要用到CFont类,下面介绍两种方法 ...
最新文章
- 利用Axes3D绘制三维性能曲面
- Aix netstat命令解析
- 《Excel与VBA开发》一书上市时间
- matlab验证Ross随机过程(第二版)P19页的结果
- 正则表达式及其在python上的应用
- pythonpath manager_python 路径操作工具 pathlib,比 os 模块好用太多
- 【C++】带空格输入
- [Flink] Flink运行报错The number of requested virtual cores for application master
- 世界首富洛克菲勒的6句忠告,每个字都值钱
- 过滤SQL关键字 防注入
- 一个Mysql触发器例子--状态改变的同时更新同表中的另一字段
- 桌面不显示IE浏览器图标
- 代码之外——醒世良言
- JS面向对象——OOP
- 头条:每6个中国人就有1个中招的!
- python web.py 网页开发
- 大数据能让博彩公司破产
- BUUCTF-Crypto学习笔记(二)
- 项目1在线交流平台-7.构建安全高效的企业服务-3. Security整合Kafka,ES,Thymeleaf实例-对帖子置顶、加精、删除
- SpringMVC教程(一)
热门文章
- 安装Java 出现 Java Platform SE binary(Process Id:6800)
- 重启IIS和Sqlserver的命令
- 公司股权质押办理哪些手续
- 从程序媛到全球研发副总裁,技术女神进击史!
- OpenHarmony-RK3568开发板操作流程
- 没有枪,没有炮,数据全靠自己造——模拟伪造信令数据
- 如何删除掉多余的虚拟摄像头,虚拟摄像头造成的直播软件死机如何解决?
- 理想职业计算机程序英语作文,理想职业英语作文(通用5篇)
- win10照片查看器_不想要软件左下角小标识?这个软件搞定WIN10美化+优化
- java lucene搜索引擎的实现