使用Java等外部更改Indesign文件

使用Java等外部更改Indesign文件,java,file,adobe-indesign,Java,File,Adobe Indesign,我的目标是通过外部程序(Java)更改indesign文件中的文本 我们以.indd文件的形式获取传单,由于我们的定价模型发生了变化,我们希望更改价格,而无需手动编辑indd文件(服务提供商必须这样做,$$) 我已经用Java构建了一个程序来识别要更改的位置,文件中的价格和文本是纯文本的。但当我尝试将价格从19.9更改为22.9时,由于数据库错误,.indd文件无法打开:-(可能是校验和左右) 我的问题是:有没有一种不用索引的方法来编辑.indd文件。 我从Adobe找到了SDK,但如果没有In

我的目标是通过外部程序(Java)更改indesign文件中的文本

我们以.indd文件的形式获取传单,由于我们的定价模型发生了变化,我们希望更改价格,而无需手动编辑indd文件(服务提供商必须这样做,$$)

我已经用Java构建了一个程序来识别要更改的位置,文件中的价格和文本是纯文本的。但当我尝试将价格从19.9更改为22.9时,由于数据库错误,.indd文件无法打开:-(可能是校验和左右)

我的问题是:有没有一种不用索引的方法来编辑.indd文件。 我从Adobe找到了SDK,但如果没有InD服务器或软件,您就无法使用它。 有没有新的软件来做这些改变,之前的帖子建议没有可能

谢谢大家!


MTH_DE

在没有InDesign的情况下,没有文档化的方法来编辑InDesign文档。其内部文件格式为专有格式(“仅由与产品相关的专利、配方、品牌名称或商标的所有者制造和销售”)

InDesign SDK并不针对实际的文件数据,因为它旨在帮助开发在InDesign自身内部运行的插件。它仅记录运行时ID的内部状态

IDML提供InDesign文档的XML表示,可以使用常用的工具包进行编辑。但是,IDML文件仍然需要使用InDesign本身进行读入、解析和格式化。此外,IDML还提供了内容标记和编辑功能,但只有在使用InDesign打开文件后才能看到该内容或格式更改的结果。例如,虽然您可以将短文本替换为更长的文本,或将小字体替换为更大的字体,但您无法“看到”它是否适合最初分配的空间


免责声明:以下是我自己的猜测。使用风险自负,等等

上面说:是的,你是对的。手动编辑InDesign文件后,您确实会收到有关“数据库错误”的消息。(以后的帖子注意:请不要声明报告了“错误”。始终声明准确的错误文本!)

ID文件以关系数据库格式存储,其中实际数据已拆分为4K大“页面”。每一页在最末端的偏移量
0xFF8
处包含一个4字节的校验和,它似乎是Adler-32的一个变体。我发现计算它并不容易,但你可以将校验和设置为所有零,这似乎表明它没有被使用。您的文件将像往常一样在InDesign中打开,保存后您将看到校验和更新



请注意,非常强调的是,不建议手动编辑二进制文件。您不能插入或删除文本,只能覆盖它。文本可能不是按顺序存储的,也可能不是您希望的代码页。并非二进制文件中的所有文本都可以在InDesign中看到,甚至根本无法使用;同样,反过来说,在InDesign中,并非您在文档中看到的所有文本都可以以二进制形式存储。

没有InDesign,没有文档记录的方法可以编辑InDesign文档。其内部文件格式为专有格式(“仅由与产品相关的专利、配方、品牌名称或商标的所有者制造和销售”)

InDesign SDK并不针对实际的文件数据,因为它旨在帮助开发在InDesign自身内部运行的插件。它仅记录运行时ID的内部状态

IDML提供InDesign文档的XML表示,可以使用常用的工具包进行编辑。但是,IDML文件仍然需要使用InDesign本身进行读入、解析和格式化。此外,IDML还提供了内容标记和编辑功能,但只有在使用InDesign打开文件后才能看到该内容或格式更改的结果。例如,虽然您可以将短文本替换为更长的文本,或将小字体替换为更大的字体,但您无法“看到”它是否适合最初分配的空间


免责声明:以下是我自己的猜测。使用风险自负,等等

上面说:是的,你是对的。手动编辑InDesign文件后,您确实会收到有关“数据库错误”的消息。(以后的帖子注意:请不要声明报告了“错误”。始终声明准确的错误文本!)

ID文件以关系数据库格式存储,其中实际数据已拆分为4K大“页面”。每一页在最末端的偏移量
0xFF8
处包含一个4字节的校验和,它似乎是Adler-32的一个变体。我发现计算它并不容易,但你可以将校验和设置为所有零,这似乎表明它没有被使用。您的文件将像往常一样在InDesign中打开,保存后您将看到校验和更新



请注意,非常强调的是,不建议手动编辑二进制文件。您不能插入或删除文本,只能覆盖它。文本可能不是按顺序存储的,也可能不是您希望的代码页。并非二进制文件中的所有文本都可以在InDesign中看到,甚至根本无法使用;另外,反过来说,在InDesign中,并非您在文档中看到的所有文本都可以以二进制形式存储。

我正在使用它来实现同样的效果,它对我来说很好。

我正在使用它来实现同样的效果,它对我来说也很好。

实际上,您可以从Adobe获得两个选项—Adobe InDesign插件SDK,以及Adobe InDesign脚本SDK

为此创建一个“InDesign插件”可能有些过分,但是脚本SDK允许您编写基本上是javascript的东西来与文档交互;我建议创建一个具有唯一占位符(而不是价格)的模板文档,以减少错误
myContents = app.activeDocument.contents;
app.activeDocument.contents = myContents.replace(/19.9/g, "22.9");