You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用LibreOffice与Python UNO将ODT导出为PDF/UA兼容PDF?

基于Python UNO实现ODT转PDF/UA标准PDF

现有一段Python UNO代码框架用于调用LibreOffice处理ODT文件,需要补充代码实现将其导出为符合**PDF/UA(通用无障碍)**标准的PDF。手动在LibreOffice Writer中的操作步骤为:

  • 选择「文件」>「导出为」>「导出为PDF...」
  • 打开「PDF选项」对话框
  • 勾选「通用无障碍(PDF/UA)」复选框
  • 点击「导出」按钮

原代码框架:

import uno

def create_pdf(file_url):

    local_context = uno.getComponentContext()
    resolver = local_context.ServiceManager.createInstanceWithContext(
        "com.sun.star.bridge.UnoUrlResolver", local_context)
    context = resolver.resolve(
        "uno:socket,host=localhost,port=2002;urp;StarOffice.ComponentContext")
    desktop = context.ServiceManager.createInstanceWithContext(
        "com.sun.star.frame.Desktop", context)
    document = desktop.loadComponentFromURL(file_url, "_blank", 0, ())

    # TODO: Create a Universal Accessibility (PDF/UA) PDF

完整实现代码

import uno
from com.sun.star.beans import PropertyValue

def create_pdf(file_url, output_pdf_url):
    local_context = uno.getComponentContext()
    resolver = local_context.ServiceManager.createInstanceWithContext(
        "com.sun.star.bridge.UnoUrlResolver", local_context)
    context = resolver.resolve(
        "uno:socket,host=localhost,port=2002;urp;StarOffice.ComponentContext")
    desktop = context.ServiceManager.createInstanceWithContext(
        "com.sun.star.frame.Desktop", context)
    document = desktop.loadComponentFromURL(file_url, "_blank", 0, ())

    # 配置PDF导出参数,启用PDF/UA
    export_properties = []
    
    # 设置导出格式为Writer PDF
    prop = PropertyValue()
    prop.Name = "FilterName"
    prop.Value = "writer_pdf_Export"
    export_properties.append(prop)
    
    # 核心:启用PDF/UA标准
    prop = PropertyValue()
    prop.Name = "IsPDFUAEnabled"
    prop.Value = True
    export_properties.append(prop)
    
    # 可选:显式开启标签化PDF(PDF/UA强制要求,默认可能已开启)
    prop = PropertyValue()
    prop.Name = "TaggedPDF"
    prop.Value = True
    export_properties.append(prop)
    
    # 执行导出
    document.storeToURL(output_pdf_url, tuple(export_properties))
    
    # 关闭文档释放资源
    document.close(True)

关键说明

  • 需先启动LibreOffice的UNO服务,命令示例:soffice --headless --accept="socket,host=localhost,port=2002;urp;" --nofirststartwizard
  • file_url和output_pdf_url需使用UNO兼容的URL格式,本地文件示例:file:///home/user/documents/test.odt(Windows下为file:///C:/Users/user/Documents/test.odt)
  • IsPDFUAEnabled是开启PDF/UA的核心参数,TaggedPDF为PDF/UA的必要前提,显式设置可避免环境差异导致的导出失败
  • 导出后务必关闭文档,防止LibreOffice进程残留占用系统资源

内容的提问来源于stack exchange,提问作者HapiDaze

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 12:45:10