OFD 文档转换(Aegis.Documents.Conversion.Ofd)
Aegis.Documents.Conversion.Ofd 负责 PDF -> OFD,同时也是 HTML -> OFD 和 Word -> OFD 的最后一跳。
组件概览
| 字段 | 说明 |
|---|---|
| 组件名称 | OFD 文档转换 |
| 真实类库 | Aegis.Documents.Conversion.Ofd |
| 组件定位 | PDF 转 OFD 以及 OFD 输出链路的核心引擎 |
| 默认接入方式 | 通过 文档处理(Aegis.Documents) 一起装配 |
| 主要接口 | IPdfToOfdConverter、IHtmlToOfdConverter、IWordToOfdConverter |
| 主要配置 | 单次调用时通过 HtmlToOfdOptions、WordToOfdOptions、OfdRenderSettings 传入 |
| 常见配套 | Playwright 文档转换、LibreOffice 文档转换 |
什么时候重点看这页
适合场景:
- 你要输出 OFD 电子单据
- 你要控制 OFD 的 DPI、图像格式和页面尺寸
- 你要判断
PDF -> OFD、HTML -> OFD、Word -> OFD分别该怎么接
三条常见转换路径
| 接口 | 实际路径 |
|---|---|
IPdfToOfdConverter | PDF -> OFD |
IHtmlToOfdConverter | HTML -> PDF -> OFD |
IWordToOfdConverter | Word -> PDF -> OFD |
所以:
- 如果输入已经是 PDF,直接注入
IPdfToOfdConverter - 如果输入是 HTML,最终会同时依赖 Playwright 和 OFD
- 如果输入是 Word,最终会同时依赖 LibreOffice 和 OFD
最小使用示例
PDF -> OFD
[HttpPost("pdf-to-ofd")]
public async Task<IActionResult> ConvertPdfToOfd(
IFormFile file,
[FromServices] IPdfToOfdConverter converter)
{
await using var stream = file.OpenReadStream();
var ofdBytes = await converter.ConvertAsync(stream);
return File(
ofdBytes,
"application/ofd",
Path.ChangeExtension(file.FileName, ".ofd"));
}
HTML -> OFD
var ofdBytes = await _htmlToOfdConverter.ConvertAsync(html, new HtmlToOfdOptions
{
PageSize = PageSize.A4,
Margin = new MarginSettings(10),
Render = new OfdRenderSettings
{
ImageFormat = OfdImageFormat.Jpeg,
RenderDpi = 150
}
});
Word -> OFD
await using var stream = file.OpenReadStream();
var format = Path.GetExtension(file.FileName).ToLower() == ".docx"
? DocFormat.Docx
: DocFormat.Doc;
var ofdBytes = await _wordToOfdConverter.ConvertAsync(stream, format);
渲染参数怎么理解
OfdRenderSettings
| 配置项 | 默认值 | 说明 |
|---|---|---|
ImageFormat | Png | 图像格式,文字类文档更适合 Png |
RenderDpi | 150 | 渲染分辨率,越高越清晰,文件也越大 |
DPI 选择建议
| 场景 | 建议 DPI |
|---|---|
| 屏幕预览 | 72~96 |
| 普通打印 | 150 |
| 高质量打印 | 200~300 |
接入后怎么确认生效
可以用下面几项验收:
IPdfToOfdConverter能直接处理普通 PDFIHtmlToOfdConverter在 HTML 中文和图片场景下输出正常IWordToOfdConverter可以把.docx成功转成 OFD- 同一份文档在提高 DPI 后,清晰度有明显变化
常见问题
OFD 文件过大
优先从两处收:
- 把
RenderDpi从200降到150或96 - 图片较多时把
ImageFormat改成Jpeg
OFD 文字发虚
通常是 DPI 过低,先把 RenderDpi 提高到 150 或 200 再看。
HTML -> OFD 或 Word -> OFD 失败
这不一定是 OFD 引擎本身的问题,先回头检查上一跳:
- HTML 场景检查浏览器环境
- Word 场景检查 LibreOffice 和字体环境