mirror of
https://github.com/xiaoqidun/ofdgo.git
synced 2026-10-30 01:27:26 +08:00
1 parent
627a06cda3
commit
a2de650b52
31 files changed
+2166
-249
No files matched your search
@@ -147,7 +147,21 @@ func (CanvasBackend) RenderPDF(r *Renderer, pages []RenderDocumentPage, writer i
|
||||
if docInfo, err := r.Reader.DocInfo(); err == nil {
|
||||
info = *docInfo
|
||||
}
|
||||
p.SetInfo(info.Title, info.Subject, "", info.Author, ofdCreator)
|
||||
renderer.information = make(pdfgo.Dictionary)
|
||||
for _, field := range []struct {
|
||||
key pdfgo.Name
|
||||
value string
|
||||
}{{"Title", info.Title}, {"Subject", info.Subject}, {"Author", info.Author}, {"Creator", ofdCreator}} {
|
||||
if field.value == "" {
|
||||
continue
|
||||
}
|
||||
encoded, err := pdfgo.EncodeTextString(field.value)
|
||||
if err != nil {
|
||||
buf.Truncate(start)
|
||||
return err
|
||||
}
|
||||
renderer.information[field.key] = encoded
|
||||
}
|
||||
for i, page := range pages {
|
||||
content, err := page.ReadContent(ctx, r.Reader)
|
||||
if err != nil {
|
||||
@@ -201,7 +215,7 @@ func (CanvasBackend) RenderPDF(r *Renderer, pages []RenderDocumentPage, writer i
|
||||
buf.Truncate(start)
|
||||
return err
|
||||
}
|
||||
data := replacePDFProducer(buf.Bytes()[start:])
|
||||
data := buf.Bytes()[start:]
|
||||
options := pdfgo.OptimizeOptions{Compression: r.Compression}
|
||||
if r.Compression.Mode != CompressionUnchanged && progress != nil {
|
||||
options.OnProgress = func(_ string, _, _ int) error {
|
||||
@@ -209,13 +223,6 @@ func (CanvasBackend) RenderPDF(r *Renderer, pages []RenderDocumentPage, writer i
|
||||
}
|
||||
}
|
||||
if direct {
|
||||
if !renderer.exactImages && !renderer.exactText && !navigation.nativeWrite {
|
||||
if err := r.outputContext().Err(); err != nil {
|
||||
buf.Truncate(start)
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
var result bytes.Buffer
|
||||
err := renderer.writePDF(r.outputContext(), data, &result, options)
|
||||
buf.Truncate(start)
|
||||
@@ -227,17 +234,3 @@ func (CanvasBackend) RenderPDF(r *Renderer, pages []RenderDocumentPage, writer i
|
||||
}
|
||||
return renderer.writePDF(r.outputContext(), data, writer, options)
|
||||
}
|
||||
|
||||
// replacePDFProducer 替换PDF的Producer属性
|
||||
// 入参: data PDF字节数据
|
||||
// 返回: []byte 替换后的PDF字节数据
|
||||
func replacePDFProducer(data []byte) []byte {
|
||||
old := []byte("/Producer(tdewolff/canvas)")
|
||||
idx := bytes.LastIndex(data, old)
|
||||
if idx < 0 {
|
||||
return data
|
||||
}
|
||||
dst := []byte("/Producer(" + ofdCreator + ")")
|
||||
copy(data[idx:idx+len(old)], dst)
|
||||
return data
|
||||
}
|
||||
Reference in new issue
Block a user