请选择 进入手机版 | 继续访问电脑版

LibreOffice 中文社区

 找回密码
 马上加入

扫一扫,访问微社区

QQ登录

只需一步,快速开始

搜索
开启左侧

[已解决] 关于centos下docx转pdf后,左侧留白区域出现数字

[复制链接]
canyisama 发表于 2020-3-26 15:52:26 | 显示全部楼层 |阅读模式
问题描述:
1.部分word文档转换pdf后,在pdf每页左侧留白处都多了些数字(5,10,15 等距分布),而源word文件中并没有看到这些数字,所以也不知如何修改word来解决问题(本次会提供附件);2.部分word文档转换pdf后,在pdf页眉处有明显横线.

重现步骤:
2020-3-26 15:41:25 更新libreoffice,下载客户源word文档,在liunx下执行转换命令

当前的行为和结果:
同一文件固定会出现相同问题

期望的行为和结果:
所见即所得,转换pdf后与word所见效果一致.

操作系统和软件版本:
centos_7_02_64



Name        : libreoffice
Arch        : x86_64
Epoch       : 1
Version     : 5.3.6.1
Release     : 21.el7


用于测试的附件(非必须):
2.7z (16.52 KB, 下载次数: 8)
suokunlong 发表于 2020-3-26 17:36:02 | 显示全部楼层
1. 显示的那个数字是行编号,选项位于:工具 > 行编号。

2. 这个文件看上去是用 WPS 创建的。用 MSO 打开,不显示行编号,但是用 LibreOffice 打开,会显示行编号。但这不一定就是 LibreOffice 的问题。

3. 为了判断到底是不是 LibreOffice 的问题,我将这个文件用zip解压缩,找到 word/document.xml,用 Firefox 查看,找到了如下属性:
[XML] 纯文本查看 复制代码
<w:sectPr>
  ...
  <w:lnNumType w:countBy="0" w:distance="360"/>
  ...
</w:sectPr>


这个 w:lnNumType 正是 OOXML 标准中用于控制是否显示行编号的,其中允许的属性值可在这里找到。其中 countBy 是用于指定编号的每隔多少个才显示一次,比如该链接中给出的例子:
[XML] 纯文本查看 复制代码
<w:sectPr>
    …  <w:lnNumType w:countBy="1" />
</w:sectPr>


This content specifies that line numbers shall be included on each line, restart on each page (the default), be placed automatically based on the text (the default),
and shall restart at one (the default).

也就是说,countBy="1" 表示每行都显示行编号。我注意到,以上的文档中 countBy 的值为 0, 问题可能就出在这里。那么,countBy="0"是个啥呢?

请见这里,其中说道:

    c. The standard states that the countByattribute can be any integer value.
    Word restricts the contents of this attribute to avalue between 1 and 100 inclusive.

意思是说,OOXML 标准规定 countBy 可以为任意整数值,包括0;而微软 MSO 自己限制 Word 中只允许这个值为1-100。
如果我的理解没有错的话,这也正解释了为什么这个文档用 MSO 打开不显示行号,我认为是因为 0 不是一个 Word 可接受的值,因此被故意忽略了,被解释为不显示行号。而 LibreOffice 显示了行号,是因为它认文档中存在 w:lnNumType,因此应当显示行号,而 countBy="0", 所以不知道隔几行显示一次行号,它就退回自己的默认设置,每隔 5 行显示一次行号。

我猜测,如果用 MSO 创建文档,如果设置为不显示行编号的情况下,它是不会插入 w:lnNumType 这一行的,LibreOffice 也是同样不会插入;而 WPS 可能给每个文档都显性插入这个行,然后聪明地用
countBy="0" 来表示关闭行编号,1 以上表示显示行编号?其实,如果不需要显示行编号,WPS 就不应该插入 w:lnNumType 这一行。它插入了这一行,然后让 countBy="0" ,这样的情况下其文档用 MSO 打开时确实能显示一致,但其他遵循 OOXML 标准的办公软件就该挨骂了。

因此我认为,解决这个问题的方法应当是,当检测到 w:lnNumType,但 countBy="0" 的情况下,就解释为不显示行编号。

我来尝试给上游报告个 bug,但开发者不一定会采纳。

ps. 2020-03-27 更新:我已经向上游报告了 bug,已经有人愿意提交代码改进这个问题,希望很快就会修复。
开放,包容,奉献。
suokunlong 发表于 2020-3-26 18:00:07 | 显示全部楼层
开放,包容,奉献。
 楼主| canyisama 发表于 2020-3-26 19:15:47 | 显示全部楼层
suokunlong 发表于 2020-3-26 18:00
已报告到 bugzilla:
Bug 131594 - FILEOPEN DOCX: Do not display line numbering if w:lnNumType is set  ...

感谢解答,辛苦了
驿窗 发表于 2020-3-27 10:19:02 | 显示全部楼层
本帖最后由 驿窗 于 2020-3-29 09:52 编辑
suokunlong 发表于 2020-3-26 17:36
1. 显示的那个数字是行编号,选项位于:工具 > 行编号。

2. 这个文件看上去是用 WPS 创建的。用 MSO 打开 ...

你这解答,可以用两个字形容:专业!
加个叹号~
回复的内容有很大的科普作用,可以修正很多人的认识,我看看后面怎么转发到其它地方~
开源/Linux大众化,从驿窗开始!
suokunlong 发表于 2020-3-27 12:07:02 | 显示全部楼层
驿窗 发表于 2020-3-27 10:19
你这解答,可以用两个字形容:专业!
加个叹号~

我对OOXML标准也不是很了解,欢迎大家来喷。
开放,包容,奉献。
驿窗 发表于 2020-3-29 09:54:07 | 显示全部楼层
suokunlong 发表于 2020-3-27 12:07
我对OOXML标准也不是很了解,欢迎大家来喷。

关于ooxml标准的问题,我倒是研究了很长一段时间,回头找机会整理一下,发出来~

开源/Linux大众化,从驿窗开始!
 楼主| canyisama 发表于 2020-3-30 10:41:53 | 显示全部楼层
问题2 转换后顶部有横线近期没出现了,虽然我还是觉得还是文档内容的原因(笑),后期复现了我再传附件吧~
suokunlong 发表于 2020-4-2 21:19:55 | 显示全部楼层
开放,包容,奉献。
您需要登录后才可以回帖 登录 | 马上加入

本版积分规则

Archiver|手机版|小黑屋|LibreOffice 中文社区 ( 粤ICP备13080851号-4 )

GMT+8, 2020-5-30 10:06 , Processed in 0.139740 second(s), 36 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表