我的目标是通过外部程序(Java)更改indesign文件中的文本。
我们将传单作为.indd文件,由于我们的定价模式发生变化,我们希望更改价格,而无需手动编辑indd文件(服务提供商必须这样做,$$$)。
我用Java构建了一个程序来识别要更改的位置,价格和文本在文件中是纯文本。但是当我尝试将价格从19.9更改为22.9时,由于数据库错误,无法打开.indd文件。 :-(可能是校验和左右)。
我的问题:没有Indesing可以编辑.indd文件。 我从Adobe找到了SDK,但没有InD服务器或软件就无法使用它。 是否有任何新软件可以进行这些更改,之前的帖子表明没有可能,......
谢谢!
MTH_DE
答案 0 :(得分:4)
没有记录的方法可以在没有InDesign的情况下编辑InDesign文档。其内部文件格式是专有的(“仅由专利的所有者,公式,品牌名称或与产品相关的商标制造和销售”)。
InDesign SDK不针对实际的文件数据,因为它旨在帮助开发在 InDesign内部运行的插件。它仅在运行时记录ID的内部状态。
IDML提供InDesign文档的XML表示,可以使用常用工具包编辑。但是,仍然需要使用InDesign本身读取,解析和格式化IDML文件。此外,IDML提供内容标记和编辑,但只有在使用InDesign打开文件后才能看到该内容或格式的任何更改结果。例如,虽然您可以用更长的短文本或用更大的字体替换小字体,但您可以不'看'它是否适合原始分配的空间。
免责声明:以下是我自己的猜想。使用自己的风险,等等。
上面说的是:是的,你是对的。关于“数据库错误”的消息确实是您手动编辑InDesign文件后得到的消息。 (请注意以后的帖子:请永远不要声明“ 错误”已报告。始终说明确切的错误文本!)
ID文件以关系数据库格式存储,其中实际数据已分成4K大“页面”。每个页面最后都包含一个4字节校验和,偏移量为0xFF8
,这似乎是Adler-32的变体。我发现计算它并不容易,但是你可以将校验和设置为全零,这似乎表明它没有被使用。您的文件将在InDesign中照常打开,保存后您将看到校验和已更新。
请注意,手动编辑二进制文件的重点是非常,不推荐。您无法插入或删除文本,只能覆盖它。文本可能无法按顺序存储,也不会存储在您希望的代码页中。在InDesign本身中,并非所有可以在二进制文件中找到的文本都可以显示,甚至根本不可用;另外,在InDesign中,并非您在文档中看到的所有文本都可以存储在二进制文件中。
答案 1 :(得分:0)
我正在使用IDMLLib来实现相同功能,而且它对我来说很好。
答案 2 :(得分:0)
实际上,Adobe有两个选项来实现此目的 - Adobe InDesign插件SDK和Adobe InDesign Scripting SDK。
创建一个' InDesign插件'对于这将是矫枉过正,但脚本SDK允许您编写基本上与文档交互的javascript;我建议创建一个具有独特占位符而不是价格的模板文档,以使开关不易出错,然后执行以下操作:
myContents = app.activeDocument.contents;
app.activeDocument.contents = myContents.replace(/19.9/g, "22.9");