golang markdown轉(zhuǎn)Pdf

整體流程是 markdown 轉(zhuǎn) html 在html中設(shè)置字體盯捌,最后將html轉(zhuǎn)為pdf
markdown的中文部分如何不設(shè)置字體就會出現(xiàn)亂碼的問題.
需要在轉(zhuǎn)Html后設(shè)置字體婆赠,下載字體文件 STSong.ttf 放到根目錄下

package main

import (
    "bytes"
    "fmt"
    "io/ioutil"
    "log"
    "github.com/go-rod/rod"
    "github.com/go-rod/rod/lib/proto"
    "github.com/yuin/goldmark"
)

func main() {
    markdownContent := `
# Hello, World!
# 你好摘符,世界僵刮!
`

    // 將Markdown轉(zhuǎn)換為HTML
    htmlContent, err := markdownToHTML(markdownContent)
    if err != nil {
        log.Fatalf("Failed to convert markdown to HTML: %v", err)
    }
    // 在HTML中添加字體設(shè)置
    htmlContent = addFontStyle(htmlContent)
    // 使用go-rod/rod生成PDF
    pdfContent, err := htmlToPDF(htmlContent)
    if err != nil {
        log.Fatalf("Failed to generate PDF: %v", err)
    }

    // 將PDF內(nèi)容保存到文件
    if err := ioutil.WriteFile("output.pdf", pdfContent, 0644); err != nil {
        log.Fatalf("Failed to save PDF to file: %v", err)
    }

    fmt.Println("PDF generated successfully.")
}

func addFontStyle(htmlContent string) string {
    // 在HTML頭部添加字體樣式
    fontStyle := `
    <meta charset="UTF-8">
        <style>
        @font-face {
            font-family: 'STSong';
            src: url('STSong.ttf') format('truetype');
        }
        body {
            font-family: 'STSong', Arial, sans-serif;
        }
    </style>
    `
    return "<!DOCTYPE html><html><head>" + fontStyle + "</head><body>" + htmlContent + "</body></html>"
}

func markdownToHTML(markdown string) (string, error) {
    var buf bytes.Buffer
    md := goldmark.New()
    if err := md.Convert([]byte(markdown), &buf); err != nil {
        return "", err
    }
    return buf.String(), nil
}




func htmlToPDF(htmlContent string) ([]byte, error) {
    // 創(chuàng)建瀏覽器實例
    fmt.Println(htmlContent)
    browser := rod.New().MustConnect()
    defer browser.MustClose()

    // 在瀏覽器實例上創(chuàng)建新頁面
    page := browser.MustPage("data:text/html," + htmlContent)

    // 設(shè)置PDF生成的參數(shù)
    pdfParams := proto.PagePrintToPDF{
        Landscape:           false,
        DisplayHeaderFooter: false,
        PrintBackground:     true,
    }

    page.SetUserAgent(&proto.NetworkSetUserAgentOverride{
        AcceptLanguage: "chinese",
    })
    // 調(diào)用Page.PDF方法生成PDF內(nèi)容
    pdfReader, err := page.PDF(&pdfParams)
    if err != nil {
        return nil, err
    }

    // 讀取生成的PDF內(nèi)容
    pdfContent, err := ioutil.ReadAll(pdfReader)
    if err != nil {
        return nil, err
    }

    return pdfContent, nil
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市却盘,隨后出現(xiàn)的幾起案子新锈,更是在濱河造成了極大的恐慌宏榕,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,270評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件碱鳞,死亡現(xiàn)場離奇詭異桑李,居然都是意外死亡,警方通過查閱死者的電腦和手機窿给,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評論 3 395
  • 文/潘曉璐 我一進店門贵白,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人崩泡,你說我怎么就攤上這事禁荒。” “怎么了角撞?”我有些...
    開封第一講書人閱讀 165,630評論 0 356
  • 文/不壞的土叔 我叫張陵呛伴,是天一觀的道長。 經(jīng)常有香客問我谒所,道長热康,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,906評論 1 295
  • 正文 為了忘掉前任劣领,我火速辦了婚禮褐隆,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘剖踊。我一直安慰自己庶弃,他們只是感情好衫贬,可當我...
    茶點故事閱讀 67,928評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著歇攻,像睡著了一般固惯。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上缴守,一...
    開封第一講書人閱讀 51,718評論 1 305
  • 那天葬毫,我揣著相機與錄音,去河邊找鬼屡穗。 笑死贴捡,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的村砂。 我是一名探鬼主播烂斋,決...
    沈念sama閱讀 40,442評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼础废!你這毒婦竟也來了汛骂?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,345評論 0 276
  • 序言:老撾萬榮一對情侶失蹤评腺,失蹤者是張志新(化名)和其女友劉穎帘瞭,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蒿讥,經(jīng)...
    沈念sama閱讀 45,802評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡蝶念,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,984評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了芋绸。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片祸轮。...
    茶點故事閱讀 40,117評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖侥钳,靈堂內(nèi)的尸體忽然破棺而出适袜,到底是詐尸還是另有隱情,我是刑警寧澤舷夺,帶...
    沈念sama閱讀 35,810評論 5 346
  • 正文 年R本政府宣布苦酱,位于F島的核電站,受9級特大地震影響给猾,放射性物質(zhì)發(fā)生泄漏疫萤。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,462評論 3 331
  • 文/蒙蒙 一敢伸、第九天 我趴在偏房一處隱蔽的房頂上張望扯饶。 院中可真熱鬧,春花似錦、人聲如沸尾序。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,011評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽每币。三九已至携丁,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間兰怠,已是汗流浹背梦鉴。 一陣腳步聲響...
    開封第一講書人閱讀 33,139評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留揭保,地道東北人肥橙。 一個月前我還...
    沈念sama閱讀 48,377評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像秸侣,于是被迫代替她去往敵國和親存筏。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,060評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 一塔次、概念 參考網(wǎng)頁字體Serif和Sans-serif的區(qū)別及瀏覽器字體的設(shè)置CSS Font知識整理總結(jié) 1.F...
    合肥黑閱讀 6,272評論 0 12
  • SolidWorks圖紙轉(zhuǎn)PDF字體丟失匕得,導出失敗继榆,亂碼 將SolidWorks圖紙轉(zhuǎn)換成PDF的時候,遇到字體丟...
    極客Geek閱讀 14,818評論 0 0
  • CSS 高級技巧 1. 精靈圖 為什么需要精靈圖汁掠? 精靈圖的使用 精靈圖課堂案例 1 精靈圖 1.1 為什么需要精...
    Tutuls閱讀 222評論 0 0
  • 1 概述 最近項目中要添加表情包聊天的功能(文本和表情包要混合在一起)略吨,最直接的解決方案應(yīng)該就是圖文混排,對于這個...
    小蕓論閱讀 8,491評論 0 3
  • 前端07班 王 O(∩_∩)O哈哈~又到了一年一度,一日一次寫博客的激動人心的日子乞榨,今天的博客其實特簡單秽之,就是搜集...
    ea203453e188閱讀 475評論 7 9