支持svg、png和jpeg在线预览

dev
truthhun 7 months ago
parent e4ee461f04
commit c282569755

@ -68,6 +68,7 @@ type Document struct {
User *User `protobuf:"bytes,31,opt,name=user,proto3" json:"user,omitempty"` User *User `protobuf:"bytes,31,opt,name=user,proto3" json:"user,omitempty"`
EnableGzip bool `protobuf:"varint,32,opt,name=enable_gzip,json=enableGzip,proto3" json:"enable_gzip,omitempty"` EnableGzip bool `protobuf:"varint,32,opt,name=enable_gzip,json=enableGzip,proto3" json:"enable_gzip,omitempty"`
ConvertError string `protobuf:"bytes,33,opt,name=convert_error,json=convertError,proto3" json:"convert_error,omitempty"` ConvertError string `protobuf:"bytes,33,opt,name=convert_error,json=convertError,proto3" json:"convert_error,omitempty"`
PreviewExt string `protobuf:"bytes,34,opt,name=preview_ext,json=previewExt,proto3" json:"preview_ext,omitempty"`
} }
func (m *Document) Reset() { *m = Document{} } func (m *Document) Reset() { *m = Document{} }
@ -334,6 +335,13 @@ func (m *Document) GetConvertError() string {
return "" return ""
} }
func (m *Document) GetPreviewExt() string {
if m != nil {
return m.PreviewExt
}
return ""
}
// 删除文档,放入回收站 // 删除文档,放入回收站
type DeleteDocumentRequest struct { type DeleteDocumentRequest struct {
Id []int64 `protobuf:"varint,1,rep,packed,name=id,proto3" json:"id,omitempty"` Id []int64 `protobuf:"varint,1,rep,packed,name=id,proto3" json:"id,omitempty"`
@ -1381,116 +1389,117 @@ func init() {
func init() { proto.RegisterFile("api/v1/document.proto", fileDescriptor_55a584ae3a7fc022) } func init() { proto.RegisterFile("api/v1/document.proto", fileDescriptor_55a584ae3a7fc022) }
var fileDescriptor_55a584ae3a7fc022 = []byte{ var fileDescriptor_55a584ae3a7fc022 = []byte{
// 1736 bytes of a gzipped FileDescriptorProto // 1750 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x58, 0xdd, 0x6e, 0xdb, 0xc8, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x58, 0xdd, 0x6e, 0xdb, 0xc8,
0x15, 0x0e, 0x45, 0xd9, 0x96, 0x8e, 0x64, 0x45, 0x99, 0x58, 0x36, 0x4d, 0xdb, 0x92, 0xc2, 0xd4, 0x15, 0x0e, 0x45, 0xd9, 0x96, 0x8e, 0x64, 0x45, 0x99, 0x58, 0x36, 0x4d, 0xdb, 0x92, 0xc2, 0xd4,
0xad, 0xd7, 0x28, 0x2c, 0xc4, 0x45, 0x7b, 0xb1, 0x7b, 0x51, 0x78, 0x9d, 0x34, 0x6b, 0xa0, 0x28, 0xad, 0xd7, 0x28, 0x2c, 0xc4, 0x45, 0x7b, 0xb1, 0x7b, 0x51, 0x78, 0x9d, 0x34, 0x6b, 0xa0, 0x28,
0x16, 0xcc, 0x06, 0x0b, 0xec, 0x8d, 0xca, 0x88, 0x63, 0x89, 0x2d, 0x25, 0xb2, 0xe4, 0xc8, 0xaa, 0x16, 0xcc, 0x06, 0x0b, 0xec, 0x8d, 0xca, 0x88, 0x63, 0x89, 0x2d, 0x25, 0xb2, 0xe4, 0xc8, 0x5a,
0x82, 0xf6, 0xa6, 0x0f, 0x50, 0x2c, 0xd0, 0x57, 0xe9, 0x43, 0xf4, 0xaa, 0x08, 0xd0, 0x5e, 0x14, 0x05, 0xed, 0x45, 0xfb, 0x00, 0xc5, 0x02, 0x7d, 0x95, 0x3e, 0x44, 0xaf, 0x8a, 0x00, 0xed, 0x45,
0xe8, 0x45, 0x17, 0x49, 0x5f, 0xa0, 0x6f, 0x50, 0xcc, 0x99, 0x19, 0x8a, 0xe2, 0x8f, 0xed, 0xdd, 0x81, 0x5e, 0xb4, 0x48, 0xfa, 0x02, 0x7d, 0x83, 0x62, 0xce, 0xcc, 0x50, 0x14, 0x7f, 0x6c, 0xef,
0xbd, 0xe3, 0x9c, 0x99, 0xf9, 0xbe, 0x39, 0x33, 0xe7, 0x7c, 0x73, 0x86, 0xd0, 0x71, 0x42, 0x6f, 0xf6, 0x8e, 0x73, 0xe6, 0xcc, 0xf7, 0xcd, 0x99, 0x39, 0xe7, 0x9b, 0x19, 0x42, 0xc7, 0x09, 0xbd,
0x70, 0xf3, 0x6c, 0xe0, 0x06, 0xa3, 0xf9, 0x94, 0xce, 0xd8, 0x59, 0x18, 0x05, 0x2c, 0x20, 0x9b, 0xc1, 0xcd, 0xb3, 0x81, 0x1b, 0x8c, 0xe6, 0x53, 0x3a, 0x63, 0x67, 0x61, 0x14, 0xb0, 0x80, 0x6c,
0x4e, 0xe8, 0x9d, 0xdd, 0x3c, 0x33, 0x7b, 0xe3, 0x20, 0x18, 0xfb, 0x74, 0x80, 0xd6, 0x37, 0xf3, 0x3a, 0xa1, 0x77, 0x76, 0xf3, 0xcc, 0xec, 0x8d, 0x83, 0x60, 0xec, 0xd3, 0x01, 0x5a, 0xdf, 0xcc,
0xeb, 0x01, 0xf3, 0xa6, 0x34, 0x66, 0xce, 0x34, 0x14, 0x03, 0xcd, 0x9d, 0x71, 0x30, 0x0e, 0xf0, 0xaf, 0x07, 0xcc, 0x9b, 0xd2, 0x98, 0x39, 0xd3, 0x50, 0x38, 0x9a, 0x3b, 0xe3, 0x60, 0x1c, 0xe0,
0x73, 0xc0, 0xbf, 0xa4, 0xf5, 0x50, 0x4e, 0xe3, 0xe0, 0xce, 0x6c, 0x16, 0x30, 0x87, 0x79, 0xc1, 0xe7, 0x80, 0x7f, 0x49, 0xeb, 0xa1, 0x1c, 0xc6, 0xc1, 0x9d, 0xd9, 0x2c, 0x60, 0x0e, 0xf3, 0x82,
0x2c, 0x96, 0xbd, 0x07, 0x59, 0x50, 0x3a, 0x0d, 0xd9, 0x52, 0x76, 0xee, 0xc9, 0x05, 0x39, 0x8c, 0x59, 0x2c, 0x7b, 0x0f, 0xb2, 0xa0, 0x74, 0x1a, 0xb2, 0xa5, 0xec, 0xdc, 0x93, 0x13, 0x72, 0x18,
0x39, 0xa3, 0xc9, 0x6a, 0x49, 0xe6, 0x23, 0xd9, 0x31, 0x8f, 0x69, 0x24, 0x4c, 0xd6, 0x37, 0x35, 0x73, 0x46, 0x93, 0xd5, 0x94, 0xcc, 0x47, 0xb2, 0x63, 0x1e, 0xd3, 0x48, 0x98, 0xac, 0xdf, 0xd7,
0xa8, 0x3d, 0x97, 0x0b, 0x27, 0x2d, 0xa8, 0x78, 0xae, 0xa1, 0xf5, 0xb5, 0x13, 0xdd, 0xae, 0x78, 0xa1, 0xf6, 0x5c, 0x4e, 0x9c, 0xb4, 0xa0, 0xe2, 0xb9, 0x86, 0xd6, 0xd7, 0x4e, 0x74, 0xbb, 0xe2,
0x2e, 0xd9, 0x81, 0x0d, 0xe6, 0x31, 0x9f, 0x1a, 0x95, 0xbe, 0x76, 0x52, 0xb7, 0x45, 0x83, 0x98, 0xb9, 0x64, 0x07, 0x36, 0x98, 0xc7, 0x7c, 0x6a, 0x54, 0xfa, 0xda, 0x49, 0xdd, 0x16, 0x0d, 0x62,
0x50, 0xfb, 0x2d, 0x5d, 0x2e, 0x82, 0xc8, 0x8d, 0x0d, 0x1d, 0x3b, 0x92, 0x36, 0xe9, 0x43, 0xc3, 0x42, 0xed, 0xd7, 0x74, 0xb9, 0x08, 0x22, 0x37, 0x36, 0x74, 0xec, 0x48, 0xda, 0xa4, 0x0f, 0x0d,
0xa5, 0xf1, 0x28, 0xf2, 0x42, 0xbe, 0x5a, 0xa3, 0x8a, 0xdd, 0x69, 0x13, 0xd9, 0x83, 0x2d, 0x4e, 0x97, 0xc6, 0xa3, 0xc8, 0x0b, 0xf9, 0x6c, 0x8d, 0x2a, 0x76, 0xa7, 0x4d, 0x64, 0x0f, 0xb6, 0x38,
0x3f, 0xf4, 0x5c, 0x63, 0x03, 0x89, 0x36, 0x79, 0xf3, 0x0a, 0xc9, 0x46, 0xc1, 0x0d, 0x8d, 0x8c, 0xfd, 0xd0, 0x73, 0x8d, 0x0d, 0x24, 0xda, 0xe4, 0xcd, 0x2b, 0x24, 0x1b, 0x05, 0x37, 0x34, 0x32,
0x4d, 0x41, 0x86, 0x0d, 0x6e, 0x5d, 0x78, 0x2e, 0x9b, 0x18, 0x5b, 0x7d, 0xed, 0x64, 0xc3, 0x16, 0x36, 0x05, 0x19, 0x36, 0xb8, 0x75, 0xe1, 0xb9, 0x6c, 0x62, 0x6c, 0xf5, 0xb5, 0x93, 0x0d, 0x5b,
0x0d, 0xb2, 0x0b, 0x9b, 0x13, 0xea, 0x8d, 0x27, 0xcc, 0xa8, 0xa1, 0x59, 0xb6, 0x88, 0x01, 0x5b, 0x34, 0xc8, 0x2e, 0x6c, 0x4e, 0xa8, 0x37, 0x9e, 0x30, 0xa3, 0x86, 0x66, 0xd9, 0x22, 0x06, 0x6c,
0x61, 0x44, 0x6f, 0x3c, 0xba, 0x30, 0xea, 0xd8, 0xa1, 0x9a, 0x1c, 0x27, 0x74, 0xc6, 0x34, 0x36, 0x85, 0x11, 0xbd, 0xf1, 0xe8, 0xc2, 0xa8, 0x63, 0x87, 0x6a, 0x72, 0x9c, 0xd0, 0x19, 0xd3, 0xd8,
0x40, 0xe0, 0x60, 0x83, 0x10, 0xa8, 0xce, 0xe7, 0x9e, 0x6b, 0x34, 0x90, 0x12, 0xbf, 0xc9, 0x31, 0x00, 0x81, 0x83, 0x0d, 0x42, 0xa0, 0x3a, 0x9f, 0x7b, 0xae, 0xd1, 0x40, 0x4a, 0xfc, 0x26, 0xc7,
0xb4, 0xdc, 0x60, 0x31, 0xf3, 0x03, 0xc7, 0x1d, 0x8e, 0x82, 0xf9, 0x8c, 0x19, 0x4d, 0x9c, 0xb2, 0xd0, 0x72, 0x83, 0xc5, 0xcc, 0x0f, 0x1c, 0x77, 0x38, 0x0a, 0xe6, 0x33, 0x66, 0x34, 0x71, 0xc8,
0xad, 0xac, 0x97, 0xdc, 0x48, 0x8e, 0x00, 0x38, 0xb0, 0x1c, 0xb2, 0x8d, 0x43, 0xea, 0xdc, 0x22, 0xb6, 0xb2, 0x5e, 0x72, 0x23, 0x39, 0x02, 0xe0, 0xc0, 0xd2, 0x65, 0x1b, 0x5d, 0xea, 0xdc, 0x22,
0xba, 0x8f, 0xa1, 0x75, 0xed, 0xdc, 0x04, 0x91, 0xc7, 0xa8, 0x1c, 0xd2, 0x12, 0x28, 0xca, 0x2a, 0xba, 0x8f, 0xa1, 0x75, 0xed, 0xdc, 0x04, 0x91, 0xc7, 0xa8, 0x74, 0x69, 0x09, 0x14, 0x65, 0x15,
0x86, 0x3d, 0x85, 0xed, 0x51, 0x30, 0xe5, 0x9b, 0x2f, 0x47, 0x3d, 0xc4, 0x51, 0x4d, 0x69, 0x14, 0x6e, 0x4f, 0x61, 0x7b, 0x14, 0x4c, 0xf9, 0xe2, 0x4b, 0xaf, 0x87, 0xe8, 0xd5, 0x94, 0x46, 0xe1,
0x83, 0x76, 0x60, 0x23, 0x1e, 0x05, 0x11, 0x35, 0xda, 0x62, 0xed, 0xd8, 0x20, 0x3d, 0x68, 0xe0, 0xb4, 0x03, 0x1b, 0xf1, 0x28, 0x88, 0xa8, 0xd1, 0x16, 0x73, 0xc7, 0x06, 0xe9, 0x41, 0x03, 0x3f,
0x87, 0x9c, 0xf8, 0x08, 0xfb, 0x00, 0x4d, 0xc9, 0xb4, 0x30, 0xf2, 0x46, 0xd4, 0x20, 0xd2, 0x65, 0xe4, 0xc0, 0x47, 0xd8, 0x07, 0x68, 0x4a, 0x86, 0x85, 0x91, 0x37, 0xa2, 0x06, 0x91, 0x21, 0xf3,
0xde, 0xe0, 0x2e, 0xc7, 0xde, 0x5b, 0x6a, 0x3c, 0xc6, 0xcd, 0xc7, 0x6f, 0xbe, 0x9d, 0x31, 0x73, 0x06, 0x0f, 0x39, 0xf6, 0xde, 0x52, 0xe3, 0x31, 0x2e, 0x3e, 0x7e, 0xf3, 0xe5, 0x8c, 0x99, 0xc3,
0xd8, 0x3c, 0x36, 0x76, 0xc4, 0x76, 0x8a, 0x16, 0xf9, 0x39, 0xc0, 0x28, 0xa2, 0x0e, 0xa3, 0xee, 0xe6, 0xb1, 0xb1, 0x23, 0x96, 0x53, 0xb4, 0xc8, 0x4f, 0x01, 0x46, 0x11, 0x75, 0x18, 0x75, 0x87,
0xd0, 0x61, 0x46, 0xa7, 0xaf, 0x9d, 0x34, 0xce, 0xcd, 0x33, 0x11, 0x7a, 0x67, 0x2a, 0xf4, 0xce, 0x0e, 0x33, 0x3a, 0x7d, 0xed, 0xa4, 0x71, 0x6e, 0x9e, 0x89, 0xd4, 0x3b, 0x53, 0xa9, 0x77, 0xf6,
0xbe, 0x50, 0xf1, 0xfc, 0x69, 0xf5, 0xeb, 0xff, 0xf4, 0x34, 0xbb, 0x2e, 0xe7, 0x5c, 0x30, 0x0e, 0x85, 0xca, 0xe7, 0x4f, 0xab, 0xdf, 0xfc, 0xab, 0xa7, 0xd9, 0x75, 0x39, 0xe6, 0x82, 0x71, 0x80,
0x30, 0x0f, 0x5d, 0x05, 0xb0, 0x7b, 0x5f, 0x00, 0x39, 0x47, 0x00, 0xb8, 0xd4, 0xa7, 0x12, 0x60, 0x79, 0xe8, 0x2a, 0x80, 0xdd, 0xfb, 0x02, 0xc8, 0x31, 0x02, 0xc0, 0xa5, 0x3e, 0x95, 0x00, 0x7b,
0xef, 0xbe, 0x00, 0x72, 0xce, 0x05, 0x23, 0x97, 0xd0, 0x8c, 0xa8, 0xd8, 0x4d, 0x84, 0x38, 0xba, 0xf7, 0x05, 0x90, 0x63, 0x2e, 0x18, 0xb9, 0x84, 0x66, 0x44, 0xc5, 0x6a, 0x22, 0xc4, 0xd1, 0x3d,
0x27, 0x44, 0x23, 0x99, 0x75, 0xc1, 0xc8, 0x0f, 0xe1, 0xa1, 0x5a, 0x85, 0x8a, 0x5d, 0x03, 0xb7, 0x21, 0x1a, 0xc9, 0xa8, 0x0b, 0x46, 0xbe, 0x0f, 0x0f, 0xd5, 0x2c, 0x54, 0xee, 0x1a, 0xb8, 0x7c,
0x6f, 0x5b, 0x9a, 0x5f, 0x8b, 0x10, 0x36, 0xa1, 0xc6, 0xfb, 0x67, 0xce, 0x94, 0x1a, 0xfb, 0x22, 0xdb, 0xd2, 0xfc, 0x5a, 0xa4, 0xb0, 0x09, 0x35, 0xde, 0x3f, 0x73, 0xa6, 0xd4, 0xd8, 0x17, 0x95,
0x33, 0x54, 0x9b, 0x1f, 0xd7, 0xc8, 0x61, 0x74, 0x1c, 0x44, 0x4b, 0x3e, 0xdf, 0xec, 0xeb, 0x27, 0xa1, 0xda, 0x7c, 0xbb, 0x46, 0x0e, 0xa3, 0xe3, 0x20, 0x5a, 0xf2, 0xf1, 0x66, 0x5f, 0x3f, 0xd1,
0xba, 0x0d, 0xca, 0x74, 0xe5, 0x92, 0x8f, 0xa0, 0x9d, 0x26, 0x41, 0x90, 0x03, 0x04, 0x79, 0x98, 0x6d, 0x50, 0xa6, 0x2b, 0x97, 0x7c, 0x04, 0xed, 0x34, 0x09, 0x82, 0x1c, 0x20, 0xc8, 0xc3, 0x14,
0x62, 0x41, 0xac, 0x36, 0xe8, 0xf4, 0xf7, 0xcc, 0x38, 0xc4, 0x5e, 0xfe, 0x49, 0xce, 0x01, 0x56, 0x0b, 0x62, 0xb5, 0x41, 0xa7, 0x5f, 0x33, 0xe3, 0x10, 0x7b, 0xf9, 0x27, 0x39, 0x07, 0x58, 0x55,
0xd9, 0x6e, 0x74, 0xd1, 0x49, 0x72, 0x26, 0x14, 0xe8, 0xec, 0x22, 0xe9, 0xb1, 0x53, 0xa3, 0x48, 0xbb, 0xd1, 0xc5, 0x20, 0xc9, 0x99, 0x50, 0xa0, 0xb3, 0x8b, 0xa4, 0xc7, 0x4e, 0x79, 0x91, 0x3e,
0x1f, 0xaa, 0x9c, 0xc8, 0xe8, 0xe1, 0xe8, 0xa6, 0x1a, 0xcd, 0x59, 0x6c, 0xec, 0xe1, 0x6b, 0xa6, 0x54, 0x39, 0x91, 0xd1, 0x43, 0xef, 0xa6, 0xf2, 0xe6, 0x2c, 0x36, 0xf6, 0xf0, 0x39, 0xd3, 0x99,
0x33, 0xe7, 0x8d, 0x4f, 0x87, 0xe3, 0xb7, 0x5e, 0x68, 0xf4, 0xfb, 0xda, 0x49, 0xcd, 0x06, 0x61, 0xf3, 0xc6, 0xa7, 0xc3, 0xf1, 0x5b, 0x2f, 0x34, 0xfa, 0x7d, 0xed, 0xa4, 0x66, 0x83, 0x30, 0xbd,
0x7a, 0xf9, 0xd6, 0x0b, 0x45, 0xf8, 0xce, 0x6e, 0x68, 0xc4, 0x86, 0x34, 0x8a, 0x82, 0xc8, 0x78, 0x7c, 0xeb, 0x85, 0x22, 0x7d, 0x67, 0x37, 0x34, 0x62, 0x43, 0x1a, 0x45, 0x41, 0x64, 0x3c, 0xc1,
0x82, 0x4b, 0x6a, 0x4a, 0xe3, 0x0b, 0x6e, 0xb3, 0x7e, 0x04, 0x9d, 0xe7, 0xe8, 0x80, 0xd2, 0x19, 0x29, 0x35, 0xa5, 0xf1, 0x05, 0xb7, 0x71, 0x14, 0x59, 0x85, 0x43, 0x3e, 0x6b, 0x0b, 0x5d, 0x40,
0x9b, 0xfe, 0x6e, 0x4e, 0xe3, 0x95, 0xdc, 0xe8, 0x42, 0x6e, 0xac, 0x01, 0x1c, 0xd9, 0x14, 0xd3, 0x9a, 0x5e, 0x7c, 0xcd, 0xac, 0x1f, 0x40, 0xe7, 0x39, 0x46, 0xa8, 0x84, 0xc8, 0xa6, 0xbf, 0x99,
0xde, 0xa6, 0xa3, 0xe5, 0xc8, 0xbf, 0x73, 0xc2, 0x0b, 0x20, 0x2f, 0x29, 0x2b, 0x1b, 0xa5, 0x54, 0xd3, 0x78, 0xa5, 0x47, 0xba, 0xd0, 0x23, 0x6b, 0x00, 0x47, 0x36, 0x45, 0x5d, 0xb0, 0xe9, 0x68,
0xac, 0x07, 0x8d, 0x85, 0xc7, 0x26, 0x43, 0x67, 0xce, 0x26, 0x41, 0x84, 0x5a, 0x56, 0xb3, 0x81, 0x39, 0xf2, 0xef, 0x1c, 0xf0, 0x02, 0xc8, 0x4b, 0xca, 0xca, 0xbc, 0x94, 0xcc, 0xf5, 0xa0, 0xb1,
0x9b, 0x2e, 0xd0, 0x62, 0x0d, 0xe1, 0xe0, 0xd5, 0x0a, 0x26, 0xbe, 0x94, 0x67, 0xa2, 0xf0, 0x7a, 0xf0, 0xd8, 0x64, 0xe8, 0xcc, 0xd9, 0x24, 0x88, 0x50, 0xec, 0x6a, 0x36, 0x70, 0xd3, 0x05, 0x5a,
0xd0, 0x50, 0xd2, 0x3e, 0x4c, 0xe8, 0x41, 0x99, 0xae, 0xdc, 0xec, 0xd1, 0x56, 0xb2, 0x47, 0x6b, 0xac, 0x21, 0x1c, 0xbc, 0x5a, 0xc1, 0xc4, 0x97, 0x72, 0xd3, 0x14, 0x5e, 0x0f, 0x1a, 0x4a, 0xfb,
0xbd, 0xab, 0xc0, 0xe3, 0x5f, 0x7a, 0x71, 0x6e, 0xa5, 0x04, 0xaa, 0x5c, 0x87, 0xe4, 0x5a, 0xf1, 0x87, 0x09, 0x3d, 0x28, 0xd3, 0x95, 0x9b, 0xdd, 0xfb, 0x4a, 0x76, 0xef, 0xad, 0x77, 0x15, 0x78,
0x3b, 0xc9, 0xcf, 0x4a, 0x2a, 0x3f, 0x5b, 0x50, 0x59, 0xb8, 0x52, 0x6b, 0x2b, 0x0b, 0x94, 0xca, 0xfc, 0x73, 0x2f, 0xce, 0xcd, 0x94, 0x40, 0x95, 0x0b, 0x95, 0x9c, 0x2b, 0x7e, 0x27, 0x05, 0x5c,
0x6b, 0x8f, 0xfa, 0xae, 0x51, 0xed, 0xeb, 0x5c, 0x2a, 0xb1, 0xc1, 0xad, 0x41, 0xe4, 0xd2, 0x08, 0x49, 0x15, 0x70, 0x0b, 0x2a, 0x0b, 0x57, 0x8a, 0x71, 0x65, 0x81, 0x5a, 0x7a, 0xed, 0x51, 0xdf,
0x75, 0xb5, 0x6e, 0x8b, 0x46, 0x76, 0x71, 0x9b, 0xb9, 0xb8, 0x4b, 0x09, 0xf2, 0x16, 0x76, 0x2a, 0x35, 0xaa, 0x7d, 0x9d, 0x6b, 0x29, 0x36, 0xb8, 0x35, 0x88, 0x5c, 0x1a, 0xa1, 0xf0, 0xd6, 0x6d,
0x41, 0x5e, 0xa9, 0x42, 0xad, 0xaf, 0xa7, 0x54, 0xe1, 0x09, 0x34, 0xbd, 0x78, 0x98, 0xe4, 0x87, 0xd1, 0xc8, 0x4e, 0x6e, 0x33, 0x97, 0x98, 0x29, 0xc5, 0xde, 0xc2, 0x4e, 0xa5, 0xd8, 0x2b, 0xd9,
0x51, 0xef, 0xeb, 0x27, 0x35, 0xbb, 0xe1, 0xc5, 0xb6, 0x32, 0xf1, 0xa5, 0xf8, 0xde, 0xd4, 0x63, 0xa8, 0xf5, 0xf5, 0x94, 0x6c, 0x3c, 0x81, 0xa6, 0x17, 0x0f, 0x93, 0x02, 0x32, 0xea, 0x7d, 0xfd,
0xa8, 0xb6, 0xba, 0x2d, 0x1a, 0x2a, 0x6c, 0x1b, 0xab, 0xb0, 0x3d, 0x5a, 0x13, 0x98, 0x26, 0x7a, 0xa4, 0x66, 0x37, 0xbc, 0xd8, 0x56, 0x26, 0x3e, 0x15, 0xdf, 0x9b, 0x7a, 0x0c, 0xe5, 0x58, 0xb7,
0x93, 0x92, 0x8f, 0x7d, 0xa8, 0x5d, 0x53, 0x3a, 0x64, 0xcb, 0x90, 0xa2, 0xc2, 0xd6, 0xed, 0xad, 0x45, 0x43, 0xe5, 0x75, 0x63, 0x95, 0xd7, 0x47, 0x6b, 0x0a, 0xd4, 0xc4, 0x68, 0x52, 0xfa, 0xb2,
0x6b, 0x4a, 0xbf, 0x58, 0x86, 0xd4, 0xfa, 0x12, 0x1e, 0xad, 0xef, 0x68, 0xe8, 0x2f, 0xf1, 0xbe, 0x0f, 0xb5, 0x6b, 0x4a, 0x87, 0x6c, 0x19, 0x52, 0x94, 0xe0, 0xba, 0xbd, 0x75, 0x4d, 0xe9, 0x17,
0x0a, 0x98, 0xe3, 0xcb, 0x0d, 0x15, 0x0d, 0xf2, 0x63, 0xa8, 0xa9, 0xc3, 0xc2, 0xb3, 0x69, 0x9c, 0xcb, 0x90, 0x5a, 0x5f, 0xc2, 0xa3, 0xf5, 0x15, 0x0d, 0xfd, 0x25, 0x1e, 0x68, 0x01, 0x73, 0x7c,
0xb7, 0x55, 0xac, 0x27, 0xd3, 0x93, 0x11, 0x16, 0x05, 0x72, 0x89, 0x0b, 0x50, 0x7d, 0x57, 0x8c, 0xb9, 0xa0, 0xa2, 0x41, 0x7e, 0x08, 0x35, 0xb5, 0x59, 0xb8, 0x37, 0x8d, 0xf3, 0xb6, 0x2a, 0x86,
0x4e, 0x57, 0x37, 0xa1, 0x96, 0xbe, 0x09, 0x9f, 0xc2, 0xf6, 0x2a, 0x9f, 0xc4, 0xd1, 0x73, 0xde, 0x64, 0x78, 0xe2, 0x61, 0x51, 0x20, 0x97, 0x38, 0x01, 0xd5, 0x77, 0xc5, 0xe8, 0x74, 0x75, 0x54,
0xe6, 0xca, 0x28, 0xee, 0x35, 0x21, 0xc3, 0x7a, 0x4a, 0x86, 0xad, 0x3f, 0x6b, 0xd0, 0x59, 0xe7, 0x6a, 0xe9, 0xa3, 0xf2, 0x29, 0x6c, 0xaf, 0x0a, 0x4e, 0x6c, 0x3d, 0xe7, 0x6d, 0xae, 0x8c, 0xe2,
0x51, 0x41, 0x71, 0x08, 0x75, 0x9e, 0x02, 0x0b, 0x7e, 0x49, 0x20, 0x5d, 0xcd, 0x5e, 0x19, 0xee, 0xe0, 0x13, 0x3a, 0xad, 0xa7, 0x74, 0xda, 0xfa, 0xa3, 0x06, 0x9d, 0x75, 0x1e, 0x95, 0x14, 0x87,
0x8c, 0x35, 0xf2, 0xb3, 0x94, 0xb7, 0x3a, 0x7a, 0x6b, 0x2a, 0x6f, 0xf3, 0x7e, 0xa5, 0xfc, 0xbe, 0x50, 0xe7, 0x25, 0xb0, 0xe0, 0xa7, 0x08, 0xd2, 0xd5, 0xec, 0x95, 0xe1, 0xce, 0x5c, 0x23, 0x3f,
0x58, 0x4b, 0x82, 0xe4, 0x28, 0x4b, 0x52, 0x8f, 0x87, 0x29, 0x1e, 0x4b, 0x05, 0x9d, 0xc2, 0x6f, 0x49, 0x45, 0xab, 0x63, 0xb4, 0xa6, 0x8a, 0x36, 0x1f, 0x57, 0x2a, 0xee, 0x8b, 0xb5, 0x22, 0x48,
0xeb, 0x33, 0x30, 0xd3, 0x67, 0xf2, 0x8b, 0x20, 0xfa, 0x2c, 0x98, 0x52, 0x85, 0x90, 0xc4, 0x84, 0xb6, 0xb2, 0xa4, 0xf4, 0x78, 0x9a, 0xe2, 0xb6, 0x54, 0x30, 0x28, 0xfc, 0xb6, 0x3e, 0x03, 0x33,
0x96, 0x8e, 0x89, 0x24, 0x94, 0x2b, 0xa9, 0x50, 0xb6, 0xfe, 0xaa, 0xc1, 0x5e, 0x01, 0x14, 0x1e, 0xbd, 0x27, 0x3f, 0x0b, 0xa2, 0xcf, 0x82, 0x29, 0x55, 0x08, 0x49, 0x4e, 0x68, 0xe9, 0x9c, 0x48,
0x45, 0x66, 0x07, 0x04, 0x5a, 0x7a, 0x07, 0x8e, 0xa1, 0x95, 0x0c, 0x10, 0x15, 0x85, 0x28, 0x5f, 0x52, 0xb9, 0x92, 0x4a, 0x65, 0xeb, 0xcf, 0x1a, 0xec, 0x15, 0x40, 0xe1, 0x56, 0x64, 0x56, 0x40,
0xb6, 0x95, 0xf5, 0x12, 0x2b, 0x0b, 0xae, 0x5d, 0x6a, 0x18, 0x8a, 0xad, 0x2e, 0xb5, 0x4b, 0x1a, 0xa0, 0xa5, 0x57, 0xe0, 0x18, 0x5a, 0x89, 0x83, 0xb8, 0x72, 0x88, 0xfb, 0xcd, 0xb6, 0xb2, 0x5e,
0x7f, 0xc5, 0x95, 0x36, 0x1d, 0x3b, 0xd5, 0x3b, 0x63, 0xe7, 0x2b, 0x38, 0x28, 0xdc, 0x80, 0x38, 0xe2, 0xd5, 0x83, 0x8b, 0x9b, 0x72, 0x43, 0x35, 0xd6, 0xa5, 0xb8, 0x49, 0xe3, 0x2f, 0xb8, 0x14,
0x0c, 0x66, 0x31, 0x25, 0x9f, 0xa4, 0xc0, 0x34, 0x04, 0xeb, 0x29, 0xb0, 0x12, 0x67, 0x53, 0xd8, 0xa7, 0x73, 0xa7, 0x7a, 0x67, 0xee, 0x7c, 0x05, 0x07, 0x85, 0x0b, 0x10, 0x87, 0xc1, 0x2c, 0xa6,
0x7f, 0xd7, 0xa0, 0xf3, 0x8a, 0x3a, 0xd1, 0x68, 0x72, 0x9b, 0x8a, 0x6c, 0x14, 0xa8, 0xc8, 0x46, 0xe4, 0x93, 0x14, 0x98, 0x86, 0x60, 0x3d, 0x05, 0x56, 0x12, 0x6c, 0x0a, 0xfb, 0xaf, 0x1a, 0x74,
0x89, 0x8a, 0x64, 0x36, 0xb2, 0x9a, 0x0b, 0x25, 0x0e, 0x12, 0x44, 0x4c, 0xea, 0x09, 0x7e, 0xab, 0x5e, 0x51, 0x27, 0x1a, 0x4d, 0x6e, 0x53, 0x91, 0x8d, 0x02, 0x15, 0xd9, 0x28, 0x51, 0x91, 0xcc,
0x1c, 0xde, 0x5a, 0xe5, 0x70, 0x4a, 0x3f, 0x6a, 0x6b, 0x05, 0xdd, 0x7a, 0x72, 0xd7, 0x33, 0xc9, 0x42, 0x56, 0x73, 0xa9, 0xc4, 0x41, 0x82, 0x88, 0x49, 0x3d, 0xc1, 0x6f, 0x55, 0xc3, 0x5b, 0xab,
0x6d, 0xfd, 0x4f, 0x83, 0x6d, 0xe5, 0xca, 0x2b, 0xac, 0x68, 0x0a, 0x84, 0x3b, 0x2d, 0xbc, 0x22, 0x1a, 0x4e, 0xe9, 0x47, 0x6d, 0xed, 0xc6, 0xb7, 0x5e, 0xdc, 0xf5, 0x4c, 0x71, 0x5b, 0xff, 0xd5,
0xb9, 0xd2, 0xc2, 0x9b, 0xa2, 0xd6, 0xb3, 0xb5, 0xa4, 0xa8, 0x98, 0xaa, 0xe9, 0x8a, 0x69, 0xbd, 0x60, 0x5b, 0x85, 0xf2, 0x0a, 0xaf, 0x3c, 0x05, 0xc2, 0x9d, 0x16, 0x5e, 0x51, 0x5c, 0x69, 0xe1,
0x9c, 0xd9, 0xf8, 0xbe, 0xe5, 0xcc, 0xe6, 0xb7, 0x2e, 0x67, 0xac, 0x00, 0x1e, 0x67, 0xcf, 0xb0, 0x4d, 0x51, 0xeb, 0xd9, 0xcb, 0xa6, 0xb8, 0x52, 0x55, 0xd3, 0x57, 0xaa, 0xf5, 0xfb, 0xce, 0xc6,
0x5c, 0xb7, 0xb8, 0x13, 0x21, 0x17, 0x58, 0x59, 0x7d, 0x63, 0x63, 0x2d, 0x22, 0xf5, 0x3b, 0x23, 0xff, 0x7b, 0xdf, 0xd9, 0xfc, 0xd6, 0xf7, 0x1d, 0x2b, 0x80, 0xc7, 0xd9, 0x3d, 0x2c, 0xd7, 0x2d,
0xf2, 0x23, 0xe8, 0x3c, 0x97, 0x65, 0xeb, 0x3a, 0x65, 0x1b, 0xf4, 0x79, 0xe4, 0x4b, 0x39, 0xe3, 0x1e, 0x44, 0xc8, 0x05, 0x56, 0x5e, 0xcf, 0xb1, 0xb1, 0x96, 0x91, 0xfa, 0x9d, 0x19, 0xf9, 0x11,
0x9f, 0xe7, 0xff, 0x6c, 0x40, 0x43, 0x8d, 0xb9, 0xf8, 0xfc, 0x8a, 0xfc, 0x71, 0xfd, 0xce, 0x92, 0x74, 0x9e, 0xcb, 0x7b, 0xed, 0x3a, 0x65, 0x1b, 0xf4, 0x79, 0xe4, 0x4b, 0x39, 0xe3, 0x9f, 0xe7,
0x51, 0x49, 0xac, 0x5b, 0x42, 0x56, 0x46, 0xa4, 0xf9, 0xf4, 0xd6, 0x31, 0x22, 0x1b, 0xac, 0xa3, 0x7f, 0x6f, 0x40, 0x43, 0xf9, 0x5c, 0x7c, 0x7e, 0x45, 0x7e, 0xb7, 0x7e, 0x66, 0xc9, 0xac, 0x24,
0x3f, 0xfd, 0xe3, 0xbf, 0x7f, 0xa9, 0xec, 0x91, 0xce, 0x20, 0xf3, 0x7e, 0x1a, 0x4c, 0x38, 0xcf, 0xd6, 0x2d, 0x29, 0x2b, 0x33, 0xd2, 0x7c, 0x7a, 0xab, 0x8f, 0xa8, 0x06, 0xeb, 0xe8, 0x0f, 0x7f,
0x5b, 0xd8, 0x29, 0xd2, 0x23, 0x92, 0x60, 0xdf, 0xa2, 0x56, 0xe6, 0x6e, 0xee, 0x50, 0x5e, 0xf0, 0xfb, 0xcf, 0x9f, 0x2a, 0x7b, 0xa4, 0x33, 0xc8, 0x3c, 0xb0, 0x06, 0x13, 0xce, 0xf3, 0x16, 0x76,
0xf7, 0x91, 0x75, 0x8c, 0x9c, 0x3d, 0xd3, 0xcc, 0x71, 0x26, 0xd7, 0xd9, 0xc7, 0xda, 0x29, 0x71, 0x8a, 0xf4, 0x88, 0x24, 0xd8, 0xb7, 0xa8, 0x95, 0xb9, 0x9b, 0xdb, 0x94, 0x17, 0xfc, 0x01, 0x65,
0xa1, 0xb5, 0xae, 0x95, 0xe4, 0xa8, 0x58, 0x43, 0xef, 0xe2, 0x3b, 0x40, 0xbe, 0x8e, 0xd5, 0xce, 0x1d, 0x23, 0x67, 0xcf, 0x34, 0x73, 0x9c, 0xc9, 0x71, 0xf6, 0xb1, 0x76, 0x4a, 0x5c, 0x68, 0xad,
0xf2, 0x71, 0x96, 0x2f, 0xa1, 0xf5, 0x1a, 0x23, 0x23, 0x61, 0xc9, 0x9d, 0xe4, 0x5d, 0xc0, 0x66, 0x6b, 0x25, 0x39, 0x2a, 0xd6, 0xd0, 0xbb, 0xf8, 0x0e, 0x90, 0xaf, 0x63, 0xb5, 0xb3, 0x7c, 0x9c,
0x21, 0xb0, 0x03, 0xad, 0xf5, 0x82, 0x6b, 0xb5, 0xfc, 0xc2, 0x42, 0xac, 0x94, 0xc5, 0x40, 0x16, 0xe5, 0x4b, 0x68, 0xbd, 0xc6, 0xcc, 0x48, 0x58, 0x72, 0x3b, 0x79, 0x17, 0xb0, 0x59, 0x08, 0xec,
0x72, 0x9a, 0x63, 0x21, 0xaf, 0xa1, 0x91, 0xaa, 0xbc, 0x48, 0x72, 0xc5, 0xe4, 0xcb, 0x31, 0x33, 0x40, 0x6b, 0xfd, 0xc2, 0xb5, 0x9a, 0x7e, 0xe1, 0x45, 0xac, 0x94, 0xc5, 0x40, 0x16, 0x72, 0x9a,
0xe7, 0x94, 0x82, 0x25, 0x79, 0x58, 0x17, 0x1e, 0xbf, 0xa4, 0xcc, 0xa6, 0x3e, 0xcf, 0x97, 0xa4, 0x63, 0x21, 0xaf, 0xa1, 0x91, 0xba, 0x79, 0x91, 0xe4, 0x88, 0xc9, 0x5f, 0xc7, 0xcc, 0x5c, 0x50,
0x20, 0x2b, 0xd8, 0x97, 0xfd, 0xa2, 0x08, 0xc3, 0xc8, 0xb6, 0xfa, 0x88, 0x6e, 0x12, 0xa3, 0xe0, 0x0a, 0x96, 0xe4, 0x61, 0x5d, 0x78, 0xfc, 0x92, 0x32, 0x9b, 0xfa, 0xbc, 0x5e, 0x92, 0x0b, 0x59,
0x8c, 0x11, 0x97, 0x5c, 0x43, 0x3b, 0x9b, 0x14, 0x05, 0x14, 0xab, 0x3d, 0x2b, 0x4a, 0x20, 0xeb, 0xc1, 0xba, 0xec, 0x17, 0x65, 0x18, 0x66, 0xb6, 0xd5, 0x47, 0x74, 0x93, 0x18, 0x05, 0x7b, 0x8c,
0x09, 0xd2, 0x1c, 0x90, 0xfd, 0x1c, 0x8d, 0x7a, 0x27, 0x12, 0x0a, 0xcd, 0xf4, 0xf2, 0xc8, 0x41, 0xb8, 0xe4, 0x1a, 0xda, 0xd9, 0xa2, 0x28, 0xa0, 0x58, 0xad, 0x59, 0x51, 0x01, 0x59, 0x4f, 0x90,
0xf1, 0xa2, 0xc5, 0x36, 0xdd, 0xe2, 0x51, 0x79, 0xa6, 0xf8, 0x5e, 0xcc, 0xc8, 0x14, 0x5a, 0xeb, 0xe6, 0x80, 0xec, 0xe7, 0x68, 0xd4, 0x43, 0x92, 0x50, 0x68, 0xa6, 0xa7, 0x47, 0x0e, 0x8a, 0x27,
0xa2, 0xb2, 0x3a, 0xee, 0xc2, 0x0b, 0xc3, 0x3c, 0x28, 0xeb, 0xe6, 0x64, 0x3d, 0x24, 0xdb, 0x27, 0x2d, 0x96, 0xe9, 0x96, 0x88, 0xca, 0x2b, 0xc5, 0xf7, 0x62, 0x46, 0xa6, 0xd0, 0x5a, 0x17, 0x95,
0x7b, 0x39, 0xb2, 0x18, 0x47, 0x13, 0x17, 0xda, 0xa9, 0xd4, 0x13, 0xca, 0xdd, 0xc9, 0xee, 0x1e, 0xd5, 0x76, 0x17, 0x1e, 0x18, 0xe6, 0x41, 0x59, 0x37, 0x27, 0xeb, 0x21, 0xd9, 0x3e, 0xd9, 0xcb,
0x9a, 0x4b, 0xe3, 0x4a, 0xee, 0x9d, 0xb5, 0x9b, 0xe7, 0xe0, 0xf3, 0x78, 0x0c, 0xff, 0x1a, 0xda, 0x91, 0xc5, 0xe8, 0x4d, 0x5c, 0x68, 0xa7, 0x4a, 0x4f, 0x28, 0x77, 0x27, 0xbb, 0x7a, 0x68, 0x2e,
0x2f, 0xef, 0xc9, 0x52, 0x6c, 0xb6, 0xba, 0x48, 0x62, 0x90, 0x12, 0x12, 0xf2, 0x9b, 0x9c, 0xc0, 0xcd, 0x2b, 0xb9, 0x76, 0xd6, 0x6e, 0x9e, 0x83, 0x8f, 0xe3, 0x39, 0xfc, 0x4b, 0x68, 0xbf, 0xbc,
0xe0, 0x9b, 0x85, 0x94, 0x2c, 0xba, 0xd4, 0x19, 0x0b, 0x79, 0x0e, 0x4b, 0x34, 0x45, 0x60, 0x2e, 0x27, 0x4b, 0xb1, 0xd9, 0xea, 0x22, 0x89, 0x41, 0x4a, 0x48, 0xc8, 0xaf, 0x72, 0x02, 0x83, 0x8f,
0xd7, 0xb8, 0x92, 0x17, 0x46, 0xa1, 0x98, 0x65, 0xdf, 0x1f, 0xa5, 0xc4, 0x3f, 0x40, 0xe2, 0xae, 0x1a, 0x52, 0x32, 0xe9, 0xd2, 0x60, 0x2c, 0xe4, 0x39, 0x2c, 0xd1, 0x14, 0x81, 0xb9, 0x5c, 0xe3,
0x99, 0x8f, 0x40, 0x75, 0x87, 0x7f, 0xac, 0x9d, 0x9e, 0xff, 0x5b, 0x07, 0x90, 0xcf, 0x29, 0xae, 0x4a, 0x5e, 0x18, 0x85, 0x62, 0x96, 0x7d, 0x7f, 0x94, 0x12, 0x7f, 0x0f, 0x89, 0xbb, 0x66, 0x3e,
0xea, 0x81, 0x50, 0xf5, 0xcc, 0x03, 0xeb, 0x3b, 0x87, 0xe6, 0x6d, 0xc9, 0x86, 0x0c, 0xe4, 0x0f, 0x03, 0xd5, 0x19, 0xfe, 0xb1, 0x76, 0x7a, 0xfe, 0x4f, 0x1d, 0x40, 0x3e, 0xa7, 0xb8, 0xaa, 0x07,
0xb0, 0x5b, 0xfc, 0xa8, 0x23, 0xc7, 0x0a, 0xf6, 0xd6, 0x47, 0x5f, 0xa9, 0xfb, 0x4f, 0x91, 0xfa, 0x42, 0xd5, 0x33, 0x0f, 0xac, 0xef, 0x9c, 0x9a, 0xb7, 0x15, 0x1b, 0x32, 0x90, 0xdf, 0xc2, 0x6e,
0xc8, 0x2c, 0xa5, 0xe6, 0x61, 0x14, 0xaa, 0xb7, 0x67, 0x96, 0xfc, 0x3b, 0x2a, 0xa2, 0xf4, 0xf7, 0xf1, 0xa3, 0x8e, 0x1c, 0x2b, 0xd8, 0x5b, 0x1f, 0x7d, 0xa5, 0xe1, 0x3f, 0x45, 0xea, 0x23, 0xb3,
0xb4, 0xdc, 0x5f, 0x1f, 0x76, 0x2e, 0x7d, 0xea, 0xe4, 0xbc, 0xfd, 0xb6, 0x61, 0x25, 0x4f, 0xf7, 0x94, 0x9a, 0xa7, 0x51, 0xa8, 0xde, 0x9e, 0x59, 0xf2, 0xef, 0xa8, 0x88, 0x32, 0xde, 0xd3, 0xf2,
0xf4, 0xb0, 0x8c, 0x69, 0xe0, 0xf8, 0xfe, 0xa7, 0x3f, 0xfd, 0xdb, 0xfb, 0xae, 0xf6, 0xee, 0x7d, 0x78, 0x7d, 0xd8, 0xb9, 0xf4, 0xa9, 0x93, 0x8b, 0xf6, 0xdb, 0xa6, 0x95, 0xdc, 0xdd, 0xd3, 0xc3,
0x57, 0xfb, 0xe6, 0x7d, 0x57, 0xfb, 0xfa, 0x43, 0xf7, 0xc1, 0xbb, 0x0f, 0xdd, 0x07, 0xff, 0xfa, 0x32, 0xa6, 0x81, 0xe3, 0xfb, 0x9f, 0xfe, 0xf8, 0x2f, 0xef, 0xbb, 0xda, 0xbb, 0xf7, 0x5d, 0xed,
0xd0, 0x7d, 0x00, 0xf2, 0xf7, 0xe3, 0xe7, 0xda, 0x57, 0x8f, 0xa6, 0x41, 0x44, 0xdd, 0x60, 0x24, 0xdf, 0xef, 0xbb, 0xda, 0x37, 0x1f, 0xba, 0x0f, 0xde, 0x7d, 0xe8, 0x3e, 0xf8, 0xc7, 0x87, 0xee,
0x81, 0x3e, 0xb9, 0x79, 0xf6, 0x66, 0x13, 0xc9, 0x7e, 0xf2, 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0x03, 0x90, 0xff, 0x27, 0x3f, 0xd7, 0xbe, 0x7a, 0x34, 0x0d, 0x22, 0xea, 0x06, 0x23, 0x09, 0xf4,
0xb8, 0xd7, 0x8d, 0xf1, 0xbb, 0x14, 0x00, 0x00, 0xc9, 0xcd, 0xb3, 0x37, 0x9b, 0x48, 0xf6, 0xa3, 0xff, 0x05, 0x00, 0x00, 0xff, 0xff, 0x7a, 0xf8,
0xb0, 0xc9, 0xdc, 0x14, 0x00, 0x00,
} }
// Reference imports to suppress errors if they are not otherwise used. // Reference imports to suppress errors if they are not otherwise used.
@ -2277,6 +2286,15 @@ func (m *Document) MarshalToSizedBuffer(dAtA []byte) (int, error) {
_ = i _ = i
var l int var l int
_ = l _ = l
if len(m.PreviewExt) > 0 {
i -= len(m.PreviewExt)
copy(dAtA[i:], m.PreviewExt)
i = encodeVarintDocument(dAtA, i, uint64(len(m.PreviewExt)))
i--
dAtA[i] = 0x2
i--
dAtA[i] = 0x92
}
if len(m.ConvertError) > 0 { if len(m.ConvertError) > 0 {
i -= len(m.ConvertError) i -= len(m.ConvertError)
copy(dAtA[i:], m.ConvertError) copy(dAtA[i:], m.ConvertError)
@ -3578,6 +3596,10 @@ func (m *Document) Size() (n int) {
if l > 0 { if l > 0 {
n += 2 + l + sovDocument(uint64(l)) n += 2 + l + sovDocument(uint64(l))
} }
l = len(m.PreviewExt)
if l > 0 {
n += 2 + l + sovDocument(uint64(l))
}
return n return n
} }
@ -4907,6 +4929,38 @@ func (m *Document) Unmarshal(dAtA []byte) error {
} }
m.ConvertError = string(dAtA[iNdEx:postIndex]) m.ConvertError = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex iNdEx = postIndex
case 34:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field PreviewExt", wireType)
}
var stringLen uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowDocument
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
stringLen |= uint64(b&0x7F) << shift
if b < 0x80 {
break
}
}
intStringLen := int(stringLen)
if intStringLen < 0 {
return ErrInvalidLengthDocument
}
postIndex := iNdEx + intStringLen
if postIndex < 0 {
return ErrInvalidLengthDocument
}
if postIndex > l {
return io.ErrUnexpectedEOF
}
m.PreviewExt = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
default: default:
iNdEx = preIndex iNdEx = preIndex
skippy, err := skipDocument(dAtA[iNdEx:]) skippy, err := skipDocument(dAtA[iNdEx:])

@ -53,6 +53,7 @@ message Document {
User user = 31; // User user = 31; //
bool enable_gzip = 32; // gzip bool enable_gzip = 32; // gzip
string convert_error = 33; // string convert_error = 33; //
string preview_ext = 34; //
} }
// //

@ -247,11 +247,16 @@ func (s *AttachmentAPIService) ViewDocumentPages(ctx *gin.Context) {
return return
} }
page := strings.TrimLeft(ctx.Param("page"), "./") page := strings.TrimLeft(ctx.Param("page"), "./")
if strings.HasSuffix(page, ".gzip.svg") { if strings.HasSuffix(page, ".svg") {
ctx.Header("Content-Encoding", "gzip") if strings.HasSuffix(page, ".gzip.svg") {
ctx.Header("Content-Encoding", "gzip")
}
ctx.Header("Content-Type", "image/svg+xml")
} }
ctx.Header("Content-Type", "image/svg+xml")
ctx.File(fmt.Sprintf("documents/%s/%s/%s", strings.Join(strings.Split(hash, "")[:5], "/"), hash, page)) file := fmt.Sprintf("documents/%s/%s/%s", strings.Join(strings.Split(hash, "")[:5], "/"), hash, page)
s.logger.Debug("ViewDocumentPages", zap.String("hash", hash), zap.String("page", page), zap.String("file", file))
ctx.File(file)
} }
func (s *AttachmentAPIService) ViewDocumentCover(ctx *gin.Context) { func (s *AttachmentAPIService) ViewDocumentCover(ctx *gin.Context) {

@ -267,6 +267,7 @@ const (
ConfigConverterEnableSVGO = "enable_svgo" // 是否启用 SVGO ConfigConverterEnableSVGO = "enable_svgo" // 是否启用 SVGO
ConfigConverterEnableGZIP = "enable_gzip" // 是否启用 GZIP ConfigConverterEnableGZIP = "enable_gzip" // 是否启用 GZIP
ConfigConverterEnableConvertRepeatedDocument = "enable_convert_repeated_document" // 是否转换已转换的重复文档 ConfigConverterEnableConvertRepeatedDocument = "enable_convert_repeated_document" // 是否转换已转换的重复文档
ConfigConverterExtension = "extension" // 转换后的文件扩展名,即以什么方式来浏览文档,支持 jpg、png、svg默认为svgpdf和html暂不支持
) )
const ( const (
@ -301,6 +302,7 @@ type ConfigConverter struct {
EnableGZIP bool `json:"enable_gzip"` // 是否对svg启用GZIP压缩。转换效率会有所下降。相对直接的svg文件可以节省3/4的存储空间 EnableGZIP bool `json:"enable_gzip"` // 是否对svg启用GZIP压缩。转换效率会有所下降。相对直接的svg文件可以节省3/4的存储空间
EnableConvertRepeatedDocument bool `json:"enable_convert_repeated_document"` // 是否转换已转换的重复文档。如果开启,会导致转换效率下降,但是可以节省大量的存储空间 EnableConvertRepeatedDocument bool `json:"enable_convert_repeated_document"` // 是否转换已转换的重复文档。如果开启,会导致转换效率下降,但是可以节省大量的存储空间
// GZIP和svgo都开启转换效率会有所下降可以综合节省约85%的存储空间 // GZIP和svgo都开启转换效率会有所下降可以综合节省约85%的存储空间
Extension string `json:"extension"` // 转换后的文件扩展名,即以什么方式来浏览文档,支持 jpg、png、svg默认为svgpdf和html暂不支持
} }
const ( const (
@ -696,11 +698,12 @@ func (m *DBModel) initConfig() (err error) {
{Category: ConfigCategoryFooter, Name: ConfigFooterFeedback, Label: "意见反馈", Value: "/article/feedback", Placeholder: "请输入意见反馈的链接地址,留空表示不显示", InputType: InputTypeText, Sort: 28, Options: ""}, {Category: ConfigCategoryFooter, Name: ConfigFooterFeedback, Label: "意见反馈", Value: "/article/feedback", Placeholder: "请输入意见反馈的链接地址,留空表示不显示", InputType: InputTypeText, Sort: 28, Options: ""},
// 转换配置项 // 转换配置项
{Category: ConfigCategoryConverter, Name: ConfigConverterMaxPreview, Label: "最大预览页数", Value: "12", Placeholder: "文档允许的最大预览页数0表示不限制", InputType: InputTypeNumber, Sort: 15, Options: ""}, {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: 16, Options: ""}, {Category: ConfigCategoryConverter, Name: ConfigConverterTimeout, Label: "转换超时(分钟)", Value: "30", Placeholder: "文档转换超时时间默认为30分钟", InputType: InputTypeNumber, Sort: 10, Options: ""},
{Category: ConfigCategoryConverter, Name: ConfigConverterEnableGZIP, Label: "是否启用GZIP压缩", Value: "true", Placeholder: "是否对文档SVG预览文件启用GZIP压缩启用后转换效率会【稍微】下降但相对直接的SVG文件减少75%的存储空间", InputType: InputTypeSwitch, Sort: 17, Options: ""}, {Category: ConfigCategoryConverter, Name: ConfigConverterExtension, Label: "预览格式", Value: "svg", Placeholder: "将文档转为特定格式以供预览", InputType: InputTypeSelect, Sort: 20, Options: "svg:SVG\njpg:JPEG\npng:PNG"},
{Category: ConfigCategoryConverter, Name: ConfigConverterEnableSVGO, Label: "是否启用SVGO", Value: "false", Placeholder: "是否对文档SVG预览文件启用SVGO压缩启用后转换效率会【明显】下降但相对直接的SVG文件减少50%左右的存储空间", InputType: InputTypeSwitch, Sort: 18, Options: ""}, {Category: ConfigCategoryConverter, Name: ConfigConverterEnableGZIP, Label: "是否启用GZIP压缩", Value: "true", Placeholder: "是否对文档SVG预览文件启用GZIP压缩启用后转换效率会【稍微】下降但相对直接的SVG文件减少75%的存储空间", InputType: InputTypeSwitch, Sort: 30, Options: ""},
{Category: ConfigCategoryConverter, Name: ConfigConverterEnableConvertRepeatedDocument, Label: "是否转换重复文档", Value: "false", Placeholder: "对于已转换过的文档,再次被上传时是否再转换一次", InputType: InputTypeSwitch, Sort: 20, 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: ""},
// 下载配置 // 下载配置
{Category: ConfigCategoryDownload, Name: ConfigDownloadEnableGuestDownload, Label: "是否允许游客下载", Value: "false", Placeholder: "启用之后,未登录用户可以下载免费文档", InputType: InputTypeSwitch, Sort: 10, Options: ""}, {Category: ConfigCategoryDownload, Name: ConfigDownloadEnableGuestDownload, Label: "是否允许游客下载", Value: "false", Placeholder: "启用之后,未登录用户可以下载免费文档", InputType: InputTypeSwitch, Sort: 10, Options: ""},

@ -63,6 +63,7 @@ type Document struct {
DeletedUserId int64 `form:"deleted_user_id" json:"deleted_user_id,omitempty" gorm:"column:deleted_user_id;type:bigint(20);size:20;default:0;comment:删除用户ID;"` DeletedUserId int64 `form:"deleted_user_id" json:"deleted_user_id,omitempty" gorm:"column:deleted_user_id;type:bigint(20);size:20;default:0;comment:删除用户ID;"`
EnableGZIP bool `form:"enable_gzip" json:"enable_gzip,omitempty" gorm:"column:enable_gzip;type:tinyint(1);size:1;default:0;comment:是否启用GZIP压缩;"` EnableGZIP bool `form:"enable_gzip" json:"enable_gzip,omitempty" gorm:"column:enable_gzip;type:tinyint(1);size:1;default:0;comment:是否启用GZIP压缩;"`
RecommendAt *time.Time `form:"recommend_at" json:"recommend_at,omitempty" gorm:"column:recommend_at;type:datetime;comment:推荐时间;index:idx_recommend_at;"` RecommendAt *time.Time `form:"recommend_at" json:"recommend_at,omitempty" gorm:"column:recommend_at;type:datetime;comment:推荐时间;index:idx_recommend_at;"`
PreviewExt string `form:"preview_ext" json:"preview_ext,omitempty" gorm:"column:preview_ext;type:varchar(16);size:16;default:.svg;comment:预览图扩展名;"`
} }
func (Document) TableName() string { func (Document) TableName() string {
@ -701,18 +702,23 @@ func (m *DBModel) ConvertDocument() (err error) {
toPage = document.Pages toPage = document.Pages
} }
pages, err = cvt.ConvertPDFToSVG(dstPDF, 1, toPage, cfg.EnableSVGO, cfg.EnableGZIP) pages, err = cvt.ConvertPDFToPages(dstPDF, 1, toPage, &converter.OptionConvertPages{
EnableSVGO: cfg.EnableSVGO,
EnableGZIP: cfg.EnableGZIP,
Extension: cfg.Extension,
})
if err != nil { if err != nil {
m.SetDocumentStatus(document.Id, DocumentStatusFailed) m.SetDocumentStatus(document.Id, DocumentStatusFailed)
m.logger.Error("ConvertDocument", zap.Error(err)) m.logger.Error("ConvertDocument", zap.Error(err))
return return
} }
ext := "." + cfg.Extension
if ext == ".svg" && cfg.EnableGZIP {
ext = ".gzip.svg"
}
for _, page := range pages { for _, page := range pages {
ext := ".svg"
if strings.HasSuffix(page.PagePath, ".gzip.svg") {
ext = ".gzip.svg"
}
dst := fmt.Sprintf(baseDir+"/%d%s", page.PageNum, ext) dst := fmt.Sprintf(baseDir+"/%d%s", page.PageNum, ext)
m.logger.Debug("ConvertDocument CopyFile", zap.String("src", page.PagePath), zap.String("dst", dst)) m.logger.Debug("ConvertDocument CopyFile", zap.String("src", page.PagePath), zap.String("dst", dst))
errCopy := util.CopyFile(page.PagePath, dst) errCopy := util.CopyFile(page.PagePath, dst)
@ -734,7 +740,8 @@ func (m *DBModel) ConvertDocument() (err error) {
document.Status = DocumentStatusConverted document.Status = DocumentStatusConverted
document.EnableGZIP = cfg.EnableGZIP document.EnableGZIP = cfg.EnableGZIP
err = m.db.Select("description", "cover", "width", "height", "preview", "pages", "status", "enable_gzip").Where("id = ?", document.Id).Updates(document).Error document.PreviewExt = ext
err = m.db.Select("description", "cover", "width", "height", "preview", "pages", "status", "enable_gzip", "preview_ext").Where("id = ?", document.Id).Updates(document).Error
if err != nil { if err != nil {
m.SetDocumentStatus(document.Id, DocumentStatusFailed) m.SetDocumentStatus(document.Id, DocumentStatusFailed)
m.logger.Error("ConvertDocument", zap.Error(err)) m.logger.Error("ConvertDocument", zap.Error(err))

@ -26,6 +26,7 @@ const (
mutool = "mutool" mutool = "mutool"
inkscape = "inkscape" inkscape = "inkscape"
dirDteFmt = "2006/01/02" dirDteFmt = "2006/01/02"
imageMagick = "convert"
) )
type ConvertCallback func(page int, pagePath string, err error) type ConvertCallback func(page int, pagePath string, err error)
@ -167,6 +168,54 @@ func (c *Converter) ConvertPDFToSVG(src string, fromPage, toPage int, enableSVGO
return return
} }
type OptionConvertPages struct {
EnableSVGO bool
EnableGZIP bool
Extension string
}
// ConvertPDFToPages 将PDF转为预览页
func (c *Converter) ConvertPDFToPages(src string, fromPage, toPage int, option *OptionConvertPages) (pages []Page, err error) {
switch strings.TrimLeft(option.Extension, ".") {
case "png":
return c.ConvertPDFToPNG(src, fromPage, toPage)
case "jpg":
// 见将pdf转为png然后png再转为jpg
pages, err = c.ConvertPDFToPNG(src, fromPage, toPage)
// 通过imagemagick将图片转为jpg
for idx, page := range pages {
if dst, errConvert := c.ConvertPNGToJPG(page.PagePath); errConvert == nil {
os.Remove(page.PagePath)
page.PagePath = dst
pages[idx] = page
}
}
return pages, err
default: // 默认转为svg
return c.ConvertPDFToSVG(src, fromPage, toPage, option.EnableSVGO, option.EnableGZIP)
}
}
// 将png转为jpg
func (c *Converter) ConvertPNGToJPG(src string) (dst string, err error) {
dst = strings.TrimSuffix(src, filepath.Ext(src)) + ".jpg"
// 通过imagemagick将图片转为jpg
args := []string{
src,
dst,
}
c.logger.Debug("convert png to jpg", zap.String("cmd", imageMagick), zap.Strings("args", args))
_, err = command.ExecCommand(imageMagick, args, c.timeout)
if err != nil {
c.logger.Error("convert png to jpg", 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")
}
// ConvertPDFToPNG 将PDF转为PNG // ConvertPDFToPNG 将PDF转为PNG
func (c *Converter) ConvertPDFToPNG(src string, fromPage, toPage int) (pages []Page, err error) { func (c *Converter) ConvertPDFToPNG(src string, fromPage, toPage int) (pages []Page, err error) {
return c.convertPDFToPage(src, fromPage, toPage, ".png") return c.convertPDFToPage(src, fromPage, toPage, ".png")

@ -416,7 +416,7 @@ import {
getDocumentScore, getDocumentScore,
} from '~/api/document' } from '~/api/document'
import { getFavorite, createFavorite, deleteFavorite } from '~/api/favorite' import { getFavorite, createFavorite, deleteFavorite } from '~/api/favorite'
import { formatDatetime, formatBytes, getIcon } from '~/utils/utils' import { formatDatetime, formatBytes, getIcon, genPrevPage } from '~/utils/utils'
import { documentStatusOptions } from '~/utils/enum' import { documentStatusOptions } from '~/utils/enum'
import QRCode from 'qrcodejs2' // 引入qrcode import QRCode from 'qrcodejs2' // 引入qrcode
import FormComment from '~/components/FormComment.vue' import FormComment from '~/components/FormComment.vue'
@ -555,9 +555,7 @@ export default {
// 限定预览页数,拼装图片链接 // 限定预览页数,拼装图片链接
const pages = [] const pages = []
for (let i = 1; i <= preview; i++) { for (let i = 1; i <= preview; i++) {
const src = doc.enable_gzip const src= genPrevPage(doc.attachment.hash, i, doc.preview_ext, doc.enable_gzip)
? `/view/page/${doc.attachment.hash}/${i}.gzip.svg`
: `/view/page/${doc.attachment.hash}/${i}.svg`
pages.push({ pages.push({
lazySrc: src, lazySrc: src,
src: src, src: src,
@ -879,9 +877,7 @@ export default {
if (document.fullscreenElement) startLazyLoad = 5 if (document.fullscreenElement) startLazyLoad = 5
for (let i = this.pages.length + 1; i <= end; i++) { for (let i = this.pages.length + 1; i <= end; i++) {
j += 1 j += 1
const src = this.document.enable_gzip const src= genPrevPage(this.document.attachment.hash, i, this.document.preview_ext, this.document.enable_gzip)
? `/view/page/${this.document.attachment.hash}/${i}.gzip.svg`
: `/view/page/${this.document.attachment.hash}/${i}.svg`
this.pages.push({ this.pages.push({
// 前两页,直接不要懒加载,如果非全屏 // 前两页,直接不要懒加载,如果非全屏
src: j <= startLazyLoad ? src : this.loadingImage, src: j <= startLazyLoad ? src : this.loadingImage,

@ -279,3 +279,13 @@ export function genTimeDuration(duration) {
} }
return [start.Format(fmt), new Date().Format(fmt)] return [start.Format(fmt), new Date().Format(fmt)]
} }
export function genPrevPage(hash, pageNO, ext, enableGZIP){
if (!ext){
ext=".svg"
}
if (ext===".svg" && enableGZIP){
ext=".gzip.svg"
}
return `/view/page/${hash}/${pageNO}${ext}`
}
Loading…
Cancel
Save