如何使用 golang 在网络打印机上打印文件或格式化文本
Posted
技术标签:
【中文标题】如何使用 golang 在网络打印机上打印文件或格式化文本【英文标题】:How to print a file or formatet text on a network printer with golang 【发布时间】:2019-06-04 21:44:18 【问题描述】:下面的代码应该在网络中带有标签的打印机上打印一些格式化的文本。
我创建了一个 PDF,我会发送到打印机,但我只收到错误 - “错误的介质...”
注意:打印机可以打印标准字体/标准大小的文本,但我应该也可以打印格式化文本。
Brother QL-500 正在使用简单的文本。但是如果我发送 pdf 内容,我只会在打印机上得到错误,而不是在代码中。原始设置也不起作用。
有人有解决方案和示例代码吗?
库:
PDF -github.com/jung-kurt/gofpdf
打印机 - github.com/alexbrainman/printer
示例代码:
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.SizeTypeWd: 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)
用法:
仅保存 pdfgo run main.go -s
向打印机发送文本
go run main.go -format=text
将 pdf 内容发送到打印机
go run main.go -format=pdf
【问题讨论】:
显示您的工作代码没有帮助。将其替换为不起作用的代码。 您找到解决方法了吗?我也面临同样的问题。 【参考方案1】:您使用的打印库似乎不支持 PDF。 https://github.com/alexbrainman/printer/issues/6
我在同一个桶中,试图找到一种在 Go 中打印 PDF 的方法。我目前正在试验https://github.com/jadefox10200/goprint
【讨论】:
以上是关于如何使用 golang 在网络打印机上打印文件或格式化文本的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 PrintDocument 在热敏打印机上打印文本文件?
在没有 Adobe 的情况下使用 Ghostscript 在 Ricoh MP 4000 打印机上批量打印 PDF 文件