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

另请参阅

 中文