首页 > 编程问答 >Python - Adob​​e InDesign Javascript 脚本帮助从 Python 调用 JSX

Python - Adob​​e InDesign Javascript 脚本帮助从 Python 调用 JSX

时间:2024-07-22 15:34:19浏览次数:9  
标签:python scripting jsx adobe-indesign

提前致谢。希望每个人都表现出色。 我试图从 python 调用 Adob​​e Indesign JSX 文件,下面是示例代码: 我想在 Adob​​e INdesign 2024 或更高版本上运行它。我在 Python InDesign 脚本编写上看到了一些示例:从预检中获取溢出文本框以自动调整大小 作为参考,可能适用于 Adob​​e InDesing CS 6,但我需要使用 Adob​​e InDesign 2024 Creative Cloud。

<pre>
<code>
import win32com.client

def create_indesign_document_with_text():
    try:
        # Initialize COM
        print("Initializing COM...")
        app = win32com.client.Dispatch('InDesign.Application')

        # Create a new InDesign document
        print("Creating a new InDesign document...")
        doc = app.Documents.Add()

        # Define the text content
        text_content = ("This is a sample text with some bold and italic words. "
                        "The quick brown fox jumps over the lazy dog. " * 5)
        # Define text attributes
        bold_text = "This is bold text."
        italic_text = "This is italic text."

        # Create a text frame
        print("Adding a text frame with sample content...")
        page = doc.Pages.Item(1)
        text_frame = page.TextFrames.Add()
        text_frame.GeometricBounds = ["12.7mm", "12.7mm", "287mm", "200mm"]  # Adjust the bounds as needed

        # Add the main text content
        text_frame.Contents = text_content

        # Apply formatting to parts of the text
        # Note: InDesign uses 0-based index for characters
        text_range = text_frame.Characters
        text_range.Item(0).ChangeTextPreferences.appliedFont = app.Fonts.Item("Arial")
        text_range.Item(0).ChangeTextPreferences.fontStyle = "Bold"
        text_range.Item(0).ChangeTextPreferences.pointSize = 12

        # Apply bold formatting to a specific range
        bold_start = text_content.find(bold_text)
        bold_end = bold_start + len(bold_text)
        text_range.ItemByRange(bold_start, bold_end - 1).ChangeTextPreferences.fontStyle = "Bold"

        # Apply italic formatting to a specific range
        italic_start = text_content.find(italic_text)
        italic_end = italic_start + len(italic_text)
        text_range.ItemByRange(italic_start, italic_end - 1).ChangeTextPreferences.fontStyle = "Italic"

        # Save the InDesign document
        save_path = r'INDESIGN_FILE_PATH'
        print(f"Saving the InDesign document to {save_path}...")
        doc.Save(save_path)

        # Call the JSX script
        jsx_script_path = r'JSX_FILE_PATH'
        print(f"Executing JSX script: {jsx_script_path}...")
        app.DoScript(jsx_script_path, 1246973031)  # Use ScriptLanguage.JAVASCRIPT

        print("Document created and script executed successfully.")

        # Close the document
        print("Closing the InDesign document without saving changes...")
        doc.Close(1)  # 1 means save changes

    except Exception as e:
        print(f"An error occurred: {e}")

if __name__ == "__main__":
    create_indesign_document_with_text()
</code>
</pre>

虽然运行上面的代码,我收到以下错误:

<pre>
<code>
Initializing COM...
Creating a new InDesign document...
Adding a text frame with sample content...
An error occurred: (-2147352567, 'Exception occurred.',
 (30475, 'INDESIGN EXE PATH',  'The requested member of the collection does not exist.', None, 0, 0), None)
</code></pre>

你能帮助我吗?

问候, 视音频


这个错误提示“The requested member of the collection does not exist.”,通常发生在你尝试访问 InDesign 文档中不存在的元素时,比如页面、文本框架、字体等。

让我们逐行分析你的代码,找出可能导致错误的原因:

  1. InDesign 版本 : 确保你安装了 InDesign 2024 或更高版本。
  2. COM 对象 : 你使用 win32com.client.Dispatch('InDesign.Application') 创建 InDesign 应用程序对象。这部分应该没有问题,因为错误发生在后续操作中。
  3. 创建文档 : doc = app.Documents.Add() 创建新的 InDesign 文档。 这里应该没有问题。
  4. 添加文本框 : page = doc.Pages.Item(1) 获取第一页,然后 text_frame = page.TextFrames.Add() 在该页面上添加文本框。 这部分 可能 是错误的根源。 如果你的 InDesign 文档模板没有预先定义页面,那么 doc.Pages.Item(1) 会返回错误。
  5. 其他操作 : 代码的其他部分(添加文本、设置字体样式)都依赖于文本框对象 text_frame

解决方案:

  • 检查 InDesign 文档模板: 确保你的文档模板至少包含一页。
  • 修改代码 : 尝试在创建文档后立即添加页面:
import win32com.client

def create_indesign_document_with_text():
    try:
        # ... (其他代码) ...

        # Create a new InDesign document
        print("Creating a new InDesign document...")
        doc = app.Documents.Add()

        # **添加页面**
        doc.Pages.Add()

        # 获取第一页
        page = doc.Pages.Item(1)

        # ... (其他代码) ...

    except Exception as e:
        print(f"An error occurred: {e}")

# ... (其他代码) ... 
  • 调试 : 使用 print(doc.Pages.Count) 在创建文档后打印页面数量,确认页面是否成功创建。

如果修改后问题仍然存在,请提供以下信息以便我进一步帮助你:

  • 你使用的 InDesign 确切版本
  • 你的 InDesign 文档模板文件
  • JSX 脚本的内容

希望以上信息能够帮助你解决问题。

标签:python,scripting,jsx,adobe-indesign
From: 78777447

相关文章

  • 为什么将小部件添加到滚动视图在 python kivy 中不起作用
    Python文件fromkivymd.appimportMDAppfromkivy.langimportBuilderfromkivy.uix.floatlayoutimportFloatLayoutfromkivy.core.windowimportWindowfromkivy.configimportConfigfromkivymd.uix.listimportOneLineListItem#UkuranwindowConfig.set(&......
  • Python 实现Excel和TXT文本格式之间的相互转换
    Excel是一种具有强大的数据处理和图表制作功能的电子表格文件,而TXT则是一种简单通用、易于编辑的纯文本文件。将Excel转换为TXT可以帮助我们将复杂的数据表格以文本的形式保存,方便其他程序读取和处理。而将TXT转换为Excel则可以将文本文件中的数据导入到Excel中进行进一步的分析和......
  • Python (Django) 数据操作
    “如何将Excel考勤数据转换为特定的数据库插入格式?”**我Excel中的数据如下所示:**这是数据格式I**需要将其转换为适合数据库插入的格式,如下所示:**我想要的数据将Excel考勤数据转换为特定数据库插入格式的Python......
  • 在 python 中表示矩阵等价类的好方法是什么?
    我正在尝试编写一个程序来对井字棋进行强化学习。我希望引擎认识到,如果您反射棋盘或旋转它,您会得到完全相同的游戏,因此这些棋盘应该被视为彼此相同。目前我有一本字典,代表我当前对每个棋盘的估计估值游戏中的棋盘,每次游戏结束时,该游戏期间发生的所有棋盘位置的估值都会根据它......
  • MIT自学---python---6.100A_lecture2
    MIT自学---python---6.100A_lecture2前言一、设置python编译器地址二、将运行python文件的命令简化三、终端尝试执行简单python命令四、今日学到的python命令个人总结前言  这两天去听讲座,没什么时间按照计划自学MIT,今天赶紧补上。今天主要任务是搭建vscodepython......
  • python pip 需要构建工具,而它已经安装
    我看到这个问题已经被发布了很多次,人们设法解决了这个问题,但我没有!!操作系统版本:Windows1021H1Build19043.1288Python版本:Python3.9.7(tags/v3.9.7:1016ef3,Aug302021,20:19:38)[MSCv.192964bit(AMD64)]onwin32Pip、wheel和setuptool都可以日期:......
  • 无法在浏览器中访问Python 127.0.0.1:8000上的本地主机
    fromdjango.contribimportadminfromdjango.urlsimportpath,includeurlpatterns=[path('admin/',admin.site.urls),path('products/'),include('products.urls')#thisline]嗨,任何人。很抱歉问这样的问题,但这是我第一次尝试python。......
  • 在 VSCode 中通过 Python 使用 YouTube API 时如何启用 Intellisense
    我想在使用GoogleYouTubeAPI和Python时在VSCode中获得IntelliSense。但我不知道详细步骤。fromgoogleapiclient.discoveryimportbuildapi_key="****"youtube=build("youtube","v3",developerKey=api_key)request=youtube.channels().list(part......
  • 当 python 脚本通过 jenkins + Github 在 Windows 本地计算机上运行时,chrome 浏览器不
    我的Python代码是(windowsMachine)fromseleniumimportwebdriverprint("newLine")print("2Line")print("3Line")holdChrome=webdriver.ChromeOptions()holdChrome.add_experimental_option("detach",True)#Restricta......
  • python_基础_数据类型
    基础数据类型不需要声明,只有被赋值后才会创建变量。变量本身没有类型,“类型”指的是所存值的类型。类型判断type(x)和isinstance(x,int)前者不会认为子类是一种他的父类类型后者会认为子类是父类类型>>>classA:...pass...>>>classB(A):...pass......