Python使用PIL把一段文字完美像word一樣排版

項目遇到一個問題,一段文字鞍盗,要生成在一個圖片上需了。文字多少,不知道般甲,可能有中英文混合肋乍,也有換行。但是沒有文字大小變化啥的敷存。目標墓造,要實現(xiàn)像word一樣的自動換行和分段。

難點如下:

1锚烦,PIL是不支持類似CSS一樣標簽的觅闽,如果想用簡單的類似CSS一樣東西搞定,我試過了涮俄,不行

2蛉拙,文章有換行,期望顯示出來每行前面空兩個字

3禽拔,文字里會有漢字刘离、英文和數(shù)字組成,要保證每行差不多一樣長睹栖。

話不多說硫惕,先上一個代碼片段,如何安裝PIL以及引入包啥的這里就不多說了野来,先上一段代碼

insert = "垚紇"http://定義一個第一段空兩個漢字的占位符恼除,隨便找的兩個字
font_body = data["body"]//取到正式內容
font_body_tmp = font_body
i = 0
font_content = []//定義一個列表,用來裝分好行的數(shù)據(jù)
font_content_str = ""
fontnum = 17//每行字數(shù)
n = 0
addstep = 0
for item in font_body_tmp://循環(huán)正文里面的每一個字
    addstr = insert + item
    insert = ""
    i += 1 + addstep
    addstep = 0
    if (item == "\n")://遇到回車曼氛,直接跳行
        i = fontnum
        addstr = ""
        n = 1
        insert = "垚紇"
        addstep = 2
    font_content_str += addstr
    if (i % fontnum == 0)://到了切斷分行時候了
        cop = re.compile("[^a-z^A-Z^0-9]")
        coptmp = cop.sub("", font_content_str)
        addnum = int((len(coptmp)) / 2)//這里檢查了這一行里有多少英文和數(shù)字豁辉,由于是半角,所以增加幾個字填充一下
        if (addnum == 0 or n == 1)://準備放入正式數(shù)據(jù)
            font_content.append(font_content_str)
            font_content_str = ""
            n = 0
        else://這行里有英文和數(shù)字舀患,再補幾個字
            i -= addnum
            n = 1
    font_content.append(font_content_str)//成品的每一行列表

這里大概思路是這樣的:
把文本內容按照每行多少個字切斷徽级,拼裝程列表,但是如果遇到回車聊浅,就直接切斷了餐抢,但是文章第一行和切斷后的第一行现使,都需要兩個字填充一下,作為空兩格的占位旷痕。如果這行里有英文和數(shù)字碳锈,查一下多少個,2個算一個字欺抗,這樣一行就不足預設的了售碳,那么再補幾個字進來,最終切片完成绞呈。下面代碼是貼到圖片上的代碼片段:

style_2 = ImageFont.truetype("/code/fonts/SOURCEHANSANSCN-REGULAR.OTF", 60)//設定字體
draw = ImageDraw.Draw(layer)//畫布圖層
fontstarth, step = 286, 90//設定Y軸位置贸人,以及每一行空多少位置
for font_item in font_content://循環(huán)內容列表
    if (len(font_item) > 2 and font_item[0] == "垚" and font_item[1] == "紇")://判斷是否為新段落
        font_item = font_item[2:]//去掉占位符
        addpix = 110//整行前移
    else://是尾行
        addpix = 0//不移動
    draw.text((53 + addpix, fontstarth), font_item, (255, 255, 255), font=style_2)//逐行貼圖
    fontstarth += step//Y軸位置下移

代碼不多,但是非常繞人报强,上一張測試圖灸姊,文字內容如下:
油坊橋主臥求合租,18023452647560要求abc干凈衛(wèi)生秉溉,男女不限力惯,1500232345656745付三押一。\n周末聯(lián)系召嘶。油坊橋主臥求合租父晶,要求干凈衛(wèi)生,\n男女不限弄跌,1500付三押一甲喝。周末聯(lián)系。油坊橋主臥求合租铛只,要求干凈衛(wèi)生埠胖,\n男女不限,1500付三押一淳玩。


上面文字的貼圖
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末直撤,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子蜕着,更是在濱河造成了極大的恐慌谋竖,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,692評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件承匣,死亡現(xiàn)場離奇詭異蓖乘,居然都是意外死亡,警方通過查閱死者的電腦和手機韧骗,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,482評論 3 392
  • 文/潘曉璐 我一進店門嘉抒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人袍暴,你說我怎么就攤上這事众眨∥漳粒” “怎么了?”我有些...
    開封第一講書人閱讀 162,995評論 0 353
  • 文/不壞的土叔 我叫張陵娩梨,是天一觀的道長。 經常有香客問我览徒,道長狈定,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,223評論 1 292
  • 正文 為了忘掉前任习蓬,我火速辦了婚禮纽什,結果婚禮上,老公的妹妹穿的比我還像新娘躲叼。我一直安慰自己芦缰,他們只是感情好,可當我...
    茶點故事閱讀 67,245評論 6 388
  • 文/花漫 我一把揭開白布枫慷。 她就那樣靜靜地躺著让蕾,像睡著了一般。 火紅的嫁衣襯著肌膚如雪或听。 梳的紋絲不亂的頭發(fā)上探孝,一...
    開封第一講書人閱讀 51,208評論 1 299
  • 那天,我揣著相機與錄音誉裆,去河邊找鬼顿颅。 笑死,一個胖子當著我的面吹牛足丢,可吹牛的內容都是我干的粱腻。 我是一名探鬼主播,決...
    沈念sama閱讀 40,091評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼斩跌,長吁一口氣:“原來是場噩夢啊……” “哼绍些!你這毒婦竟也來了?” 一聲冷哼從身側響起滔驶,我...
    開封第一講書人閱讀 38,929評論 0 274
  • 序言:老撾萬榮一對情侶失蹤遇革,失蹤者是張志新(化名)和其女友劉穎氨距,沒想到半個月后烘嘱,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 45,346評論 1 311
  • 正文 獨居荒郊野嶺守林人離奇死亡庙睡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,570評論 2 333
  • 正文 我和宋清朗相戀三年著角,在試婚紗的時候發(fā)現(xiàn)自己被綠了揪漩。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,739評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡吏口,死狀恐怖奄容,靈堂內的尸體忽然破棺而出冰更,到底是詐尸還是另有隱情,我是刑警寧澤昂勒,帶...
    沈念sama閱讀 35,437評論 5 344
  • 正文 年R本政府宣布蜀细,位于F島的核電站,受9級特大地震影響戈盈,放射性物質發(fā)生泄漏奠衔。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,037評論 3 326
  • 文/蒙蒙 一塘娶、第九天 我趴在偏房一處隱蔽的房頂上張望归斤。 院中可真熱鬧,春花似錦刁岸、人聲如沸脏里。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,677評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽迫横。三九已至,卻和暖如春根吁,著一層夾襖步出監(jiān)牢的瞬間员淫,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,833評論 1 269
  • 我被黑心中介騙來泰國打工击敌, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留介返,地道東北人。 一個月前我還...
    沈念sama閱讀 47,760評論 2 369
  • 正文 我出身青樓沃斤,卻偏偏與公主長得像圣蝎,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子衡瓶,可洞房花燭夜當晚...
    茶點故事閱讀 44,647評論 2 354

推薦閱讀更多精彩內容