将.docx文件转换为纯文本并保留换行符以维护对源文档的行号引用:howto和含义?


9

我正在将MS Word内容导出为纯文本,以便与文本和文件实用程序一起使用。我有一个约束,其中在MS软件中已启用行编号功能,并且最终输出中对行编号的任何引用都必须与该编号匹配。因此输入“编号行”:

在此处输入图片说明EA坡

显然,对于Word来说,这种编号不会在换行符处打断,而是在右边距(或其他位置)后打断“行” 。像这样的脚本docx2txt,默认情况下似乎并没有解决这个问题,并在换行符处换行。因此,如果我使用grep -n编号,则行将与源行号功能不匹配,如上所示。从文档中还不清楚,在这种情况下,我将需要如何编辑Perl脚本来转换文件:

our $config_newLine = "\n"; # Alternative is "\r\n".
our $config_lineWidth = 80; # Line width, used for short line justification.

我尝试替代\n\r\n但这似乎对我不起作用。因此,我采取了以下设置(在v.2013,64pc上另存为纯文本格式)直接从Word导出文档:

  • Unicode(UTF-8)
  • 用(CR / LF)插入换行符+结束行
  • 允许字符替换

现在的确,当我使用这些.txt文件时,源编号功能中的行号与grep -n输出之间的匹配非常完美。


  • 是否有任何我应该了解的特定配置/过程docx2txt或类似的命令行实用程序,该实用程序可以让我将.docx文件转换为纯文本,同时保留换行符,而无需像以前那样依靠Word
  • 关于换行符和格式设置,将MS Word文档(可能包含重音符号)导出为纯文本以与文件/文本实用程序一起使用的最佳实践是什么;我为导出选择的设置是否有负面影响,即插入CR / LF?

样品

根据建议,我提供了一个示例。在这个rar 档案中,我将.docx文件与简单的段落捆绑在一起,并将其导出的.txt文件使用Word与上述选项捆绑在一起。可以将后者与docx2txt源文件的默认运行进行比较。


你能给我们例子文件吗?
cuonglm

您不能从Word将其另存为txt文件吗?如果它给您带来不好的格式,那么我建议您使用vim或emacs来解决问题(因为我确定它是有模式的)。
史蒂文·沃尔顿

1
@Steven Walton谢谢,是的,当我从Word导出到txt时,它可以工作。但是我不想使用Word。我希望我只能依靠脚本来做到这一点。我想要一个批处理过程。

@Gnouc已提供示例。谢谢!

Answers:


8

docx2txt处理docx文件中的信息,该文件是一组XML文件。

关于换行,.docxXML数据仅包含有关段落和硬中断的信息,而不包含软中断的信息。软中断是用特定的字体,字体大小和页面宽度呈现文本的结果。docx2txt通常只尝试在80列中填充文本(可配置80列),而不考虑字体和字体大小。如果您.docx包含Unix / Linux上没有的Windows系统中的字体信息,那么.txt尽管通过Open / LibreOffice 进行的导出工作很好,但通过Open / LibreOffice 导出到该布局的可能性也不大。

因此,docx2txt或其他任何命令行实用程序,包括命令行驱动的Open / LibreOffice处理,都不能保证将文本转换为与从Worddos²导出相同的布局。

如果您希望(或受客户的要求而被迫)完全像Word一样进行渲染,那么根据我的经验,只有一种方法:让Word进行渲染。当遇到与您的³类似的问题,并且使用其他工具(包括OpenOffice)导致结果不兼容时,我转而在主机Linux服务器上安装Windows VM。在客户端VM上,程序会观察主机上要转换的传入文件,这将启动并驱动Word进行转换,然后将结果复制回。

有关仅使用CR / LF或LF或UTF-8或其他某种编码的决定.txt很大程度上取决于如何使用生成的文件。如果生成的文件在Windows上使用,我肯定会使用CR / LF,UTF-8和UTF-8 BOM。Linux上的现代程序能够推断出文件为UTF-8,但不会在BOM上打扰和/或使用该信息。如果预先知道所有目标应用程序的兼容性,则应该对其进行测试。

¹ 这种不兼容性是我的一些朋友尽管愿意的主要原因,但仍然无法从Windows转换为Linux的主要原因。他们必须不时使用MicroSoft Word,例如Open / LibreOffice,以解决与客户交换的文本。
² 您可以安装Word文件中使用的所有字体,有时某些文本可能会很幸运。
³ 从R渲染.doc/.docx
PDF⁴ 该程序使用GUI自动化-就像有人单击其菜单一样-不会尝试通过API驱动Word。我很确定后者也可以完成,并且如果Word升级,它的优点是不会破坏其他功能


谢谢,这真是有见地!我不熟悉该格式,但是我从中调用了脚本vim,我可以看到它确实与xml有关-我应该进一步研究它。没想到字体,甚至连字都没想到。同样,在某些操作过程中,我收到了来自文本编辑器的消息,抱怨抱怨BOM,因此我将阅读链接(因为我不知道这是什么)。我为您的VM解决方案感到惊讶!我对GUI自动化有些熟悉-在复制基本映像之后,我已经看到它曾经用来构建工作站。没想到这个...

到底是有人要来SOHO这样的任务,可能需要内化的几个许可证的成本。也许有一天,他们会按使用API​​进行分层。软中断上的折线完全改变了使用grep;之类的工具的动力。如果行很长,则会降低输出的“精度”。我想约束因内容的性质和使用方式而异。另一方面,如果文档不依赖此处的Word编号功能,则不会出现此类问题。建立包含遗留材料的文档框架是一项严肃的工作。干杯!
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.