मैं बैच को golang में एक कार्यक्रम में लिखा है दस्तावेज़/xls फ़ाइलों के हजारों परिवर्तित।
- पहले से ही परिवर्तित पीडीएफ के लिए दस्तावेजों को छोड़ दिया हैं (यदि नहीं, यात्रा() फ़ंक्शन में जांच हालत टिप्पणी)
- यहाँ कन्वर्ट करने के लिए अपने दस्तावेज़ों के रास्ते पर "रूट" चर मान निर्धारित मैं 4 धागे का उपयोग कर रहा हूं (मेरे पास 4 कोर के साथ इंटेल i3 है)। आप मुख्य() फ़ंक्शन
कभी-कभी ऐसा हो सकता है कि लिबरॉफ़िस कुछ फ़ाइलों को परिवर्तित नहीं करता है, इसलिए आपको इसे खोलना चाहिए और उन्हें मैन्युअल रूप से पीडीएफ में परिवर्तित करना चाहिए। सौभाग्य से, वे बदलने के लिए मेरे 16.000 दस्तावेजों में से केवल 10 थे।
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()
}
क्या आप एकाधिक CPUs पर एकल 'libreoffice' कमांड चलाने या' libreoffice' पर एकाधिक कॉल करने और फ़ाइलों को अलग से कनवर्ट करने का मतलब है? पहले मामले में आप कुछ भी नहीं कर सकते हैं, दूसरे मामले में यह आसान है। – Bakuriu
उहम, मेरा मानना है कि 'libreoffice' आपको एक पीडीएफ कनवर्टर से अधिक बार चलाने के लिए रोकता है। कई प्रक्रियाओं को बनाने की कोशिश करने से केवल एक '.pdf' फ़ाइल उत्पन्न होती है और अन्य प्रक्रियाएं विफल होती हैं। यह '--nolockcheck' विकल्प का उपयोग करते समय भी होता है। तो, मेरा मानना है कि आपके प्रश्न का उत्तर यह है: आप नहीं कर सकते। आपको रूपांतरण के लिए एक अलग कार्यक्रम का उपयोग करना चाहिए। – Bakuriu
मेरा मानना है कि मैंने एक बार पढ़ा है कि libreoffice हमेशा केवल एक प्रक्रिया का उपयोग करता है (लेखक, इंप्रेशन इत्यादि में भी), जो इसे संभवतः असंभव बना देगा। – lolopop