2012-07-03 113 views
1

以下工作將會將/tmp/file.docx轉換爲/tmp/file.pdf使用命令行重定向輸入和輸出

libreoffice3.5. --headless --convert-to pdf --outdir /tmp /tmp/file.docx 

我將如何轉換https://www.mysite.com/getfile.php?id=123(這將返回一個的docx文件),並將其保存爲/tmp/file_123.pdf?我期望它需要wget,管道和輸入/輸出重定向。

謝謝

編輯 - 響應zebediah49的帖子

> libreoffice3.5 --headless --convert-to pdf --outdir /tmp <(wget -O - "http://www.mysite.com/demo/lib/m.php?cid=9&controller=detail&task=displayDocument&id=56&x=fc872c033770e3bc8706e6a90bcdff02") 

--2012-07-03 14:09:03-- http://www.mysite.com/demo/lib/m.php?cid=9&controller=detail&task=displayDocument&id=56&x=fc872c033770e3bc8706e6a90bcdff02 
Resolving www.mysite.com... 99.999.999.999 
Connecting to www.mysite.com|99.999.999.999|:80... connected. 
HTTP request sent, awaiting response... 200 OK 
Length: 29696 (29K) [application/msword] 
Saving to: `STDOUT' 

    0K .......... .......... .........      100% 14.2M=0.002s 

2012-07-03 14:09:03 (14.2 MB/s) - `-' saved [29696/29696] 

編輯 - 響應rekire的第一個解決方案

> wget http://www.mysite.com/demo/lib/m.php?cid=9&controller=detail&task=displayDocument&id=56&x=fc872c033770e3bc8706e6a90bcdff02 --no-check-certificate -O /tmp/file.docx 
--2012-07-03 14:34:12-- http://www.mysite.com/demo/lib/m.php?cid=9 
Resolving www.mysite.com... bash: --no-check-certificate: command not found 
99.999.999.999 
Connecting to www.mysite.com|99.999.999.999|:80... connected. 
HTTP request sent, awaiting response... 200 OK 
Length: 1236 (1.2K) [text/html] 
Saving to: `m.php?cid=9.8' 

    0K .              100% 42.1M=0s 

2012-07-03 14:34:12 (42.1 MB/s) - `m.php?cid=9.8' saved [1236/1236] 

> libreoffice3.5 --headless --convert-to pdf --outdir /tmp /tmp/file.docx 

編輯 - 響應rekire的第二個解決方案

> TMPFILE=`mktemp -u` 
> wget http://www.mysite.com/demo/lib/m.php?cid=9&controller=detail&task=displayDocument&id=56&x=fc872c033770e3bc8706e6a90bcdff02 --no-check-certificate -O $TMPFILE 
--2012-07-03 14:24:09-- http://www.mysite.com/demo/lib/m.php?cid=9 
Resolving www.mysite.com... bash: --no-check-certificate: command not found 
99.999.999.999 
Connecting to www.mysite.com|99.999.999.999|:80... connected. 
HTTP request sent, awaiting response... 200 OK 
Length: 1236 (1.2K) [text/html] 
Saving to: `m.php?cid=9.5' 

    0K .              100% 42.1M=0s 

2012-07-03 14:24:09 (42.1 MB/s) - `m.php?cid=9.5' saved [1236/1236] 


> libreoffice3.5 --headless --convert-to pdf --outdir /tmp $TMPFILE 

回答

2

根據您的命令這兩條線應該工作:

TMPFILE=`mktemp -u` 
wget https://www.mysite.com/getfile.php?id=123 --no-check-certificate -O $TMPFILE 
libreoffice3.5. --headless --convert-to pdf:outfile.pdf --outdir /tmp $TMPFILE 

請注意:不過outFile將在每次運行時被覆蓋,所以你應該

wget https://www.mysite.com/getfile.php?id=123 --no-check-certificate -O /tmp/file.docx 
libreoffice3.5. --headless --convert-to pdf:outfile.pdf --outdir /tmp /tmp/file.docx 

或者像zebediah49一個文件名唯一說爲輸出文件使用唯一的名稱。

+0

我想補充說一個人應該使用'mktemp'來避免意外 – zebediah49

+0

@ zebediah49不錯的提示我還不知道那個命令 – rekire

+0

謝謝rekire,TTesting我們說話。不意味着顯示爲https。只要擺脫「 - 無檢查證書」? – user1032531

3

如果你想要一條線,你可以使用重定向做

libreoffice3.5. --headless --convert-to pdf --outdir /tmp <(wget -O - "https://www.mysite.com/getfile.php?id=123") 

編輯:

我害怕的LibreOffice使用--convert-to時,可能不會允許保存名稱。如果你願意的話,這裏有一個版本將使用一個臨時目錄,但保存在當前一個輸出(我假設你不想通過/ tmp中挖找你的東西......

TEMP_DIR=`mktemp -d` 
wget -P "$TEMP_DIR" "https://www.mysite.com/getfile.php?id=123" 
libreoffice3.5. --headless --convert-to pdf --outdir ./ "$TEMD_DIR/*" 
rm -r "$TEMP_DIR" 

我格式化它就好像它是在一個腳本中一樣..如果你只是自己運行它,你可以知道你不會在你目前的目錄中打開任何東西和/或做所有事情,因此只需使用

wget "https://www.mysite.com/getfile.php?id=123" 
libreoffice3.5. --headless --convert-to pdf "getfile.php?id=123" 
+0

'<()'和管道'|'有什麼區別? –

+0

http://tldp.org/LDP/abs/html/process-sub.html對它進行了更好的解釋,但總而言之,過程替代習慣用法使您可以使用管道來堅持接受來自文件的輸入。我不知道libreoffice是否會接受輸入文件的stdin,所以我選擇了這種語法。 – zebediah49

+0

所以這就像管道輸入stdin,並且傳遞'/ dev/fd/0'作爲命令行參數,除了它將使用不同的fd號碼。整齊! +1 –

相關問題