diff --git a/convert.go b/convert.go index 68e16b9..7a05889 100644 --- a/convert.go +++ b/convert.go @@ -6,21 +6,21 @@ import ( "time" ) -func ConvertToPDF(folderPath string, filesPaths []string, contType ContentType) (resultingPath string, err error) { +func ConvertToPDF(folderPath string, filesPaths []string, contType ContentType, name string) (resultingPath string, err error) { switch contType { case Images: - return ImagesToPDF(folderPath, filesPaths) + return ImagesToPDF(folderPath, filesPaths, name) case Office: - return OfficeToPDF(folderPath, filesPaths) + return OfficeToPDF(folderPath, filesPaths, name) case Pdfs: - return PdfToPDF(folderPath, filesPaths) + return PdfToPDF(folderPath, filesPaths, name) default: return "", fmt.Errorf("unhandled ContentType with %d index", contType) } } -func ImagesToPDF(folderPath string, filesPaths []string) (resultingPath string, err error) { - resultingPath = createResultingPath(folderPath, "Images") +func ImagesToPDF(folderPath string, filesPaths []string, name string) (resultingPath string, err error) { + resultingPath = createResultingPath(folderPath, "Images", name) if err := runCommand("convert", append(filesPaths, resultingPath)...); err != nil { return "", err @@ -29,8 +29,8 @@ func ImagesToPDF(folderPath string, filesPaths []string) (resultingPath string, return resultingPath, nil } -func OfficeToPDF(folderPath string, filesPaths []string) (resultingPath string, err error) { - resultingPath = createResultingPath(folderPath, "Office document") +func OfficeToPDF(folderPath string, filesPaths []string, name string) (resultingPath string, err error) { + resultingPath = createResultingPath(folderPath, "Office document", name) err = runCommand( "soffice", "--headless", "--nologo", "--nofirststartwizard", @@ -48,8 +48,8 @@ func OfficeToPDF(folderPath string, filesPaths []string) (resultingPath string, return resultingPath, nil } -func PdfToPDF(folderPath string, filesPath []string) (resultingPath string, err error) { - resultingPath = createResultingPath(folderPath, "PDFs") +func PdfToPDF(folderPath string, filesPath []string, name string) (resultingPath string, err error) { + resultingPath = createResultingPath(folderPath, "PDFs", name) err = runCommand("gs", append([]string{ "-sDEVICE=pdfwrite", "-dCompressFonts=true", "-dPDFSETTINGS=/ebook", @@ -63,8 +63,14 @@ func PdfToPDF(folderPath string, filesPath []string) (resultingPath string, err return resultingPath, nil } -func createResultingPath(folderPath string, suffix string) string { - return folderPath + "/" + time.Now().Format(time.ANSIC) + " " + suffix + ".pdf" +func createResultingPath(folderPath string, suffix string, name string) string { + filename := time.Now().Format(time.ANSIC) + " " + suffix + ".pdf" + + if len(name) > 0 { + filename = name + ".pdf" + } + + return folderPath + "/" + filename } func runCommand(command string, arg ...string) error { diff --git a/index.html b/index.html index 9b7d74a..a69fd46 100644 --- a/index.html +++ b/index.html @@ -7,6 +7,7 @@
diff --git a/main.go b/main.go index fe32153..a42edd7 100644 --- a/main.go +++ b/main.go @@ -137,7 +137,13 @@ func uploadHandler(w http.ResponseWriter, r *http.Request) { return } - resFile, err := ConvertToPDF(folderPath, filesPaths, contType) + resultFileName := "" + + if len(r.MultipartForm.Value["filename"]) > 0 { + resultFileName = r.MultipartForm.Value["filename"][0] + } + + resFile, err := ConvertToPDF(folderPath, filesPaths, contType, resultFileName) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return