Tôi đã viết một chương trình trong golang để chuyển đổi hàng loạt hàng ngàn file doc/xls.
- xác định "gốc" giá trị biến đến đường dẫn của tài liệu của bạn để chuyển đổi
- đã chuyển đổi tài liệu pdf được bỏ qua (nếu không muốn nói, bình luận các điều kiện kiểm tra trong chuyến thăm function())
- đây Tôi đang sử dụng 4 chủ đề (Tôi có một i3 Intel với 4 lõi). Bạn có thể sửa đổi giá trị trong hàm main()
Đôi khi có thể xảy ra Libreoffice không chuyển đổi một số tệp, vì vậy bạn nên mở và chuyển đổi chúng thành PDF theo cách thủ công. May mắn thay, họ chỉ có 10 trong số 16.000 tài liệu của tôi để chuyển đổi.
package main
import (
"os/exec"
"sync"
"path/filepath"
"os"
"fmt"
"strings"
)
// root dir of your documents to convert
root := "/.../conversion-from-office/"
var tasks = make(chan *exec.Cmd, 64)
func visit(path string, f os.FileInfo, err error) error {
if (f.IsDir()) {
// fmt.Printf("Entering %s\n", path)
} else {
ext := filepath.Ext(path)
if (strings.ToLower (ext) == "pdf") {
} else {
outfile := path[0:len(path)-len(ext)] + ".pdf"
if _, err := os.Stat(outfile); os.IsNotExist(err) {
fmt.Printf("Converting %s\n", path)
outdir := filepath.Dir(path)
tasks <- exec.Command("soffice", "--headless", "--convert-to", "pdf", path, "--outdir", outdir)
}
}
}
return nil
}
func main() {
// spawn four worker goroutines
var wg sync.WaitGroup
// the ...; i < 4;... indicates that I'm using 4 threads
for i := 0; i < 4; i++ {
wg.Add(1)
go func() {
for cmd := range tasks {
cmd.Run()
}
wg.Done()
}()
}
err := filepath.Walk(root, visit)
fmt.Printf("filepath.Walk() returned %v\n", err)
close(tasks)
// wait for the workers to finish
wg.Wait()
}
Bạn có ý định chạy một lệnh 'libreoffice' duy nhất trên nhiều CPU hoặc thực hiện nhiều cuộc gọi đến' libreoffice' và chuyển đổi các tệp riêng biệt không? Trong trường hợp đầu tiên bạn không thể làm bất cứ điều gì, trong trường hợp thứ hai nó là đơn giản. – Bakuriu
Uhm, tôi tin rằng 'libreoffice' ngăn bạn chạy nhiều hơn một trình chuyển đổi pdf đồng thời. Cố gắng tạo nhiều quy trình chỉ tạo ra một tệp '.pdf' duy nhất và các quy trình khác không thành công. Điều này xảy ra ngay cả khi sử dụng tùy chọn '--nolockcheck'. Vì vậy, tôi tin rằng câu trả lời cho câu hỏi của bạn là: bạn không thể. Bạn nên sử dụng một chương trình khác để chuyển đổi. – Bakuriu
Tôi tin rằng tôi đã từng đọc rằng libreoffice luôn luôn chỉ sử dụng một quy trình (cũng qua nhà văn, gây ấn tượng, vv), điều đó có thể khiến điều này có thể là không thể. – lolopop