读取.docx文件以提取文本以及文本的字体和其他格式信息

2024-04-26 02:15:19 发布

您现在位置:Python中文网/ 问答频道 /正文

正如问题所述,我的目标是找到一个python库,从.docx文件中提取文本和字体信息。例如,对于以下文本:“helloworld”我需要能够读取字符串hello是粗体而不是斜体,字符串world是粗体而不是斜体。除了知道文本是粗体还是斜体,我还需要知道其他信息,如大小、颜色、字体类型(如ariel、times new roman)等。我需要能够读取整个.docx文件并提取信息

我曾尝试使用PythonDocx库,并且能够提取文本,但无法提取.docx文件中的相关字体信息。例如,在以下代码中:

import docx
doc = docx.Document('cg0002.docx')
for para in doc.paragraphs:
    for run in para.runs:
        font = run.font
        is_bold = font.bold

我会得到字体,并且粗体为“无”。经过进一步研究,我了解到您不能使用库来阅读.docx字体,但您必须自己指定它们。有没有其他的图书馆可以用来实现我的目标

我愿意做出妥协:我并不特别坚持使用python来解决这个问题。我可以使用任何其他语言,如java、javascript、c/c++、powershell等。我还可以将文档转换为其他格式,如pdf,如果这样可以更容易地提取信息,前提是文档保持完整(例如,我可以尝试将其上传到谷歌文档,并使用appscript尝试提取文本,但一些字体在使用谷歌文档查看后不会保留,因此我不想这样做


Tags: 文件run字符串in文档文本信息目标
1条回答
网友
1楼 · 发布于 2024-04-26 02:15:19

对于DocX来说,最好使用VBA来收集细节

然而,一个“潜在的”替代方法可能是通过从写字板导出到基本RTF来简单地删除任何样式覆盖。然后查看目标块的重定义特征

注意:-根据转换情况,这可能不是100%可靠的,以实现您的目标

虽然我们可以从命令行使用写字板将DocX转换为PDF,但如果不使用VBS宏,我们无法将DocX转换为RTF,但这是另一个问题

enter image description hereenter image description here

从页眉可以看到CodePage=1252&;2057=英国(英国)英国:-)

按眼睛分类 \b\f0\fs24\lang9 Hello \b0\i World\ul\i0 !\ulnone\fs22\par

\b - Is the start of Bold
\f0 - Calibri in the given language (BEWARE here 0 is an index NOT a stop)
\fs24 - Is points x 2 so the text here is 12 point
\lang9 - I forget at the moment, awaiting correction in comments :-)
 Hello - Has both a leading and trailing space (leading is to be ignored)
\b0 - My BAD, boldening STOPS, AFTER the space between the words
\i - Start italics (ignore the space before World)
\ul - Start underlining
\i0 - Stop italics (ignore the space before !)
\ulnone - Stop underline (don't ask me why not \ul0)
\fs22 - I will let you guess the default page font height but by now you know it is not 22

\par - THE END, "That's all Folks!" ™

p.S.

我重新访问了源代码,进行了2次更正,看看您是否能够解决这两个更改。第二个的“我的”线索在上面,但在使用正则表达式时很容易让你绊倒

\b\f0\fs22\lang9 Hello,\i \b0 World\ul\i0 !\ulnone\par

虽然它最终应该是

\b\f0\fs22\lang9 Hello,\b0 \i World\ul\i0 !\ulnone\par

相关问题 更多 >