Documentation
¶
Overview ¶
Package converter 提供 OFD 文档到 PDF、HTML、文本、Markdown 和图像等格式的转换能力。
Index ¶
- Variables
- func Convert(ctx context.Context, from, to string, input any, output io.Writer, ...) error
- func DOCX(ctx context.Context, input any, output io.Writer, opts ...Option) error
- func DOCXDocuments(ctx context.Context, documents []*render.Document, output io.Writer, ...) error
- func Encode(ctx context.Context, format string, input any, output io.Writer, ...) error
- func EncodeDocuments(ctx context.Context, format string, documents []*render.Document, ...) error
- func HTML(ctx context.Context, input any, output io.Writer, opts ...Option) error
- func HTMLDocuments(ctx context.Context, documents []*render.Document, output io.Writer, ...) error
- func Image(ctx context.Context, input interface{}, opts ...Option) error
- func ImageDocument(ctx context.Context, doc *render.Document, opts ...Option) error
- func ImageDocuments(ctx context.Context, documents []*render.Document, opts ...Option) error
- func ImportFormats() []string
- func IsImageFormat(format string) bool
- func Markdown(ctx context.Context, input any, output io.Writer, opts ...Option) error
- func MarkdownDocument(ctx context.Context, doc *parser.Document, output io.Writer, opts ...Option) error
- func MarkdownDocuments(ctx context.Context, documents []*parser.Document, output io.Writer, ...) error
- func PDF(ctx context.Context, input any, output io.Writer, opts ...Option) error
- func PDFDocuments(ctx context.Context, documents []*render.Document, output io.Writer, ...) error
- func Register(enc Encoder)
- func RegisterImporter(imp Importer)
- func RegisterTransformer(transformer Transformer)
- func Text(ctx context.Context, input any, output io.Writer, opts ...Option) error
- func TextDocument(ctx context.Context, doc *parser.Document, output io.Writer, opts ...Option) error
- func TextDocuments(ctx context.Context, documents []*parser.Document, output io.Writer, ...) error
- type Converter
- func (c *Converter) AllowRemoteResources() bool
- func (c *Converter) ChromePath() string
- func (c *Converter) Context() context.Context
- func (c *Converter) DOCXAnnotations() bool
- func (c *Converter) DOCXImages() bool
- func (c *Converter) DOCXTables() bool
- func (c *Converter) ImageOCREnabled() bool
- func (c *Converter) ImageOCRLanguage() string
- func (c *Converter) InputPassword() string
- func (c *Converter) MarkdownTables() bool
- func (c *Converter) NoSandbox() bool
- func (c *Converter) OfficeTimeout() time.Duration
- func (c *Converter) Paper() Paper
- func (c *Converter) PrintBackground() bool
- func (c *Converter) SofficePath() string
- func (c *Converter) TempDir() string
- type Encoder
- type Format
- type Importer
- type Kind
- type Option
- func BgColor(bg color.Color) Option
- func DPI(dpi float64) Option
- func EPS() Option
- func HTMLJPG() Option
- func HTMLPNG() Option
- func HTMLSVG() Option
- func ImageOCR(enabled bool) Option
- func ImageOCRLanguage(language string) Option
- func ImageWriter(f func(page int, img image.Image) error) Option
- func JPG() Option
- func PDFParallel(enabled bool) Option
- func PNG() Option
- func Page(page int) Option
- func PageCache(capacity int, maxBytes int64) Option
- func RasterBackend(name string) Option
- func SVG() Option
- func TeX() Option
- func Thumbnail(s int) Option
- func WithAllowRemoteResources(enabled bool) Option
- func WithChrome(path string) Option
- func WithChromeNoSandbox(enabled bool) Option
- func WithDOCXAnnotations(enabled bool) Option
- func WithDOCXImages(enabled bool) Option
- func WithDOCXTables(enabled bool) Option
- func WithFormat(format string) Option
- func WithHTMLTextLayer(enabled bool) Option
- func WithLandscape(landscape bool) Option
- func WithMarkdownTables(enabled bool) Option
- func WithOfficeTimeout(timeout time.Duration) Option
- func WithPaperDimensions(width, height float64) Option
- func WithPaperSize(name string) Option
- func WithPassword(password string) Option
- func WithPrintBackground(enabled bool) Option
- func WithSoffice(path string) Option
- func WithTempDir(dir string) Option
- func Writer(f func(page int) (io.WriteCloser, error)) Option
- type Paper
- type Transformer
Examples ¶
Constants ¶
This section is empty.
Variables ¶
var ErrInvalidPage = errors.New("页码无效")
ErrInvalidPage 表示请求的全局页码无效。
var NamedPaperSizes = map[string][2]float64{
"A4": {210, 297},
"A3": {297, 420},
"A5": {148, 210},
"Letter": {215.9, 279.4},
"Legal": {215.9, 355.6},
"B5": {176, 250},
"16开": {185, 260},
"16K": {185, 260},
}
NamedPaperSizes 是支持的命名纸张尺寸(毫米)。
Functions ¶
func Convert ¶ added in v0.1.2
func Convert(ctx context.Context, from, to string, input any, output io.Writer, opts ...Option) error
Convert 在输入格式 from 与输出格式 to 之间转换。from 为空时按文件扩展名或 内容识别。to 为 "ofd" 时使用导入器(X→OFD);from 为 "ofd" 时使用导出器 (OFD→X);两者都不是时先导入为 OFD 再导出。
Example ¶
package main
import (
"bytes"
"context"
"fmt"
"github.com/zc310/ofd/pkg/converter"
_ "github.com/zc310/ofd/pkg/converter/import/markdown"
_ "github.com/zc310/ofd/pkg/converter/import/pdf"
)
func main() {
// 转换入口的第一个参数是取消信号;命令行工具通常用 context.Background(),
// 长任务应传入带超时的 context。
ctx := context.Background()
var output bytes.Buffer
err := converter.Convert(ctx, "ofd", "pdf", "../../test/testdata/helloworld.ofd", &output)
fmt.Println(err == nil && bytes.HasPrefix(output.Bytes(), []byte("%PDF-")))
}
Output: true
Example (MarkdownToOFD) ¶
package main
import (
"bytes"
"context"
"fmt"
"github.com/zc310/ofd/pkg/converter"
_ "github.com/zc310/ofd/pkg/converter/import/markdown"
_ "github.com/zc310/ofd/pkg/converter/import/pdf"
)
func main() {
// 转换入口的第一个参数是取消信号;命令行工具通常用 context.Background(),
// 长任务应传入带超时的 context。
ctx := context.Background()
var output bytes.Buffer
err := converter.Convert(ctx, "md", "ofd", "../../test/testdata/markdown/sample.md", &output)
fmt.Println(err == nil && bytes.HasPrefix(output.Bytes(), []byte("PK")))
}
Output: true
Example (PdfToOFD) ¶
package main
import (
"bytes"
"context"
"fmt"
"github.com/zc310/ofd/pkg/converter"
_ "github.com/zc310/ofd/pkg/converter/import/markdown"
_ "github.com/zc310/ofd/pkg/converter/import/pdf"
)
func main() {
// 转换入口的第一个参数是取消信号;命令行工具通常用 context.Background(),
// 长任务应传入带超时的 context。
ctx := context.Background()
var output bytes.Buffer
err := converter.Convert(ctx, "pdf", "ofd", "../../test/testdata/pdf/sample0.pdf", &output)
fmt.Println(err == nil && bytes.HasPrefix(output.Bytes(), []byte("PK")))
}
Output: true
func DOCX ¶ added in v0.1.4
DOCX 将 input 中的 OFD 文档转换为单个 WordprocessingML 文档。
输出是流式版面:OFD 的绝对坐标被转换成 Word 段落、标题、列表、表格与内嵌 图片,文字可直接编辑与重排,但换字体或改文字后版式会随之变化——这与 OFD 的 固定版式不同。字号与字体名按 OFD 原值写入,不嵌入字体文件,实际效果取决于打开 方的系统字体。批注层的水印与印章默认剔除,可用 WithDOCXAnnotations 保留。
Example ¶
package main
import (
"archive/zip"
"bytes"
"context"
"fmt"
"github.com/zc310/ofd/pkg/converter"
_ "github.com/zc310/ofd/pkg/converter/import/markdown"
_ "github.com/zc310/ofd/pkg/converter/import/pdf"
)
func main() {
// 转换入口的第一个参数是取消信号;命令行工具通常用 context.Background(),
// 长任务应传入带超时的 context。
ctx := context.Background()
var output bytes.Buffer
err := converter.DOCX(ctx, "../../test/testdata/helloworld.ofd", &output, converter.Page(1))
fmt.Println(err == nil && docxHasPart(output.Bytes(), "word/document.xml"))
}
// docxHasPart 报告产物里是否存在指定部件。DOCX 是 ZIP 容器,光判断签名不足以
// 确认包结构正确。
func docxHasPart(data []byte, name string) bool {
reader, err := zip.NewReader(bytes.NewReader(data), int64(len(data)))
if err != nil {
return false
}
for _, file := range reader.File {
if file.Name == name {
return true
}
}
return false
}
Output: true
func DOCXDocuments ¶ added in v0.1.4
func DOCXDocuments(ctx context.Context, documents []*render.Document, output io.Writer, opts ...Option) error
DOCXDocuments 将多个已解析的 OFD 文档体按全局页码写入同一个 DOCX 文件。
func Encode ¶ added in v0.1.2
Encode 解析 input 中的 OFD 文档,并按 format 选择注册的编码器写入 output。 format 可以是注册名("pdf"、"text"、"markdown"、"jpeg")、别名("txt"、"md"、 "jpg")或带点/不带点的文件扩展名(".png"、"svg")。
func EncodeDocuments ¶ added in v0.1.2
func EncodeDocuments(ctx context.Context, format string, documents []*render.Document, output io.Writer, opts ...Option) error
EncodeDocuments 按 format 选择注册的编码器,直接写入已解析的文档。 当 output 为 nil 时,逐页图像格式使用 Option 中通过 Writer 或 ImageWriter 提供的写入器。
func HTML ¶ added in v0.1.1
HTML 将 input 中的 OFD 文档转换为单个 HTML 文件。 默认每页使用内嵌 PNG 图片,也可以通过 HTMLJPG 或 HTMLSVG 选择 JPG 或 SVG。
Example ¶
package main
import (
"bytes"
"context"
"fmt"
"github.com/zc310/ofd/pkg/converter"
_ "github.com/zc310/ofd/pkg/converter/import/markdown"
_ "github.com/zc310/ofd/pkg/converter/import/pdf"
)
func main() {
// 转换入口的第一个参数是取消信号;命令行工具通常用 context.Background(),
// 长任务应传入带超时的 context。
ctx := context.Background()
var output bytes.Buffer
err := converter.HTML(ctx, "../../test/testdata/helloworld.ofd", &output, converter.Page(1), converter.DPI(72))
fmt.Println(err == nil && bytes.Contains(output.Bytes(), []byte("data:image/png;base64,")))
}
Output: true
func HTMLDocuments ¶ added in v0.1.1
func HTMLDocuments(ctx context.Context, documents []*render.Document, output io.Writer, opts ...Option) error
HTMLDocuments 将多个已解析的 OFD 文档体按全局页码写入单个 HTML 文件。
func Image ¶
Image 渲染 OFD 文档。输出格式由 PNG、JPG、TIFF、SVG、EPS、TeX 或 WithFormat 选项决定, 默认 PNG;输出目标由 Writer 或 ImageWriter 选项提供。
func ImageDocument ¶ added in v0.0.6
ImageDocument 将已解析的 OFD 文档渲染为图像或矢量格式。
func ImageDocuments ¶ added in v0.0.6
ImageDocuments 将多个已解析的 OFD 文档体按全局页码渲染为图像或矢量格式。
func ImportFormats ¶ added in v0.1.2
func ImportFormats() []string
ImportFormats 返回所有已注册输入格式的名称快照,按名称排序。
func IsImageFormat ¶ added in v0.1.2
IsImageFormat 判断给定格式名、别名或扩展名是否逐页输出图像。
func Markdown ¶ added in v0.1.1
Markdown 提取 input 中 OFD 文档的文字并写入 Markdown 文档。 “第 X 章”识别为二级标题,其他标题按字号和编号层级输出。
Example ¶
package main
import (
"bytes"
"context"
"fmt"
"github.com/zc310/ofd/pkg/converter"
_ "github.com/zc310/ofd/pkg/converter/import/markdown"
_ "github.com/zc310/ofd/pkg/converter/import/pdf"
)
func main() {
// 转换入口的第一个参数是取消信号;命令行工具通常用 context.Background(),
// 长任务应传入带超时的 context。
ctx := context.Background()
var output bytes.Buffer
err := converter.Markdown(ctx, "../../test/testdata/helloworld.ofd", &output, converter.Page(1))
// 标题使用 OFD 文档的 DocInfo.Title,没有标题时回退为 “OFD 文档”。
fmt.Println(err == nil && bytes.Contains(output.Bytes(), []byte("# Hello World")))
}
Output: true
func MarkdownDocument ¶ added in v0.1.1
func MarkdownDocument(ctx context.Context, doc *parser.Document, output io.Writer, opts ...Option) error
MarkdownDocument 提取已解析 OFD 文档中的文字并写入 Markdown 文档。
func MarkdownDocuments ¶ added in v0.1.1
func MarkdownDocuments(ctx context.Context, documents []*parser.Document, output io.Writer, opts ...Option) error
MarkdownDocuments 按全局页码提取多个已解析 OFD 文档体中的文字并写入 Markdown 文档。
func PDF ¶
PDF 解析 input 中的 OFD 文档并按全局页码写入一个 PDF。
Example ¶
package main
import (
"context"
"fmt"
"os"
"github.com/zc310/ofd/pkg/converter"
_ "github.com/zc310/ofd/pkg/converter/import/markdown"
_ "github.com/zc310/ofd/pkg/converter/import/pdf"
)
func main() {
// 转换入口的第一个参数是取消信号;命令行工具通常用 context.Background(),
// 长任务应传入带超时的 context。
ctx := context.Background()
output, err := os.CreateTemp("", "ofd-example-*.pdf")
if err == nil {
defer os.Remove(output.Name())
err = converter.PDF(ctx, "../../test/testdata/intro.ofd", output)
if closeErr := output.Close(); err == nil {
err = closeErr
}
}
fmt.Println(err == nil)
}
Output: true
func PDFDocuments ¶ added in v0.0.6
func PDFDocuments(ctx context.Context, documents []*render.Document, output io.Writer, opts ...Option) error
PDFDocuments 将多个已解析的 OFD 文档体按全局页码写入同一个 PDF。
func RegisterImporter ¶ added in v0.1.2
func RegisterImporter(imp Importer)
RegisterImporter 注册一个导入器。通常在 init() 中调用。
func RegisterTransformer ¶ added in v0.1.2
func RegisterTransformer(transformer Transformer)
RegisterTransformer 注册一个直接转换器。通常在 init() 中调用。
func Text ¶ added in v0.0.6
Text 提取 input 中 OFD 文档的文字并写入 output。 不会保留字体、颜色和布局信息;不同文字对象按行输出,不同页面使用分页符分隔。
Types ¶
type Converter ¶
type Converter struct {
// contains filtered or unexported fields
}
Converter 配置转换器
func (*Converter) AllowRemoteResources ¶ added in v0.1.2
AllowRemoteResources 返回是否允许加载外部资源。
func (*Converter) ChromePath ¶ added in v0.1.2
ChromePath 返回配置的 Chrome/Chromium 可执行文件路径;为空表示自动查找。
func (*Converter) DOCXAnnotations ¶ added in v0.1.4
DOCXAnnotations 返回 OFD 转 DOCX 时是否保留批注层的文字,默认剔除。
func (*Converter) DOCXImages ¶ added in v0.1.4
DOCXImages 返回 OFD 转 DOCX 时是否内嵌图片,默认开启。
func (*Converter) DOCXTables ¶ added in v0.1.4
DOCXTables 返回 OFD 转 DOCX 时是否识别并输出表格,默认开启。
func (*Converter) ImageOCREnabled ¶ added in v0.1.4
ImageOCREnabled 返回图片导入时是否启用 OCR。
func (*Converter) ImageOCRLanguage ¶ added in v0.1.4
ImageOCRLanguage 返回图片导入使用的 OCR 语言。
func (*Converter) InputPassword ¶ added in v0.1.4
InputPassword 返回加密输入文档的打开口令,空表示未提供。
目前只有 PDF 输入会用它(见 pdfimport)。放在 Converter 上而不是 Importer 接口的额外参数上,是为了不给 Importer/Encoder/Transformer 三个接口都加参数——那二十来处实现并不因此多出任何能力。
func (*Converter) MarkdownTables ¶ added in v0.1.3
MarkdownTables 返回 OFD 转 Markdown 时是否识别并输出表格,默认关闭。
func (*Converter) OfficeTimeout ¶ added in v0.1.2
OfficeTimeout 返回 Office 文档转换超时时间;为 0 表示使用默认值。
func (*Converter) PrintBackground ¶ added in v0.1.2
PrintBackground 返回是否打印背景。
func (*Converter) SofficePath ¶ added in v0.1.2
SofficePath 返回配置的 LibreOffice 可执行文件路径;为空表示自动查找。
type Encoder ¶ added in v0.1.2
type Encoder interface {
// Name 返回格式名称,如 "pdf"、"png"、"html"。
Name() string
// Kind 返回格式类别,调用方据此区分文档输出和逐页图像输出。
Kind() Kind
// Extensions 返回支持的文件扩展名,如 [".pdf"]、[".png", ".jpg"]。
Extensions() []string
// MIME 返回 MIME 类型,如 "application/pdf"。
MIME() string
// Encode 把 input 写入 output。input 可以是原始 OFD 输入(路径、[]byte、
// io.Reader),也可以是已解析的 []*render.Document。
// 需要解析 OFD 的编码器应通过 encodeOFD 复用统一的解析逻辑。
Encode(input any, output io.Writer, conv *Converter) error
}
Encoder 是所有输出格式编码器必须实现的接口。 各格式文件在 init() 中调用 Register 注册。
type Format ¶ added in v0.1.2
type Format struct {
Name string
Kind Kind
Extensions []string
MIME string
// contains filtered or unexported fields
}
Format 是已注册格式的元信息。
func FormatByExtension ¶ added in v0.1.2
FormatByExtension 根据文件扩展名查找格式,如 ".pdf" → Format。
func FormatByName ¶ added in v0.1.2
FormatByName 根据格式名(或别名)查找格式。
type Importer ¶ added in v0.1.2
type Importer interface {
// Name 返回输入格式名,如 "pdf"、"docx"、"pptx"。
Name() string
// Extensions 返回支持的文件扩展名,如 [".pdf"]。
Extensions() []string
// MIME 返回 MIME 类型,如 "application/pdf"。
MIME() string
// Import 把 input 读取为 OFD 并写入 output。
Import(input any, output io.Writer, conv *Converter) error
}
Importer 是非 OFD 输入(如 PDF、DOCX、PPTX)到 OFD 的导入器。 各输入格式包在 init() 中调用 RegisterImporter 注册,并按需空白导入, 使不使用的导入依赖不进最终二进制。
func ImporterByExtension ¶ added in v0.1.2
ImporterByExtension 按文件扩展名查找导入器。
func ImporterByName ¶ added in v0.1.2
ImporterByName 按输入格式名(含别名或扩展名)查找导入器。
type Option ¶
type Option func(*Converter)
Option 配置选项类型
func EPS ¶ added in v0.0.6
func EPS() Option
EPS 设置为 Encapsulated PostScript 格式
Example ¶
package main
import (
"bytes"
"context"
"fmt"
"io"
"github.com/zc310/ofd/pkg/converter"
_ "github.com/zc310/ofd/pkg/converter/import/markdown"
_ "github.com/zc310/ofd/pkg/converter/import/pdf"
)
type exampleBufferWriteCloser struct {
*bytes.Buffer
}
func (exampleBufferWriteCloser) Close() error { return nil }
func main() {
// 转换入口的第一个参数是取消信号;命令行工具通常用 context.Background(),
// 长任务应传入带超时的 context。
ctx := context.Background()
var output bytes.Buffer
err := converter.Image(ctx, "../../test/testdata/helloworld.ofd",
converter.Writer(func(int) (io.WriteCloser, error) {
return exampleBufferWriteCloser{Buffer: &output}, nil
}),
converter.EPS(),
converter.Page(1),
)
fmt.Println(err == nil && bytes.Contains(output.Bytes(), []byte("%!PS-Adobe-3.0 EPSF-3.0")))
}
Output: true
func HTMLJPG ¶ added in v0.1.1
func HTMLJPG() Option
HTMLJPG 设置 HTML 页面使用内嵌 JPG 图片。
Example ¶
package main
import (
"bytes"
"context"
"fmt"
"github.com/zc310/ofd/pkg/converter"
_ "github.com/zc310/ofd/pkg/converter/import/markdown"
_ "github.com/zc310/ofd/pkg/converter/import/pdf"
)
func main() {
// 转换入口的第一个参数是取消信号;命令行工具通常用 context.Background(),
// 长任务应传入带超时的 context。
ctx := context.Background()
var output bytes.Buffer
err := converter.HTML(ctx, "../../test/testdata/helloworld.ofd", &output, converter.HTMLJPG(), converter.Page(1))
fmt.Println(err == nil && bytes.Contains(output.Bytes(), []byte("data:image/jpeg;base64,")))
}
Output: true
func HTMLSVG ¶ added in v0.1.1
func HTMLSVG() Option
HTMLSVG 设置 HTML 页面使用内嵌 SVG 内容。
Example ¶
package main
import (
"bytes"
"context"
"fmt"
"github.com/zc310/ofd/pkg/converter"
_ "github.com/zc310/ofd/pkg/converter/import/markdown"
_ "github.com/zc310/ofd/pkg/converter/import/pdf"
)
func main() {
// 转换入口的第一个参数是取消信号;命令行工具通常用 context.Background(),
// 长任务应传入带超时的 context。
ctx := context.Background()
var output bytes.Buffer
err := converter.HTML(ctx, "../../test/testdata/helloworld.ofd", &output, converter.HTMLSVG(), converter.Page(1))
fmt.Println(err == nil && bytes.Contains(output.Bytes(), []byte("<svg")))
}
Output: true
func ImageOCRLanguage ¶ added in v0.1.4
ImageOCRLanguage 设置图片导入使用的 OCR 语言。
func ImageWriter ¶
ImageWriter 设置图像写入器
func JPG ¶
func JPG() Option
JPG 设置为JPEG格式
Example ¶
package main
import (
"context"
"fmt"
"image/color"
"io"
"os"
"path/filepath"
"github.com/zc310/ofd/pkg/converter"
_ "github.com/zc310/ofd/pkg/converter/import/markdown"
_ "github.com/zc310/ofd/pkg/converter/import/pdf"
)
func main() {
// 转换入口的第一个参数是取消信号;命令行工具通常用 context.Background(),
// 长任务应传入带超时的 context。
ctx := context.Background()
dir, err := os.MkdirTemp("", "ofd-example-")
if err == nil {
defer os.RemoveAll(dir)
err = converter.Image(ctx, "../../test/testdata/intro.ofd",
converter.Writer(func(page int) (io.WriteCloser, error) {
return os.Create(filepath.Join(dir, fmt.Sprintf("intro_%d.jpg", page)))
}),
converter.BgColor(color.White),
converter.JPG(),
converter.Page(40),
converter.DPI(300),
)
}
fmt.Println(err == nil)
}
Output: true
func PDFParallel ¶ added in v0.1.1
PDFParallel 控制 PDF 页面是否并行渲染;默认关闭。
func PNG ¶
func PNG() Option
PNG 设置为PNG格式
Example ¶
package main
import (
"context"
"fmt"
"image/color"
"io"
"os"
"path/filepath"
"github.com/zc310/ofd/pkg/converter"
_ "github.com/zc310/ofd/pkg/converter/import/markdown"
_ "github.com/zc310/ofd/pkg/converter/import/pdf"
)
func main() {
// 转换入口的第一个参数是取消信号;命令行工具通常用 context.Background(),
// 长任务应传入带超时的 context。
ctx := context.Background()
dir, err := os.MkdirTemp("", "ofd-example-")
if err == nil {
defer os.RemoveAll(dir)
err = converter.Image(ctx, "../../test/testdata/ano.ofd",
converter.Writer(func(page int) (io.WriteCloser, error) {
return os.Create(filepath.Join(dir, fmt.Sprintf("ano_%d.png", page)))
}),
converter.BgColor(color.White),
converter.PNG(),
)
}
fmt.Println(err == nil)
}
Output: true
func RasterBackend ¶ added in v0.1.3
RasterBackend 指定 PNG/JPG 输出使用的栅格后端名(如 "canvas"、"gg"、 "ftgg"、"tinyskia")。仅对 PNG/JPEG 生效;空字符串表示使用 canvas 矢量 表面光栅化(默认)。使用 canvas 之外的后端需在程序中空白导入对应插件包, 例如 import _ "github.com/zc310/ofd/internal/render/backends/gg"。
func SVG ¶ added in v0.0.6
func SVG() Option
SVG 设置为 SVG 格式
Example ¶
package main
import (
"bytes"
"context"
"fmt"
"io"
"github.com/zc310/ofd/pkg/converter"
_ "github.com/zc310/ofd/pkg/converter/import/markdown"
_ "github.com/zc310/ofd/pkg/converter/import/pdf"
)
type exampleBufferWriteCloser struct {
*bytes.Buffer
}
func (exampleBufferWriteCloser) Close() error { return nil }
func main() {
// 转换入口的第一个参数是取消信号;命令行工具通常用 context.Background(),
// 长任务应传入带超时的 context。
ctx := context.Background()
var output bytes.Buffer
err := converter.Image(ctx, "../../test/testdata/helloworld.ofd",
converter.Writer(func(int) (io.WriteCloser, error) {
return exampleBufferWriteCloser{Buffer: &output}, nil
}),
converter.SVG(),
converter.Page(1),
)
fmt.Println(err == nil && bytes.Contains(output.Bytes(), []byte("<svg")))
}
Output: true
func TeX ¶ added in v0.0.6
func TeX() Option
TeX 设置为 TeX/PGF 格式
Example ¶
package main
import (
"bytes"
"context"
"fmt"
"io"
"github.com/zc310/ofd/pkg/converter"
_ "github.com/zc310/ofd/pkg/converter/import/markdown"
_ "github.com/zc310/ofd/pkg/converter/import/pdf"
)
type exampleBufferWriteCloser struct {
*bytes.Buffer
}
func (exampleBufferWriteCloser) Close() error { return nil }
func main() {
// 转换入口的第一个参数是取消信号;命令行工具通常用 context.Background(),
// 长任务应传入带超时的 context。
ctx := context.Background()
var output bytes.Buffer
err := converter.Image(ctx, "../../test/testdata/helloworld.ofd",
converter.Writer(func(int) (io.WriteCloser, error) {
return exampleBufferWriteCloser{Buffer: &output}, nil
}),
converter.TeX(),
converter.Page(1),
)
fmt.Println(err == nil && bytes.Contains(output.Bytes(), []byte("\\begin{pgfpicture}")))
}
Output: true
func WithAllowRemoteResources ¶ added in v0.1.2
WithAllowRemoteResources 设置是否允许加载外部资源(默认禁止,仅允许本地与 data: 资源)。仅在 HTML/MHTML 转 PDF 时生效。
func WithChrome ¶ added in v0.1.2
WithChrome 设置 Chrome/Chromium 可执行文件路径,供 HTML/MHTML 导入使用; 为空时按 OFD_CHROME、PATH 和常见安装路径自动查找。
func WithChromeNoSandbox ¶ added in v0.1.2
WithChromeNoSandbox 设置是否禁用 Chrome 沙箱。容器或 root 环境下可能需要, 但会降低安全性,默认关闭。
func WithDOCXAnnotations ¶ added in v0.1.4
WithDOCXAnnotations 设置 OFD 转 DOCX 时是否保留批注层的文字,默认剔除。 批注承载的是叠加在正文上的标记——整页水印、电子印章、签章位置、阅读批注。 实测保密宣传册首页的「保密资料」水印由 81 个批注文字对象组成,同页真实正文 只有 5 个,不剔除时每个段落都会被水印文字淹没。需要保留叠加层时打开它。
func WithDOCXImages ¶ added in v0.1.4
WithDOCXImages 设置 OFD 转 DOCX 时是否内嵌图片,默认开启。 只内嵌 WordprocessingML 能直接承载的栅格格式;SVG 等矢量图片会被跳过, 因为转成位图会损失清晰度。每页最多内嵌 64 张,避免整版图片类的文档产出 体量失控的文件。
func WithDOCXTables ¶ added in v0.1.4
WithDOCXTables 设置 OFD 转 DOCX 时是否识别并输出表格,默认开启。 识别复用 Markdown 的几何推断(X 对齐与空白间隔),而 DOCX 里表格带框线与 单元格边界,一旦误判比纯文字输出更难接受,因此默认开启、允许关闭。
func WithFormat ¶ added in v0.1.2
WithFormat 按注册的格式名(或别名)设置输出格式。
func WithHTMLTextLayer ¶ added in v0.1.4
WithHTMLTextLayer 设置 HTML 输出是否附带透明文字层,默认开启。
文字层让页面里的文字可选中、可被浏览器内查找、可被屏幕阅读器朗读,而视觉 仍由页面图像承担。它不内嵌字体,字号用容器查询单位随页面缩放,因此对 产物体积几乎没有影响。文字度量由浏览器用系统字体完成,与 OFD 版面可能有 细微偏差;关闭后回到纯图像输出。
func WithLandscape ¶ added in v0.1.2
WithLandscape 设置横向打印。
func WithMarkdownTables ¶ added in v0.1.3
WithMarkdownTables 设置 OFD 转 Markdown 时是否识别并输出表格,默认关闭。 表格识别基于文字位置(X 对齐与空白间隔),对无边框表格有效,但双栏正文、 公式排版等也可能被误判,因此默认关闭,按需开启。
func WithOfficeTimeout ¶ added in v0.1.2
WithOfficeTimeout 设置 Office 文档转换超时时间;0 表示使用默认值。
func WithPaperDimensions ¶ added in v0.1.2
WithPaperDimensions 以毫米设置自定义纸张尺寸。
func WithPaperSize ¶ added in v0.1.2
WithPaperSize 按名称设置输出纸张尺寸,支持 A4、A3、A5、Letter、Legal、B5、16开。
func WithPassword ¶ added in v0.1.4
WithPassword 设置加密输入文档的打开口令。
目前只作用于 PDF 输入:口令交给 pdfcpu 用于解密,OFD 的包级加密尚不支持。 空口令表示未提供,此时遇到加密文档会报"该文档已加密",而不是给出一个 难以理解的解析失败。
func WithPrintBackground ¶ added in v0.1.2
WithPrintBackground 设置是否打印背景颜色和图片(默认开启)。
func WithSoffice ¶ added in v0.1.2
WithSoffice 设置 LibreOffice 可执行文件路径,供 Office 文档导入使用; 为空时按 OFD_SOFFICE、PATH 和常见安装路径自动查找。
func WithTempDir ¶ added in v0.1.2
WithTempDir 设置外部工具(LibreOffice/Chrome)转换使用的临时文件根目录; 为空表示使用系统临时目录。目录不存在时会按需创建子目录。
type Paper ¶ added in v0.1.2
type Paper struct {
// Width 是纸张宽度(毫米)。
Width float64
// Height 是纸张高度(毫米)。
Height float64
// Landscape 为真时交换宽高。
Landscape bool
}
Paper 描述输出纸张尺寸(毫米)与方向。
func PaperByName ¶ added in v0.1.2
PaperByName 按名称(大小写不敏感,支持 A4/A3/A5/Letter/Legal/B5/16开)返回纸张。
func (Paper) EffectiveDimensions ¶ added in v0.1.2
EffectiveDimensions 返回考虑方向后的实际宽高(毫米)。
type Transformer ¶ added in v0.1.2
type Transformer interface {
// From 返回支持的输入格式名,如 "docx"、"doc"。
From() []string
// To 返回输出格式名,如 "pdf"。
To() string
// Transform 把 input 直接转换为 output。
Transform(input any, output io.Writer, conv *Converter) error
}
Transformer 是某类输入到某个输出格式的直接转换器,用于避免"先导入 OFD 再导出"的中间损失(例如 docx→pdf 直接由 LibreOffice 完成)。各格式包在 init() 中调用 RegisterTransformer 注册。
func TransformerFor ¶ added in v0.1.2
func TransformerFor(from, to string) (Transformer, bool)
TransformerFor 查找 from→to 的直接转换器。
Source Files
¶
Directories
¶
| Path | Synopsis |
|---|---|
|
import
|
|
|
html
Package html 为 converter 注册 HTML/MHTML 导入器,以及到 PDF 的直接 转换器。
|
Package html 为 converter 注册 HTML/MHTML 导入器,以及到 PDF 的直接 转换器。 |
|
image
Package image 将单页图片和多页 TIFF 导入为带图片与 OCR 文字层的 OFD。
|
Package image 将单页图片和多页 TIFF 导入为带图片与 OCR 文字层的 OFD。 |
|
markdown
Package markdown 为 converter 注册 Markdown→OFD 导入器(输入格式 "markdown")。
|
Package markdown 为 converter 注册 Markdown→OFD 导入器(输入格式 "markdown")。 |
|
office
Package office 为 converter 注册 Office 文档(doc/docx/odt/rtf/wps/ pptx/xlsx 等)的导入器,以及到 PDF 的直接转换器。
|
Package office 为 converter 注册 Office 文档(doc/docx/odt/rtf/wps/ pptx/xlsx 等)的导入器,以及到 PDF 的直接转换器。 |
|
pdf
Package pdf 为 converter 注册 PDF→OFD 导入器(输入格式 "pdf")。
|
Package pdf 为 converter 注册 PDF→OFD 导入器(输入格式 "pdf")。 |