Conversion
Conversion
本页介绍将 PDF 渲染为其他格式以及将文档转换为符合 PDF/A 的要求。Document 为每种输出格式提供一个针对整个文档的 To*() 方法;相同的方法也在 Page 上用于渲染单页。
渲染为其他文档格式
Document.ToHtml()、Document.ToDocx() 和 Document.ToMarkdown() 渲染所有页面;Page.ToSvg() 和 Page.ToImage() 将单页渲染为独立的 SVG 字符串或 PNG 字节。每个都有各自的选项——在 DocxOptions 上的 mode(‘flow’ 重新排版内容,’textbox’ 保持每页自身的几何形状)以及在 MarkdownExportOptions 上的 images(‘inline’ 嵌入图像 data URI,’external’ 将文件写入 imageDir 作为独立文件)。
const doc = Document.OpenFile('in.pdf');
const svg = doc.Pages[0].ToSvg(); // standalone <svg> string
const png = doc.Pages[0].ToImage({ scale: 2 }); // Uint8Array of PNG bytes @144 DPI
const html = doc.ToHtml(); // standalone semantic HTML, all pages
const md = doc.ToMarkdown(); // GFM Markdown, all pages
const docx = doc.ToDocx(); // .docx bytes, reflowed, images in the package
const fixed = doc.ToDocx({ mode: 'textbox' }); // .docx keeping each page's own geometry
ImageOptions(针对 Page.ToImage())还接受 format、quality、scale,以及显式的 width / height,和 background(‘white’ 或 ’transparent’)。
转换至 PDF/A
Document.ConvertToPdfA() 尝试将文档修正为符合 PDF/A level(‘b’ 或 ‘u’)的要求并重新验证,返回一个包含 applied(它所执行的修正操作)、unresolved(它未能修复的问题)以及 passed 的 ConversionReport。请在副本上运行它——例如使用 Document.ExtractPages() 创建的副本——以确保实时工作文档不会被转换过程修改。
// ExtractPages gives an independent copy; ConvertToPdfA never touches the original.
const copy = doc.ExtractPages(doc.Pages.map((_, i) => i + 1));
const conversion = copy.ConvertToPdfA('2b');
console.log(`applied ${conversion.applied.length} action(s), `
+ `${conversion.unresolved.length} unresolved, `
+ `result: ${conversion.passed ? 'passes' : 'still fails'} PDF/A-2b`);
copy.WriteTo('output-pdfa.pdf');其他导出格式
除了 HTML、Markdown、DOCX、SVG 和 PNG 外,该库还导出 TIFF(TiffExportOptions,encodeTiff())并在 FDF 和 XFDF 中导入/导出 AcroForm 字段值(exportFdfFile()、exportXfdfFile()、importFdfFile()、importXfdfFile())——这对于将已填写的表单数据与 PDF 本身分开交换非常有用。
提示与最佳实践
- 在副本上运行
Document.ConvertToPdfA()(例如来自Document.ExtractPages()),绝不要在仍需保存未转换的实时文档上运行。 - 即使在
passed为true且验证级别较宽松的情况下,也要检查ConversionReport.unresolved—— 有些修复措施仅在更严格的级别下才能完全解决。 - 当 DOCX 输出需要保持每页的精确视觉布局时,在
DocxOptions上使用mode: 'textbox';如果应像普通文字处理文档那样重新排版,则使用默认的'flow'模式。 - 对于大文档,在
MarkdownExportOptions上传递images: 'external'和一个imageDir,而不是使用默认的内联 data URI,以保持 Markdown 文件本身体积小。
常见问题
| 问题 | 原因 | 修复 |
|---|---|---|
ConvertToPdfA() 仍然报告 passed: false | 并非所有 ConversionReport.unresolved 列表中的问题都能自动修复(例如缺少嵌入字体或缺失的 /OutputIntent) | 手动处理特定的 unresolved 规则,然后重新运行 ConvertToPdfA() |
| 在一次 PDF/A 转换尝试后,实时文档意外被修改 | ConvertToPdfA() 直接在工作文档上调用,而不是在副本上 | 在使用 Document.ExtractPages() 制作的副本上调用它 |
| Markdown 导出会生成一个巨大的文件 | 默认的 images: 'inline' 将每个图像嵌入为 data URI | 传递 { images: 'external', imageDir: '...' } 以将图像写入单独的文件 |
| DOCX 输出会丢失原始页面布局 | 默认的 mode: 'flow' 像文字处理器一样重新排版内容 | 传递 { mode: 'textbox' } 以保留每页自己的几何形状 |
FAQ
PDF 可以转换为什么格式?
HTML、Markdown 和 DOCX 用于整个文档(Document.ToHtml() / ToMarkdown() / ToDocx());SVG 和 PNG 用于每页(Page.ToSvg() / Page.ToImage());此外还有 TIFF 和 FDF/XFDF 表单数据导出。
转换为 PDF/A 会修改我的原始文档吗?
只有在直接对其调用 ConvertToPdfA() 时才会。请在副本上调用——例如 doc.ExtractPages(doc.Pages.map((_, i) => i + 1))——以保持原始文档不被转换。
我如何判断 PDF/A 转换是否真正成功?
检查 ConversionReport.passed。applied 列出转换修复了哪些内容,unresolved 列出未能修复的——即使 passed 为 true,也请检查 unresolved。
我能仅导出已填写的表单字段值,而不导出 PDF 本身吗?
是 — exportFdfFile() 和 exportXfdfFile() 将当前的 AcroForm 字段值写入单独的 FDF 或 XFDF 文件;importFdfFile() / importXfdfFile() 将其读取回文档。
API Reference 摘要
| 类/方法 | 描述 |
|---|---|
Document.ToHtml() / Document.ToDocx() / Document.ToMarkdown() | 将每页渲染为其他文档格式 |
Page.ToSvg() / Page.ToImage() | 将单页渲染为 SVG 或 PNG |
DocxOptions / MarkdownExportOptions / ImageOptions | 每种格式的渲染选项 |
Document.ConvertToPdfA() | 对文档进行修复,使其达到 PDF/A 级别并重新验证 |
ConversionReport | 转换结果: applied, unresolved, passed |
TiffExportOptions / encodeTiff() | 导出为 TIFF |
exportFdfFile() / exportXfdfFile() / importFdfFile() / importXfdfFile() | 导出或导入 AcroForm 字段值为 FDF/XFDF |