转换文档的令人惊讶的是文件中没有要转换的页面。 .docx 包含有关纸张尺寸的段落、样式和注释,并且在打开时,您在屏幕上看到的页面是由 Word 做布局生成的。 任何其他程序都必须再次使用自己的字体和自己的换行方式进行此布局,这就是为什么两个转换器从一个文件中提供两个不同的页面计数的原因。 理解一个事实解释了输出中的每一个惊喜,包括你认为已消失的跟踪删除出现在PDF中的一种。
TL;博士: .docx 是一个包含实际结构的 XML 的压缩包,因此标题、段落和列表的到达正确而非推断。 没有到达的是外观:字体、列、表格、制表符、编号和精确间距 转换器必须实现一个文字处理器来尊重。 测量的是实实在在的输入,删除了被删除的文件,所以一个编辑的文档作为它的最终措辞,一个编号的列表返回了一个符号,一个表的单元格成为它的单元格,一个标签变成一个空格。 西欧文本呈现;西里尔语、希腊语、CJK 和表情符号不会,因为内置的 PDF 字体是 Winansi。 那个 Word 到 PDF 转换器 在浏览器中进行排版。
.docx 中有什么?
一个由 XML 部件组成的 zip 文件,其中一个包含了所有重要的内容。
使用归档工具打开任何 .docx,您会发现 word/document.xml 除了清单、关系部分,通常还包括样式、字体、主题、编号定义和设置。 格式是 ECMA-376, 与微软自己的 实施说明 涵盖 Word 在它之上的作用。
文档部分是一个序列 <w:p> 元素。 每个都是一个段落,带有可选属性,说明它使用哪种样式以及它是否属于列表,在其内部包含一系列包含实际文本的运行 <w:t>。
这确实比 PDF 提供的要好。 在 PDF 中,必须从线之间的垂直间隙推断出一个段落,即 另一个方向的转换 丢失列和表。 这里段落是一个段落,因为文件是这样说的,标题是标题,因为段落命名了标题样式。
渔获物位于转换器未读取的部分中。
为什么结果看起来不像 Word 中的结果?
因为外观分布在相当于文字处理器的部分中,并且转换器将文本重新排版。
文本位于文档部分。 文本以 11 点显示在 11 点的 Calibri 中的原因,其中 1.08 行距 styles.xml。 原因是你的列表读“1., 2., 3.”而不是“a., b., c.” numbering.xml。 提供标题颜色的主题再次出现在另一个部分,部分属性管理每个部分的边距、列和页面大小。
尊重所有这些是构建一个使用 Word's 语义的布局引擎。 这个工具的作用是阅读结构并干净地布置:在您选择的页面大小中,罗马人的正文,时代的罗马粗体,56点的边距,1.4行距。
因此,输出是一个可读的、正确排序的文档,看起来不像原始文件。 这是一个真正的限制,值得明确而不是埋葬,因为寻求这种转变的人分为两组,只有其中一组得到服务。 如果您希望将文本作为任何人都可以打开的 PDF 格式,这是正确的。 如果你愿意 那个页面,凭借其字体和间距,继续阅读 Word 自己导出的部分。
什么能在转换中幸存下来?
结构和阅读顺序,可靠。 这是完整的列表,根据代码而不是假设的值衡量。
| 元素 | 结果 |
|---|---|
| 段 | 保存,按文档顺序 |
| 标题 | 保留,按级别大小,设置粗体 |
| 列出项目 | 文本保留,标记替换为项目符号 |
| 表格单元格 | 按阅读顺序保留为单独的段落 |
| 跟踪删除 | 掉了,因为 Word 显示它们 |
| 标签和换行符 | 成为一个单一的空间 |
| 粗体、斜体、颜色、字体 | 未携带 |
| 图像 | 未携带 |
| 页眉、页脚、页码 | 未携带 |
| 脚注和尾注 | 未携带 |
该表的上半部分是为什么这种转换仍然值得做的原因:其中没有任何东西必须猜测。 下半部分是不实现Word的价格。
跟踪的变化会发生什么?
删除消失,这是正确的,它需要说的事实是有趣的部分。
编辑了更改跟踪的文档将删除的文本保存在文件中 <w:delText> 在一个 <w:del> 元素。 Word 知道不要将其显示为当前文本。 除非有人考虑过,否则不会遍历每个文本节点的转换器。
以原文“截止日期为31月”为“4月30日”的段落进行测量:
with the rule: The deadline is 30 April.
without the rule: The deadline is 31 March30 April.
任何人都输入、一起跑步的每一句话,它们之间没有空间。 在合同或要约信上,这不是一个化妆品错误:它将文件的谈判历史发布给任何收到 PDF 的人。
值得了解,无论您使用什么工具。 如果您要向外发送转换后的文档,请检查您更改的日期或数字是否出现一次而不是两次。
编号列表会发生什么?
它又回来了,因为数字不在段落中。
列表段落携带 <w:numPr>,它指向另一个部分的编号定义。 该定义包含格式、起始值、缩进级别以及此列表是否继续之前的状态。 该段落本身包含文本,没有其他内容。
所以一个转换器只读文档部分知道段落是一个列表项,而不是它应该携带的标记。 渲染子弹是诚实的默认值:
• First point
• Second point
Ordinary paragraph
这很重要,当数字具有意义时。 “见步骤4”在程序中或协议中的编号条款中失去了其参考。 如果您的文档取决于其编号,则此转换是错误的,并且 Word 自己的导出是正确的。
桌子会发生什么?
细胞存活,网格没有。
表单元格包含 <w:p> 其他任何东西都像其他任何东西,所以文本以阅读顺序的普通段落到达。 两列区域和数字的表显示为:
Region | Q2 | EMEA | 412
四段,一个接一个,没有任何记录,前两个是标题行。 跨过表格意味着携带列宽、行结构、合并的单元格和边框,然后布置一个分页的网格,这是一个不同的更大的工具。
这在两个方向上都是相同的交易。 PDF to Word 会使一个表格变平,因为 PDF 从来没有一个;Word 到 PDF 会使它变平,因为重建一个是布局引擎。 在这两种情况下的诚实建议:如果表格是重点,请截图或保留原件。
为什么我的对齐选项卡的布局会崩溃?
因为标签是位置指令,没有制表符停止,就没有地方可以发送它。
<w:tab/> 意思是“前进到下一个标签停止”,这些止损是在段落的属性中定义的或从其样式继承的。 一个用自己的边距布局文本的转换器没有有意义的停止跳转,因此选项卡变成了一个单一的空格。 同样适用 <w:br/>:
input: Name <tab> Value <br> Next line
output: "Name Value Next line"
任何构建两列列表、签名块或带有选项卡的简单目录的人都将完全失去对齐方式。 这是转换后的文档看起来错误的更常见的方式之一,并且在源代码中是不可见的:文件看起来像普通段落,因为它就是这样。
如果对齐很重要,源文档中的真实表格转换也不会更好,但至少失败得更明显。
内置的PDF字体不能渲染哪些字符?
西欧拉丁语之外的任何东西,以及失败时都对哪个角色有过错保持沉默。
PDF 标准定义了每个阅读器的 14 种基本字体,并用 WinansiEncoding 编码,这是一个 256 字符的集合,记录在附件 D PDF 规范。 使用它们意味着无需嵌入字体,这使输出保持小,这意味着字母表是固定的。
测试与 pdf-lib,做绘图的库:
| 文本 | 结果 |
|---|---|
Quarterly report |
渲染 |
"Revenue" rose, he'd said 带花括号 |
渲染 |
| 用 em 破折号,U+2014 的句子 | 渲染 |
Chiffre d'affaires réalisé en Août |
渲染 |
Total: €1,249.50 |
渲染 |
Отчёт за квартал |
失败: WinAnsi cannot encode "О" (0x041e) |
Αποτελέσματα |
失败: WinAnsi cannot encode "Α" (0x0391) |
季度报告 |
失败: WinAnsi cannot encode "季" (0x5b63) |
四半期報告 |
失败: WinAnsi cannot encode "四" (0x56db) |
Revenue up 🚀 |
失败: WinAnsi cannot encode "🚀" (0x1f680) |
法语、德语、西班牙语、葡萄牙语、意大利语和北欧语言都很好,欧元符号、卷曲引号和 em 短划线也是如此。 俄语、希腊语、中文、日语、韩语、阿拉伯语、希伯来语、印地语和每个表情符号都不是。
该工具现在将错误命名为错误而不是说文档不能被转换,因为“删除该字符”是建议并且“出错”不是。 其中一个脚本中的文档需要一个包含覆盖它的字体的转换器,这意味着更大的 PDF 和不同的工具。
为什么 .doc 文件被拒绝?
因为 .doc 和 .docx 是共享三个字母的不同格式。
.docx 是 2007 年引入的 XML 的压缩包。 .doc 是一个可追溯到九十年代初期的复合二进制文件,文本在解析器必须走的结构中交错。 阅读一个不是阅读另一项的变体;它是一种单独的实现。
所以转换器检查扩展并说,而不是在不可读的zip上失败:
| 文件 | 它说什么 |
|---|---|
.doc |
那是旧格式。 打开它并先保存为 .docx |
.rtf、 .odt、 .pages |
不是 Word 文档。 导出为 .docx |
.pdf |
已经是 PDF ;使用另一个方向作为可编辑文件 |
在 Word、LibreOffice 或 Google Docs 中打开 .doc 并保存为 .docx 需要几秒钟,并且这些程序做得很好。
标题的大小如何,它们的深度如何?
按层次,大胆,一切都超过了第三层次。
样式名称是从段落中读取并归一化的,因为这两种拼写都存在于野外。 字写 Heading1; 几个文档生成器写入 heading 1。 两者都解决到相同的水平,并且 Title 被视为一级。
| 文件中的样式 | 用过的级别 |
|---|---|
Title、 Heading1、 heading 1 |
1 |
Heading2 |
2 |
Heading3 |
3 |
Heading4 通过 Heading9 |
3 |
ListParagraph、 BodyText,还有什么 |
正文 |
三个视觉层次是一个刻意的停止点。 与第三层区分的第四层需要另一个大小步骤,它开始与正文文本碰撞,或者重量或样式更改不提供基本字体。
PDF 将有多少页?
不是数字字向您显示,区别不是错误。
换行取决于字体,因此在12点的时代罗马同段占用的行数与11时的卡利布里不同。 边距不同。 行距不同。 决定线路结束位置的所有内容都已更改,因此分页会随之改变。
在一次测量中,一个标题的文档和十个大约 40 个单词的段落分别以两页 A4 的形式排列:第一个的页面:第一个的 39 行,在第二个的 2 个字的范围内,标题的设置为 20.4 的粗体,对 12 点的正文。
实际结果是页面引用中断。 “如在第7页所述”,转换后的文档中现在可以是第6页或第8页。 交叉引用自己的页面的文档应从 Word 中导出,其中布局是写引用的。
您应该什么时候使用 Word's 自己的导出?
每当外观或分页是内容的一部分时。 这比听起来更短,但它上的项目很重要。
| 使用 Word 的导出 | 使用转换器 |
|---|---|
| 设计文件:信头,简历,带品牌的报告 | 需要作为 PDF 的纯文本文档 |
| 任何有表格、图像、页眉或页脚的东西 | 笔记、文章、草稿、成绩单 |
| 编号的子句或交叉引用的页面 | 任何您都需要阅读订单的文件 |
| 非拉丁文中的文档 | 您不想在任何地方上传的文档 |
Word 文件,另存为,PDF 是一个真正的导出:绘制页面的相同布局引擎写入 PDF,所以您所看到的就是您所得到的。 浏览器中没有任何内容与之相匹配,因为浏览器中没有任何内容具有 Word 的布局引擎。
转换的情况是该表的最后一行,加上没有手头的字。
为什么会在浏览器中运行?
因为文档是人们转换的最个人化的文件,而这种转换不需要服务器所拥有的任何东西。
阅读一个zip,解析xml和绘图文本是浏览器本机做的所有事情。 文件从您的磁盘中读取到选项卡中,解压缩在那里,在那里布置,在那里写入 PDF,然后作为下载交还给。 没有请求携带文件,也没有任何副本留在任何地方。
有问题的文件是合同、简历、医疗信函、法律草案和论文。 传统的替代方案将它们上传到服务,将它们转换在您一无所知的机器上,并将它们保留在无人阅读的策略中描述的一段时间内。
限制是诚实的:仅限西欧文本,没有图像,除了标题和项目符号之外没有格式。 它们在您开始之前而不是之后可见,这是值得采取的交易,当替代方案是您不再控制的文档的外观更好看的 PDF 时。



