文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

如何使用 golang 在网络打印机上打印文件或格式化文本

2024-04-05 00:10

关注

学习Golang要努力,但是不要急!今天的这篇文章《如何使用 golang 在网络打印机上打印文件或格式化文本》将会介绍到等等知识点,如果你想深入学习Golang,可以关注我!我会持续更新相关文章的,希望对大家都能有所帮助!

问题内容

下面的代码应该在网络中的带标签打印机上打印一些格式化文本。

我已经创建了一个 pdf,我想将其发送到打印机,但我只收到错误 - “介质错误...”

注意:打印机可以很好地打印标准字体/标准尺寸文本,但我也应该能够打印格式化文本。

简单的文本正在 brother ql-500 上运行。但如果我发送 pdf 内容,我只会在打印机上收到错误,而不会在代码中收到错误。原始设置也不起作用。

有人有解决方案和示例代码吗?

图书馆:

示例代码:

package main

import (
    "bytes"
    "flag"
    "fmt"
    "log"
    "runtime"
    "time"

    prt "github.com/alexbrainman/printer"

    "github.com/jung-kurt/gofpdf"
)

func main() {
    log.setflags(log.lstdflags | log.llongfile)
    printformat := flag.string("format", "pdf", "print the pdf content")
    savepdf := flag.bool("s", false, "save pdf only")
    flag.parse()

    // pdf output
    if *savepdf {
        // create pdf
        pdf := newreport()

        // save pdf to disc
        pdf.outputfileandclose("report.pdf")
    } else {
        var buf []byte
        var datatype string

        // switch between formats
        switch *printformat {
        case "text":
            buf = []byte("text report")
            datatype = "text"
        case "pdf":
            // create pdf
            pdf := newreport()
            var b bytes.buffer
            err := pdf.output(&b)
            if err != nil {
                fmt.println(err)
            }
            buf = b.bytes()
            datatype = "raw"
        }

        // send content to printer
        fmt.println(string(buf))
        printcontent(datatype, buf)
    }
}

func newreport() *gofpdf.fpdf {
    pdf := gofpdf.newcustom(&gofpdf.inittype{
        unitstr:        "mm",
        size:           gofpdf.sizetype{wd: 62, ht: 90},
        orientationstr: "p",
    })

    // pagebreak
    pdf.setautopagebreak(false, 0)

    // fileinformations
    pdf.settitle("test pdf", true)

    // page margin
    pdf.setmargins(1, 1, 1)

    // we start by adding a new page to the document.
    pdf.addpage()

    // utf8 from file
    trans := pdf.unicodetranslatorfromdescriptor("")

    // title
    pdf.setfont("arial", "b", 6)
    pdf.cellformat(0, 2, trans("test pdf"), "", 0, "c", false, 0, "")

    // the `ln()` function moves the current position to a new line, with
    // an optional line height parameter.
    pdf.ln(-1)

    pdf.setfont("arial", "", 5)
    pdf.cellformat(0, 2, time.now().format("02.01.2006   15:04"), "", 0, "c", false, 0, "")
    pdf.ln(-1)
    pdf.setfont("arial", "b", 5)
    pdf.cellformat(0, 2, trans("new text in pdf"), "", 0, "c", false, 0, "")
    pdf.ln(3)

    return pdf
}

func printcontent(datatype string, content []byte) {
    if runtime.goos == "windows" {
        name, err := prt.default() // returns name of default printer as string
        if err != nil {
            fmt.println(err)
        }
        fmt.println(name)
        p, err := prt.open(name) // opens the named printer and returns a *printer
        if err != nil {
            fmt.println(err)
        }

        err = p.startdocument("test", datatype)
        if err != nil {
            fmt.println(err)
        }
        err = p.startpage() // begin a new page
        if err != nil {
            fmt.println(err)
        }

        n, err := p.write(content) // send some text to the printer
        if err != nil {
            fmt.println(err)
        }
        fmt.println("num of bytes written to printer:", n)

        err = p.endpage() // end of page
        if err != nil {
            fmt.println(err)
        }
        err = p.enddocument() // end of document
        if err != nil {
            fmt.println(err)
        }
        err = p.close() // close the resource
        if err != nil {
            fmt.println(err)
        }
    }
}

用法:

go run main.go -s
go run main.go -format=text
go run main.go -format=pdf


解决方案


您正在使用的打印库似乎不支持 PDF。 https://github.com/alexbrainman/printer/issues/6

我也有同样的想法,试图找到一种在 Go 中打印 PDF 的方法。我目前正在尝试 https://github.com/jadefox10200/goprint

以上就是《如何使用 golang 在网络打印机上打印文件或格式化文本》的详细内容,更多关于的资料请关注编程网公众号!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯