From 580592bbf8450d55800a98eed7d7f9b4c8bed9ab Mon Sep 17 00:00:00 2001 From: xiaoqidun Date: Tue, 20 Oct 2026 23:19:25 +0800 Subject: [PATCH] =?UTF-8?q?fix(=E8=BD=AC=E6=8D=A2=E8=83=BD=E5=8A=9B):=20?= =?UTF-8?q?=E4=BF=AE=E5=A4=8DPDF=E6=97=A5=E6=9C=9F=E8=A7=A3=E6=9E=90?= =?UTF-8?q?=E5=85=BC=E5=AE=B9=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- internal/codec/pdf/metadata.go | 17 ++++++++++++----- ofdgo_pdf_structure.go | 2 +- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/internal/codec/pdf/metadata.go b/internal/codec/pdf/metadata.go index 2d44495..4299054 100644 --- a/internal/codec/pdf/metadata.go +++ b/internal/codec/pdf/metadata.go @@ -22,7 +22,7 @@ import ( "github.com/xiaoqidun/pdfgo" ) -// NormalizeDate 校验PDF日期,非严格模式补齐完整时区偏移的分隔符 +// NormalizeDate 校验PDF日期,非严格模式修正单层外括号及完整时区偏移的分隔符 // 入参: text PDF日期字符串, strict 是否严格校验 // 返回: string 标准日期字符串, error 日期错误 func NormalizeDate(text string, strict bool) (string, error) { @@ -33,16 +33,23 @@ func NormalizeDate(text string, strict bool) (string, error) { if err == nil || strict { return text, err } - offset := len(text) - 5 - if offset < 6 || text[offset] != '+' && text[offset] != '-' { + normalized := text + if strings.HasPrefix(normalized, "(") && strings.HasSuffix(normalized, ")") { + normalized = normalized[1 : len(normalized)-1] + if _, parseErr := pdfgo.ParseDate(normalized); parseErr == nil { + return normalized, nil + } + } + offset := len(normalized) - 5 + if offset < 6 || normalized[offset] != '+' && normalized[offset] != '-' { return text, err } - for _, digit := range text[offset+1:] { + for _, digit := range normalized[offset+1:] { if digit < '0' || digit > '9' { return text, err } } - normalized := text[:offset+3] + "'" + text[offset+3:] + "'" + normalized = normalized[:offset+3] + "'" + normalized[offset+3:] + "'" if _, parseErr := pdfgo.ParseDate(normalized); parseErr != nil { return text, err } diff --git a/ofdgo_pdf_structure.go b/ofdgo_pdf_structure.go index 4142f11..b2aa3f8 100644 --- a/ofdgo_pdf_structure.go +++ b/ofdgo_pdf_structure.go @@ -927,7 +927,7 @@ func (p *pdfImporter) documentMetadata(ctx context.Context, strict bool) error { return fmt.Errorf("PDF metadata %s: %w", field.name, err) } if text != *field.text { - p.report.Warnings = append(p.report.Warnings, pdfgo.Diagnostic{Message: "PDF metadata " + field.name + ": time zone separators normalized"}) + p.report.Warnings = append(p.report.Warnings, pdfgo.Diagnostic{Message: "PDF metadata " + field.name + ": date normalized"}) *field.text = text } }