dev
truthhun 6 months ago
parent db0215899a
commit dd8dd11043

@ -704,7 +704,7 @@ func (m *DBModel) initConfig() (err error) {
// 转换配置项
{Category: ConfigCategoryConverter, Name: ConfigConverterMaxPreview, Label: "最大预览页数", Value: "12", Placeholder: "文档允许的最大预览页数0表示不限制", InputType: InputTypeNumber, Sort: 0, Options: ""},
{Category: ConfigCategoryConverter, Name: ConfigConverterTimeout, Label: "转换超时(分钟)", Value: "30", Placeholder: "文档转换超时时间默认为30分钟", InputType: InputTypeNumber, Sort: 10, Options: ""},
{Category: ConfigCategoryConverter, Name: ConfigConverterExtension, Label: "预览格式", Value: "svg", Placeholder: "将文档转为特定格式以供预览", InputType: InputTypeSelect, Sort: 20, Options: "svg:SVG\njpg:JPEG\npng:PNG"},
{Category: ConfigCategoryConverter, Name: ConfigConverterExtension, Label: "预览格式", Value: "svg", Placeholder: "将文档转为特定格式以供预览", InputType: InputTypeSelect, Sort: 20, Options: "svg:SVG\njpg:JPEG\npng:PNG\nwebp:WEBP"},
{Category: ConfigCategoryConverter, Name: ConfigConverterEnableGZIP, Label: "是否启用GZIP压缩", Value: "true", Placeholder: "是否对文档SVG预览文件启用GZIP压缩启用后转换效率会【稍微】下降但相对直接的SVG文件减少75%的存储空间", InputType: InputTypeSwitch, Sort: 30, Options: ""},
{Category: ConfigCategoryConverter, Name: ConfigConverterEnableSVGO, Label: "是否启用SVGO", Value: "false", Placeholder: "是否对文档SVG预览文件启用SVGO压缩启用后转换效率会【明显】下降但相对直接的SVG文件减少50%左右的存储空间", InputType: InputTypeSwitch, Sort: 40, Options: ""},
{Category: ConfigCategoryConverter, Name: ConfigConverterEnableConvertRepeatedDocument, Label: "是否转换重复文档", Value: "false", Placeholder: "对于已转换过的文档,再次被上传时是否再转换一次", InputType: InputTypeSwitch, Sort: 50, Options: ""},

@ -176,15 +176,25 @@ type OptionConvertPages struct {
// ConvertPDFToPages 将PDF转为预览页
func (c *Converter) ConvertPDFToPages(src string, fromPage, toPage int, option *OptionConvertPages) (pages []Page, err error) {
switch strings.TrimLeft(option.Extension, ".") {
ext := strings.TrimLeft(option.Extension, ".")
switch ext {
case "png":
return c.ConvertPDFToPNG(src, fromPage, toPage)
case "jpg":
case "jpg", "webp":
// 见将pdf转为png然后png再转为jpg
pages, err = c.ConvertPDFToPNG(src, fromPage, toPage)
// 通过imagemagick将图片转为jpg
var (
dst string
errConvert error
)
for idx, page := range pages {
if dst, errConvert := c.ConvertPNGToJPG(page.PagePath); errConvert == nil {
if ext != "webp" {
dst, errConvert = c.ConvertPNGToJPG(page.PagePath)
} else {
dst, errConvert = c.ConvertPNGToWEBP(page.PagePath)
}
if errConvert == nil {
os.Remove(page.PagePath)
page.PagePath = dst
pages[idx] = page
@ -212,6 +222,22 @@ func (c *Converter) ConvertPNGToJPG(src string) (dst string, err error) {
return
}
// 将png转为webp
func (c *Converter) ConvertPNGToWEBP(src string) (dst string, err error) {
dst = strings.TrimSuffix(src, filepath.Ext(src)) + ".webp"
// 通过imagemagick将图片转为jpg
args := []string{
src,
dst,
}
c.logger.Debug("convert png to webp", zap.String("cmd", imageMagick), zap.Strings("args", args))
_, err = command.ExecCommand(imageMagick, args, c.timeout)
if err != nil {
c.logger.Error("convert png to webp", zap.String("cmd", imageMagick), zap.Strings("args", args), zap.Error(err))
}
return
}
func (c *Converter) ConvertPDFToJPG(src string, fromPage, toPage int) (pages []Page, err error) {
return c.convertPDFToPage(src, fromPage, toPage, ".jpg")
}

Loading…
Cancel
Save