我想自动将一些汇合页面导出为PDF。
可以使用URL下载:
http://<confluence server>/confluence/spaces/flyingpdf/pdfpageexport.action?pageId=<pageID>
输入此网址时,效果非常好。
但是当我尝试使用wget
下载时,会下载HTML页面(要求输入登录名和密码)。我尝试使用--user
和--password
wget选项提供登录名/密码,但它不起作用。
您是否有想法为wget
命令提供汇总凭据?或者下载PDF页面的其他解决方案?
答案 0 :(得分:3)
如果您在Confluence 5.5之前使用Confluence服务器,那么您很幸运! Confluence有一个API来处理这个问题,请参阅他们的documentation。
更新:如果您使用的是Confluence Server 5.5或更高版本,则默认情况下不为此启用API。参见 Confluence Administration&gt;进一步配置以启用XML-RPC和SOAP API。 (感谢@fatpanther指出这一点)
新的REST API不支持此功能,请参阅REST API documentation。
您可以使用Confluence Command Line Interface导出为PDF。
答案 1 :(得分:2)
首先请求资源:
curl -D- -u user:pwd -X GET -H "Content-Type: application/json" "https://your-url/confluence/spaces/flyingpdf/pdfpageexport.action?pageId=12345678"
从生成的JSON中提取“Location”值(例如grep | cut),然后使用调整后的URL和mime类型重复查询:
curl -D- -u user:pwd -X GET -H "Content-Type: text/html;charset=UTF-8" "https://your-url/$LOCATION_JUST_EXTRACTED" --output file.pdf
答案 2 :(得分:1)
Narcolessico的答案对我有用,但是我花了一些时间才能完全理解这种方法。我将添加到上面提供的答案中。
注意::我正在使用Java(Apache HttpClient)对Confluence服务器执行HTTP GET请求。
禁用自动重定向处理的代码如下。
final HttpClient client = HttpClientBuilder
.create()
.setSSLContext(sslContext)
.disableRedirectHandling() // disable the auto handling here
.build();
final String urlToGetLocation = "https://<your-confluence-server-hostname><the-relative-link-from-step-2>"
final HttpGet request = new HttpGet(urlToGetLocation);
// You'll need to provide Basic Auth credentials. This is a base-64 encoded
// username:password string, else the Location header returned will be a
// redirect to the login page.
request.setHeader(HttpHeaders.AUTHORIZATION, authorizationHeaderValue);
request.setHeader(HttpHeaders.CONTENT_TYPE, "application/json");
final HttpResponse response = client.execute(request);
final HttpEntity payload = response.getEntity();
注意::我也覆盖了SSL上下文,因此什么也不做。如果Confluence使用的是HTTP,那么您可能还需要解决另一个问题。
另一方面,如果您要对上述网址执行CURL GET,则会收到如下响应。
上面的GET请求和结果302响应将显示您可以下载的PDF文档的位置。 302个响应标头将包含以下内容。
final Header[] headers = response.getHeaders(HttpHeaders.LOCATION);
final String location = headers[0].getValue();
这是以下形式的网址。
/download/temp/pdfexport-20190924-240919-0526-189/a-filename-for-pdf.pdf?contentType=application/pdf
此答案的全部功劳归Narcolessico所有。我只是想添加我必须整理的细节,以使其能够从Java运行。