论坛帮助 |
社区圈子 |
日历事件 |
2017-03-04, 16:43 | #1 | ||
|
|||
见习版主
等级: 五袋长老
|
说明一下,本帖脚本大多是临时写成,短小精悍,类似于高级批处理,因为都是实际工作中产生的需求,但比较实用,我会直接贴出原始代码,便于自己更新以及供爱好者参考学习以及修改。我自己以写插件为主,写脚本是业余选手,写的不妥的地方请多多指教。 1. 左对齐居中 目的:排版诗歌的时候,或者某些表格的时候,需要的不是左右或者居中对齐,需要的是若干行左对齐或者右对齐后再整体居中对齐。 前提:选中文本或者单元格后,运行脚本。 代码:
var alignRight = 0; //如需居中右对齐,请将此值改为1 main(); function main(){ var oSelection = app.selection[0]; if(oSelection){ if( 'columns' in oSelection){ var oColumns = oSelection.columns; var rCount = oSelection.rows.length; var cCount = oColumns.length; var name, lastCell; for (var i =0; i < oColumns.length; i++) { name = oSelection.cells[i].name.split(':'); lastCell = rCount > 1 ? oColumns[i].cells.item(name[0] + ':' + (Number(name[1]) + rCount - 1)) : oColumns[i].cells[-1]; alignRange(oColumns[i].cells.itemByRange(oSelection.cells[i], lastCell)); } } else if('paragraphs' in oSelection) alignRange(oSelection); } } function alignRange(oRange) { var paras = oRange.paragraphs.everyItem(); paras.leftIndent = 0; paras.rightIndent = 0; paras.justification = Justification.CENTER_ALIGN; if(alignRight){ maxOffset = Math.max.apply(null, paras.endHorizontalOffset); paras.justification = Justification.RIGHT_ALIGN; var newOffset = oRange.paragraphs[0].endHorizontalOffset; var nIndent = newOffset - maxOffset; paras.rightIndent = nIndent; } else{ var minOffset = Math.min.apply(null, paras.horizontalOffset); paras.justification = Justification.LEFT_ALIGN; var newOffset = oRange.paragraphs[0].horizontalOffset; var nIndent = minOffset - newOffset; paras.leftIndent = nIndent; } } 2. 快速设置表格样式 目的:从word中置入大量表格到ID后,格式非常混乱,需要快速设置所有的表格样式,来快速统一单元格格式、文本样式等。 前提:建立一个表样式,名为NewTable,在其中设置所有的需要的格式(表样式可以包含单元格样式,单元格样式可以包含段落样式),运行脚本。 代码:
var newTabelStyle = app.activeDocument.tableStyles.itemByName("NewTable"); if(newTabelStyle.isValid){ var allTables = app.activeDocument.stories.everyItem().tables.everyItem(); var allCells = allTables.cells.everyItem(); allCells.appliedCellStyle = app.activeDocument.cellStyles.firstItem(); allCells.clearCellStyleOverrides(); allTables.appliedTableStyle = newTabelStyle; allTables.clearTableStyleOverrides(); allCells.paragraphs.everyItem().clearOverrides(); } alert("Done!"); 3. 处理表格溢流文本 目的:从word中置入大量表格到ID后,会出现大量的单元格溢流文本,可能需要先让表格文字可见,才方便后续的排版。 细节:scaleFloor是一个缩放下限,例如设为70,会先尝试设置单元格文本的横向缩放,如果缩到70%还放不下,就不再缩放,转而缩小字号。 练习:有想要学习脚本代码的,可以试试根据此代码修改为处理文本框的溢流文本。另外这个作为一个示例代码,并没有追求最优的结果,有兴趣可以将缩放和缩小字号的部分改为二分法,可以得到一个更精确的结果。 代码:
var scaleFloor = 70; var allCells = app.activeDocument.stories.everyItem().tables.everyItem().cells.everyItem().getElements(); for(var i=0;i< allCells.length;i++){ var cell = allCells[i]; var paras = cell.paragraphs.everyItem(); paras.horizontalScale = 100; var firstPara = cell.paragraphs[0]; while(cell.overflows){ if(firstPara.pointSize <=1) break; if(firstPara.horizontalScale > scaleFloor) paras.horizontalScale -= 5; else paras.pointSize -= 0.5; cell.recompose () ; } } alert("Done!"); 4. 所有链接图片改为正片叠底 目的:原始目的是所有链接图片改为正片叠底,我这里将其延伸了一下,改为一个可以做类似事情的一个脚本框架片段。 细节:patt可以让你设置一个正则表达式,通常是用来匹配特定扩展名,例如你要匹配矢量可以改为.eps|.ai,也可以用来匹配特定名称的链接。doSomething则是让你来决定找到后干什么。 代码:
var feature = ".psd|.png|.jpg|.tif" //选择什么 var patt = new RegExp(feature,"i"); var allLinks = app.activeDocument.links.everyItem().getElements(); for(i=0; i<allLinks.length; i++) { var oLink = allLinks[i]; if(String(oLink.name).match(patt)) doSomething(oLink) ; } //做什么 function doSomething(oLink) { oLink.parent.parent.transparencySettings.blendingSettings.blendMode = BlendMode.MULTIPLY; } 番外——获取所有文件路径 目的:此代码非InDesign脚本,而是一个嵌入注册表的vbscript脚本,但它是为ID的数据合并设计的,某些时候做带图片的数据合并有个问题就是,客户给的只是一堆图片,但我们需要把这些图片的路径弄到Excel里面去,那么这个脚本就是为这个需求设计的。 细节:新建一个文本文件,扩展名改为.reg, 复制代码,粘贴进去,双击此reg文件将其导入注册表,然后右键菜单会出现一个名为“复制文件路径”的菜单项,文件上复制会得到选中文件的路径,文件夹上复制会得到此文件夹下所有文件的路径,复制后粘贴到Excel,它会自动在一列中顺序填充所有文件路径。 代码:
Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\Directory\shell\copypath] @="复制文件路径" [HKEY_CLASSES_ROOT\Directory\shell\copypath\command] @="mshta vbscript:Execute(\"Set oFiles = CreateObject(\"\"Scripting.FileSystemObject\"\").GetFolder(\"\"%1\"\").Files:Dim paths():Redim paths(oFiles.Count):i = 0:For Each oFile In oFiles:paths(i) = oFile.Path:i=i+1:Next:Set objIE = CreateObject(\"\"InternetExplorer.Application\"\"):objIE.Navigate(\"\"about:blank\"\"):objIE.document.parentwindow.clipboardData.SetData \"\"text\"\",Join(paths,vbLf):objIE.Quit:MsgBox \"\"复制成功!\"\"\")(close)" [HKEY_CLASSES_ROOT\*\shell\copypath] @="复制文件路径" [HKEY_CLASSES_ROOT\*\shell\copypath\command] @="mshta vbscript:clipboarddata.setdata(\"text\",\"%1\")(close)" 番外——PS图片元数据清理 目的:某些版本的PS有bug,会将修改步骤存入图片的xmp元数据,导致文件无限膨胀,一个小图片会有几十上百兆。 使用:用PS打开图片后运行脚本,清理后保存。 代码:
if (ExternalObject.AdobeXMPScript == undefined) ExternalObject.AdobeXMPScript = new ExternalObject("lib:AdobeXMPScript"); var meta = new XMPMeta( activeDocument.xmpMetadata.rawData); meta.deleteProperty(XMPConst.NS_PHOTOSHOP, "DocumentAncestors"); app.activeDocument.xmpMetadata.rawData = meta.serialize(); if( ExternalObject.AdobeXMPScript ) { try{ ExternalObject.AdobeXMPScript.unload(); ExternalObject.AdobeXMPScript = undefined; }catch (e){ } } 此帖于 2017-04-25 14:38 被 pandada 编辑. |
||
右列 28 位会员因为此帖价值甚高向 pandada 表示感谢: |
15874033 (2017-03-06),
A-J (2017-03-06),
autoid (2017-03-09),
cnpa (2017-03-10),
cpclgw (2022-08-17),
hczsuideng (2018-08-24),
Hey123 (2017-04-24),
huangsijun17 (2017-03-07),
iamadsl (2017-10-24),
jimmy (2017-03-06),
kiss猫 (2017-03-04),
ksaa0703697c@163.com (2019-02-02),
kw1012738430 (2023-12-01),
liudage (2019-05-24),
lvhonghui (2017-03-04),
qianlilv (2017-04-25),
QQ33161288 (2017-03-06),
river1010 (2017-03-14),
vfoggp (2017-03-05),
xiaozui629 (2017-03-07),
xxx0012 (2017-03-04),
ys-cpc (2017-03-07),
zhanghai21 (2019-07-10),
双肩包 (2017-12-07),
哈哈88888888 (2017-03-04),
天高凯旋 (2017-04-17),
木棉树下 (2017-08-17),
老設 (2017-04-24)
|
2017-03-09, 13:58 | 只看该作者 #6 | |||
|
||||
正式会员
等级: 六袋长老
|
引用:
楼主,能否用脚本的方式实现竖排文字从左至右的顺序啊。目前只能是从右到左。谢谢! |
|||
2017-04-24, 11:26 | 只看该作者 #11 | ||
|
|||
见习版主
等级: 五袋长老
|
|
||