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

     2023-02-22     67

关键词:

【中文标题】如何使用 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)
        
    


用法:

仅保存 pdf
go 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

【讨论】:

如何使用 PrintDocument 在热敏打印机上打印文本文件?

】如何使用PrintDocument在热敏打印机上打印文本文件?【英文标题】:HowtoprintatextfileonthermalprinterusingPrintDocument?【发布时间】:2017-02-0305:05:41【问题描述】:我正在使用带有Winforms的C#创建应用程序,现在我需要在热敏打印机上打... 查看详情

在没有 Adob​​e 的情况下使用 Ghostscript 在 Ricoh MP 4000 打印机上批量打印 PDF 文件

】在没有Adob​​e的情况下使用Ghostscript在RicohMP4000打印机上批量打印PDF文件【英文标题】:BatchprintingPDFfilesonRicohMP4000printerusingGhostscriptwithoutAdobe【发布时间】:2014-01-2417:05:58【问题描述】:我需要每天将一堆现有的PDF文件打印到... 查看详情

如何发送文件到网络打印机,并打印(使用c#)?

...的打印机,ip地址是192.168.0.254,名称是:Posteck2108,请问如何采用C#编程的方式把这个文件发送到打印机的打印队列中进行打印?问题.NetFramework1.1给我们提供了一个PrinterSettings类,以提供指定有关文档打印方式的信息,其中包括... 查看详情

如何在 Intermec PM4i 打印机上打印 QR 码

】如何在IntermecPM4i打印机上打印QR码【英文标题】:HowdoIprintaQRCodeonanIntermecPM4iprinter【发布时间】:2014-09-3008:52:56【问题描述】:我有一个外部服务,它使用文本文件填充IntermecEasyCoderPM4i打印机上的标签,以向打印机发送指令。... 查看详情

在远程计算机上安装网络打印机

...我希望能够远程管理用户的网络打印机。这意味着,可以使用PowerShell或C#之类的工具来选择计算机名称或IP地址,然后选择打印机(位于打印服务器上,例如\\PrintServer\\Printer01)并将其安装在目标用户 查看详情

如何使用delphi代码在爱普生打印机上打印中文,爱普生的模式是ascii还是Unicode?

】如何使用delphi代码在爱普生打印机上打印中文,爱普生的模式是ascii还是Unicode?【英文标题】:HowtoprintinchineseonepsonprinterusingdelphicodeandwhatismodeofEpsonisitasciiorUnicode?【发布时间】:2013-05-0810:24:42【问题描述】:我必须在epson打印... 查看详情

在 Custom TG2480H 打印机上打印徽标

...rinter【发布时间】:2017-06-2812:43:29【问题描述】:我正在使用CustomTG2480-H打印机打印收据。除了徽标之外,我的所有收据都可以使用。我有一个单色的.bmp文件,它代表徽标并具有正确的尺寸。我正在检索文件,使用不同的响应类... 查看详情

如何在 Flutter 中打印到热敏网络打印机?

】如何在Flutter中打印到热敏网络打印机?【英文标题】:HowdoIprinttothermalnetworkprintersinflutter?【发布时间】:2021-04-1101:37:58【问题描述】:我正在寻找在Flutter中打印到热敏网络打印机的方法。我找到了一些很棒的插件,但似乎它... 查看详情

如何在 Android 的蓝牙打印机上打印图像?

】如何在Android的蓝牙打印机上打印图像?【英文标题】:HowcanIprintanimageonaBluetoothprinterinAndroid?【发布时间】:2013-01-0921:41:44【问题描述】:我必须在热敏蓝牙打印机上打印一些数据,我正在这样做:Stringmessage="abcdefanymessage12345";... 查看详情

在 Rails 中打印(在打印机上)文件

】在Rails中打印(在打印机上)文件【英文标题】:Print(onaprinter)fileinrails【发布时间】:2019-01-0818:07:40【问题描述】:有什么方法可以在rails的打印机上打印文件吗?假设我有一个defprint_url"/system/tickets/#print_url_dir/print.png"end我想... 查看详情

选择打印机(带有对话框)来打印 .xls 文件到

...每次都打印同一个)。我有一个带有“打印”按钮的GUI(使用NetBeans和jExcelApi编程)。当我单击该按钮时,应该会弹出打印对话 查看详情

golang日志接口应用实战

...5新建终端日志包6新建用户应用引入文件日志包打印日志7使用接口解决以上日志没有使用接口产生的问题7.1使用包打印入职7.2定义打印日志接口规范文件7.3改造终端日志打印7.4改造文件日志打印自定义日志接口文件日志库原型实... 查看详情

golang日志接口应用实战

...5新建终端日志包6新建用户应用引入文件日志包打印日志7使用接口解决以上日志没有使用接口产生的问题7.1使用包打印入职7.2定义打印日志接口规范文件7.3改造终端日志打印7.4改造文件日志打印自定义日志接口文件日志库原型实... 查看详情

如何在javascript中通过手机上的网络浏览器使用实时流扫描条形码?

】如何在javascript中通过手机上的网络浏览器使用实时流扫描条形码?【英文标题】:Howtoscanabarcodewithlivestreamthroughwebbrowserononmobilephoneinjavascript?【发布时间】:2018-08-3016:49:08【问题描述】:我正在尝试一种方法来扫描我打印在纸... 查看详情

如何打开8080端口

在自己的机器或在别人的机器发现6118什么无法使用使用netview命令显示打开的端口,再在网络设置的高级属性中使用tcp筛选netport8080open/n系统错误6118:该工作组的服务器列表当前不可用。原因如果您在家庭或办公室网络的网络连接... 查看详情

如何通过 C# 在浏览对话框中显示网络打印机?

】如何通过C#在浏览对话框中显示网络打印机?【英文标题】:HowdoIshownetworkprinterinabrowsedialogviaC#?【发布时间】:2014-03-1423:06:28【问题描述】:基本上我想要做的是允许我的软件用户浏览网络以查找在另一台计算机或服务器上共... 查看详情

打印机上型号后的字母代表什么意思??

...热敏、激光、静电、磁力、led等打印机。扩展资料打印机使用小窍门1、在印刷过程中,请不要用手拉纸,否 查看详情

golang打印切片地址

...里,我有一个问题让我困惑了一段时间。我知道我们应该使用“&”来获取地址,但是如果我们在没有“&”的切片上使用printf呢?packagemainimport"fmt"varslice=[]int1,2,3,4funcmain()fmt. 查看详情