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

如何基于搜索导出一个或多个Confluence Datacenter/Server空间为PDF?

如何基于搜索结果导出一个或多个Confluence空间为PDF

现状说明

截至2023年,Confluence官方的现代RESTful API暂不支持导出空间为PDF,仅能通过长期未维护的SOAP API实现该功能。此前社区中存在相关问题排查、API规范说明等内容,也有旧的实现示例,但旧示例多基于Ruby/PHP,且不支持空间搜索逻辑,以下提供适配C#、Python、Java的实现方案。

核心实现逻辑

  1. 通过SOAP API的空间列表/搜索接口,筛选出需要导出的目标空间(基于搜索关键词匹配空间属性)
  2. 调用SOAP API的exportSpace方法,指定导出格式为PDF,获取文件流并保存为本地PDF文件

代码示例

Python 实现(使用zeep库)

from zeep import Client
from zeep.transports import Transport
from requests.auth import HTTPBasicAuth

# 配置Confluence实例信息
confluence_soap_url = "https://你的Confluence域名/rpc/soap-axis/confluenceservice-v2"
username = "你的账号"
api_token = "你的API令牌"

# 初始化SOAP客户端
transport = Transport(auth=HTTPBasicAuth(username, api_token))
client = Client(confluence_soap_url, transport=transport)

# 1. 搜索目标空间(示例:按空间名称关键词筛选)
def filter_target_spaces(keyword):
    all_spaces = client.service.getSpaces()
    return [space for space in all_spaces if keyword.lower() in space.name.lower()]

# 2. 导出指定空间为PDF
def export_space_pdf(space_key):
    # 参数说明:空间Key、导出类型、页面ID(空则导出整个空间)、视图参数(可选)
    pdf_content = client.service.exportSpace(space_key, "TYPE_PDF", "", "")
    with open(f"{space_key}_导出文件.pdf", "wb") as f:
        f.write(pdf_content)

# 执行导出流程
target_spaces = filter_target_spaces("产品文档")
for space in target_spaces:
    print(f"正在导出空间:{space.name}(Key: {space.key})")
    export_space_pdf(space.key)

C# 实现(使用SOAP代理类)

using System;
using System.IO;
using System.Net;

// 先通过wsdl命令生成Confluence SOAP代理类
// 命令示例:wsdl https://你的Confluence域名/rpc/soap-axis/confluenceservice-v2?wsdl
namespace ConfluencePdfExport
{
    class Program
    {
        static void Main(string[] args)
        {
            var confluenceService = new ConfluenceServiceV2();
            confluenceService.Url = "https://你的Confluence域名/rpc/soap-axis/confluenceservice-v2";
            confluenceService.Credentials = new NetworkCredential("你的账号", "你的API令牌");

            // 1. 筛选目标空间
            var allSpaces = confluenceService.getSpaces();
            var targetSpaces = Array.FindAll(allSpaces, s => s.name.Contains("技术文档"));

            // 2. 逐个导出为PDF
            foreach (var space in targetSpaces)
            {
                Console.WriteLine($"正在导出空间:{space.name}(Key: {space.key})");
                byte[] pdfBytes = confluenceService.exportSpace(space.key, "TYPE_PDF", "", "");
                File.WriteAllBytes($"{space.key}_导出文件.pdf", pdfBytes);
            }
        }
    }
}

Java 实现(使用Axis客户端)

import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import javax.xml.namespace.QName;
import java.io.FileOutputStream;
import java.io.OutputStream;

public class ConfluenceExportTool {
    public static void main(String[] args) throws Exception {
        String confluenceUrl = "https://你的Confluence域名/rpc/soap-axis/confluenceservice-v2";
        String username = "你的账号";
        String apiToken = "你的API令牌";

        // 初始化SOAP服务调用实例
        Service service = new Service();
        Call call = (Call) service.createCall();
        call.setTargetEndpointAddress(new java.net.URL(confluenceUrl));
        call.setUsername(username);
        call.setPassword(apiToken);

        // 1. 获取所有空间并筛选目标
        call.setOperationName(new QName("http://soap.confluence.atlassian.com", "getSpaces"));
        Object[] spaces = (Object[]) call.invoke(new Object[]{});
        
        for (Object spaceObj : spaces) {
            // 通过反射获取空间的Key和名称(需对应生成的实体类)
            String spaceKey = (String) spaceObj.getClass().getMethod("getKey").invoke(spaceObj);
            String spaceName = (String) spaceObj.getClass().getMethod("getName").invoke(spaceObj);
            
            if (spaceName.contains("项目文档")) {
                System.out.println("正在导出空间:" + spaceName + "(Key: " + spaceKey + ")");
                
                // 2. 调用导出接口获取PDF字节流
                call.setOperationName(new QName("http://soap.confluence.atlassian.com", "exportSpace"));
                byte[] pdfBytes = (byte[]) call.invoke(new Object[]{spaceKey, "TYPE_PDF", "", ""});
                
                // 保存为本地文件
                OutputStream os = new FileOutputStream(spaceKey + "_导出文件.pdf");
                os.write(pdfBytes);
                os.close();
            }
        }
    }
}

注意事项

  • SOAP API为长期未维护状态,后续Confluence版本可能移除该接口,需关注官方更新
  • 导出大空间时可能出现超时,需调整客户端的超时参数
  • 操作账号需拥有对应空间的导出权限

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 09:15:14