脚本移动选择相对于传播范围?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了脚本移动选择相对于传播范围?相关的知识,希望对你有一定的参考价值。

我有一个文件,其传播范围远远大于文件中包含的内容。 http://i36.photobucket.com/albums/e50/nollaf126/1-oversize-pasteboard.png

我有另一个模板文件,其扩展名与所有选定对象的边界大小相匹配。我需要打开该模板,粘贴对象,将粘贴的对象选择对齐到展开的左上角(也就是粘贴板或工作区?),然后导出为.pdf和.eps。

由于各种坐标系统存在很多混淆,我理想的解决方案是不必移动任何东西,而是将粘贴内容的左上角与粘贴的左上角对齐。粘贴和粘贴都不会将内容放在我需要的地方。对象太低了。 http://i36.photobucket.com/albums/e50/nollaf126/2-contents-pasted-too-low.png

即使有一个解决方案将信息粘贴到需要从一开始就需要的位置,我仍然想知道如何相对于可见工作区移动东西(我相信这被正确地称为传播,但更多通常称为粘贴板?我只是想确保我正确地问我的问题所以我的意图将被理解)。

我第一次使用以下代码行生成结果,如下图所示;只有背景.eps对象被移动,它向下移动。

app.selection[0].move([myPage.bounds[0]+myMargins.top,myPage.bounds[1]+myMargins.left]);

i36_photobucket_com /专辑/ E50 / nollaf126 / 3先尝试对move.png

我的第二次尝试如下图所示;它似乎也只是重新定位背景图像,但也有一些东西向下移动到右边。看起来它可能与我复制对象的范围大小和形状相同。当我第一次将对象粘贴到新文档中时,选择边界是正确的大小,直到执行更改几何边界的代码行为止。

app.selection[0].geometricBounds = [myPage.bounds[0]+myMargins.top,myPage.bounds[1]+myMargins.left,myPage.bounds[2]-myMargins.bottom,myPage.bounds[3]-myMargins.right];
//

i36_photobucket_com /专辑/ E50 / nollaf126 / 4-2nd试到move.png

此外,之前的尝试(在我添加老虎的图像,文本到其左边,以及老虎背后的红色矩形之前)看到所有选定的对象除了背景.eps图像向上移动并使用应用程序进入正确的位置.selection [0] .geometricBounds语句。

任何帮助将非常感谢。这是代码和图层上涉及的对象的屏幕截图。

i36_photobucket_com /专辑/ E50 / nollaf126 / 5-layers.png

#target indesign-11.064  // CC 2015

myDoc = app.activeDocument;
myPages = app.activeDocument.pages;
myActivePage=app.activeWindow.activePage;

// 1. Select and copy everything on this document's activePage
app.select(SelectAll.ALL);
app.copy();

// 2. Open template file and paste
whichExportTemplate = "FCILG";
myTemplateFolder="/Users/User/Documents/!  Resources/ Templates/  Ted Signs/ Tags";
sFileName= myTemplateFolder + "/" + whichExportTemplate + ".indd"
sFileName= sFileName.replace (/%20/g, " ");
newDoc = app.open(File(sFileName));

app.pasteInPlace(); 
app.select(SelectAll.ALL);

// 3. POSITION IT
var myPage = myActivePage;
var myMargins = myPage.marginPreferences;

app.selection[0].geometricBounds = [myPage.bounds[0]+myMargins.top,myPage.bounds[1]+myMargins.left,myPage.bounds[2]-myMargins.bottom,myPage.bounds[3]-myMargins.right];

//    app.selection[0].move([myPage.bounds[0]+myMargins.top,myPage.bounds[1]+myMargins.left]);

// 4. Save the new file
// 5. Close
答案

您无需移动任何内容,只需在复制和粘贴项目之前设置默认零点即可。

app.copyDoc.zeroPoint  = [x,y];
app.pasteDoc.zeroPoint = [x,y];

现在您可以按预期粘贴到位。如果您使用脚本放置,请确保您的MeasurementUnits也正确设置。否则你的两个文件的xy值不相等:x mm不是x英寸。

另一答案

更有效的方法是使用.duplicate()方法。例如:

var ad = app.activeDocument;
var rc = ad.pages[0].rectangles[0];
var gb = rc.geometricBounds;
var tmpd = app.open (File("path to your template"));
var tmppg = tmpd.pages[0];
var tmprc = rc.duplicate (tmppg);
tmprc.geometricBounds = gb;

然后你可以修改gb(4个值的数组)到你需要它在页面上偏移的任何东西。

以上是关于脚本移动选择相对于传播范围?的主要内容,如果未能解决你的问题,请参考以下文章

一个函数应该返回什么可以失败?

在PHP中传播变量

从一个片段移动到另一个片段时如何自动选择底部导航?

学习css 在用margin进行布局的时候,内层使用margin-top应该是相对于父层边框定位,为啥连父层也一起移动

如何在 PyQt5 中相对于父窗口移动子窗口?

片段“F1”不能在这里传播,因为“节点”类型的对象永远不能是“商店”类型