- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要导航和提取 TextFrame
的内容;这意味着:文本及其样式、变量和内部 pageItems。
我可以列出所有段落,对于每个段落我可以获得 TextStyleRanges
(参见 this question),但是它们的 content
既不包含变量值也不包含页面项目。
我可以列出所有 textVariableInstances
,但这不会告诉我它们在文本中的位置。
同样,我可以列出 pageItems
,但不引用它们在文本方面的位置。
有时(只是有时)我得到的范围只包含一个字符,在那种情况下我可以获得变量和 pageItems;但由于情况并非总是如此,因此这不是解决方案。
我可以迭代一个段落的所有字符,从而获得我需要的一切,但这似乎太慢了。
我错过了什么?
我怎样才能按照预期的顺序获取段落的所有文本和非文本部分?
编辑
Dirk 的建议实际上有效,但显然只有当我从 TextFrame 访问 textVariableInstances
时才有效。我正在从 TextFrame 内的 Paragraph 内的 TextStyleRange 内的 Text 访问它,因为我正在尝试递归遍历和转换文档。在一个 Text 对象中,我有 textVariableInstances,但它们的 storyOffset
属性缺少属性 isValid
、toSpecifier
、index
和 who知道还有多少人。
所以,我想我现在的问题是:要知道 variableInstance 在 Text 对象中的位置,我可以可靠地使用类似的东西吗:
myVariableInstance.storyOffset.index - myText.insertionPoints[0].index
这样我就可以用变量的 resultText
值替换相应的字符?
最佳答案
textVariableInstance 的 storyOffset 属性产生一个插入点,其索引是包含故事中的实际数字偏移量。 storyOffset 属性适用于可放置在文本中的许多其他对象。
对于锚定页面项目,请改用父属性 - 它将产生一个字符。
var t = app.activeDocument.textFrames.item(0);
$.writeln(t.textVariableInstances.item(0).storyOffset.index);
$.writeln(t.rectangles.item(0).parent.index);
编辑
在你的编辑之后,你一定是在构建文本的过程中做错了什么。正如已经建议的那样,您可以在调试器中使用 isValid 和 toSpecifier() 来找出它在哪里中断。
以下代码适用于我,但对于通用方法,您需要考虑更多可以嵌入到文本中的内容,例如特殊字符,包括各种段落结尾、超链接、xml 元素、锚定页面项目。
#target indesign-8.0
function main() {
var doc = app.activeDocument;
for( var fi=0; fi<doc.textFrames.length; fi++ ) {
var f = app.activeDocument.textFrames.item(fi);
var s = f.parentStory;
for( var pi=0; pi<f.paragraphs.length; pi++ ) {
var p = f.paragraphs.item(pi);
var pl = p.characters.lastItem();
for( var ri=0; ri<p.textStyleRanges.length; ri++ ) {
var r = p.textStyleRanges.item(ri);
var rf = r.characters.firstItem();
var rl = r.characters.lastItem();
var t = r;
if( rl.index>pl.index ) // range goes beyond paragraph
t = s.texts.itemByRange(rf,pl);
$.writeln("text=",t.contents);
if( t.textVariableInstances.length>0 ) {
var tv = t.textVariableInstances.item(0);
$.writeln("variable=",tv.name," ",tv.storyOffset.index);
}
}
$.writeln("\\n");
}
}
}
main();
关于javascript - 在 TextFrames 中查找变量和嵌套的 pageItems,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24702032/
MigraDoc 中的文本框非常方便,但当我向超出文本框边界的文本框添加段落时,它只会溢出到框架之外。但我不希望文本超出框架。 我已经定义了文本框边界 TextFrame textFrame =
我需要导航和提取 TextFrame 的内容;这意味着:文本及其样式、变量和内部 pageItems。 我可以列出所有段落,对于每个段落我可以获得 TextStyleRanges(参见 this qu
我已经尝试在他们的论坛上提出问题,但尚未收到回复,希望有人能在这里帮助我。 我在 asp.net 中设置了一个自定义报告屏幕,人们可以在其中拖动标签和字段,Migradoc 通过使用文本框和顶部/左侧
标题几乎说明了一切。 我的代码如下: sh.TextFrame.Characters.Font.Name = "SimSun" 此代码仅更改所有英文和单字节符号的字体。 所有双字节符号和汉字保持默认字
我正在尝试使用 inDesign JSX 脚本将以下数据插入到文档中: data = [{heading:"Heading 1", content: ["Some content"]}, {head
TextFrame#nextTextFrame 告诉我 TextFrame 是否溢出;我还可以按照 StorySplitter 的方式拆分两个 TextFrames。 我似乎无法弄清楚的是:第二个 T
我正在编写一个 Excel VBA 宏,它将文本复制到 Word for Windows 文件中,并且 稍后为其添加格式。 它使用包含 Logo 的 .dotx 模板。左下角是一个带有序列号的文本框。
使用 Indesign CS5.5,我收集了大量组 - 所有组都带有图像和文本框架。文本框默认有 3 段。 我需要从每个文本框架的第一段中获取文本。 到目前为止我有这个: var textboxes
示例,在 Powerpoint 中: The TextFrame object: Represents the text frame in a Shape object. Contains the t
我有一个执行以下操作的脚本: var document = app.documents.item(0); var layer = document.layers.itemByName(
我无法确定 DataMergeField 是否包含在 TextFrame 中。 var document = app.open('template.indd'); var dataMerge = do
我目前正在使用 InDesign Server 编写一些 Javascript 脚本。在更改格式或将 XML 放入其中后,我无法尝试可靠地检测 TextFrames 中的溢出。 例如,我有一个函数可以
我得到了这段代码,我一直在使用 Excel 2003,它模仿了不久前 Microsoft 网站上给出的解决方案。如何向形状的文本框架添加超过 255 个字符: For i = 0 To Int(Len
我想用JS编辑Indesign文档中的一些textframe内容。但我找不到任何解决方案来通过对话框窗口中的反馈进行任何更改。所以我只有一个简单的文档,其中有一个名为 test 的 Textframe
我是一名优秀的程序员,十分优秀!