0%

最近在 Linux OpenSUSE 上运行 pdfbox 工具,将 Pdf 转成图片,会遇到找不到字体的警告提示。

1
[15:02:34.732] WARN  org.apache.pdfbox.pdmodel.font.PDTrueTypeFont 220 <init> - Using fallback font 'LiberationSans' for 'Arial,Bold'

所以这篇文章讲述一下如何在 OpenSUSE 系统上安装字体字库。

查看 OpenSUSE 版本号

1
2
3
4
5
6
7
8
9
10
11
# cat /etc/os-release 
NAME="openSUSE Leap"
VERSION="42.3"
ID=opensuse
ID_LIKE="suse"
VERSION_ID="42.3"
PRETTY_NAME="openSUSE Leap 42.3"
ANSI_COLOR="0;32"
CPE_NAME="cpe:/o:opensuse:leap:42.3"
BUG_REPORT_URL="https://bugs.opensuse.org"
HOME_URL="https://www.opensuse.org/"

查看当前系统已经安装的字体

1
2
3
4
5
# fc-list | less

/usr/share/fonts/truetype/DejaVuSans-ExtraLight.ttf: DejaVu Sans,DejaVu Sans Light:style=ExtraLight
/usr/share/fonts/truetype/OpenSans-CondLightItalic.ttf: Open Sans,Open Sans Condensed Light:style=Condensed Light Italic,Italic
...

获取字体

大多数的字体,在 Windows 系统上都可以找到。

字体目录所在位置:C:\Windows\Fonts

安装字体

OpenSUSE 的字库位置在 /usr/share/fonts/truetype,通过刚才命令也可以看出来。

然后再把 Windows 下面的字体拷贝到上述目录中。

重新加载新添加的字体:

1
fc-cache -fv

最后,要让java应用程序生效,还得重新启动一个应用。

[ 值 for 元素 in 可迭代对象 if 条件 ] # 值可以是函数表达式

[ 值1 if 条件1 else 值2 for 元素 in 可迭代对象] # 将 if-else 语句写入列表解析式

1
2
3
4
5
6
7
8
9
10
11
ret = [0.37, -1.9, 0.6, 2.54, 0.51, 1.09, 1.79, -1.2, -0.14, -0.5, -2.37, 0.0, -0.22, -0.15, 4.28, -0.85, -1.79, -0.44, -0.15, 2.34]

# 例:从收益率序列中提取出负的收益率
[i for i in ret if i < 0]

[-1.9, -1.2, -0.14, -0.5, -2.37, -0.22, -0.15, -0.85, -1.79, -0.44, -0.15]

# 正收益率赋值为1,负收益率赋值为0
[1 if i > 0 else 0 for i in ret]

[1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]
1
2
3
4
ret_set = {(0.37, -1.9, 0.6, 2.54, 0.51), (1.09, 1.79, -1.2, -0.14, -0.5), (-2.37, 0.0, -0.22, -0.15, 4.28), (-0.85, -1.79, -0.44, -0.15, 2.34)}

# 如何将元素打平
[i for t in ret_set for i in t]

内循环在外循环后面

模块,以.py结尾,可以定义变量函数或者

引入模块

1
import module1 [, module2 [, ...moduleN]]
1
import  module1[,module2[,....moduleN]] as ...  # 对模块重新命名,一般用于简化模块名

调用模块

通过import语句引入后调用

调用函数,必须通过模块名.函数名的形式来调用。

1
2
3
4
5
import time

time.tzname

('CST', 'CST')

通过from…import语句只导入一个指定的部分

1
from module1 import [,funName1 [, ...funNameN]]
1
2
3
4
5
from time import tzname

tzname

('CST', 'CST')

通过from…import *语句导入所有内容

这时调用函数不需要使用模块名.函数名的方式来调用。

1
2
3
4
5
from time import *

tzname

('CST', 'CST')