48 lines
2.4 KiB
C#
48 lines
2.4 KiB
C#
|
using System;
|
|||
|
using System.Runtime.InteropServices;
|
|||
|
|
|||
|
namespace Tanshu.Accounts.Print
|
|||
|
{
|
|||
|
internal class PrinterLinux : PlatformPrinter
|
|||
|
{
|
|||
|
#region API Declarations
|
|||
|
// ReSharper disable InconsistentNaming
|
|||
|
[DllImport("libcups", CharSet = CharSet.Ansi)]
|
|||
|
static extern int cupsPrintFile(string printer, string filename, string title, int num_options, IntPtr options);
|
|||
|
// int cupsPrintFile (const char *name, const char *filename, const char *title, int num_options, cups_option_t *options);
|
|||
|
|
|||
|
[DllImport("libcups", CharSet = CharSet.Ansi)]
|
|||
|
static extern int cupsCreateJob(string http, string name, string title, int num_options, IntPtr options);
|
|||
|
// int cupsCreateJob (http_t *http, const char *name, const char *title, int num_options, cups_option_t *options);
|
|||
|
|
|||
|
[DllImport("libcups", CharSet = CharSet.Ansi)]
|
|||
|
static extern int cupsStartDocument(string http, string name, int job_id, string docname, string format, int last_document);
|
|||
|
// http_status_t cupsStartDocument (http_t *http, const char *name, int job_id, const char *docname, const char *format, int last_document);
|
|||
|
|
|||
|
[DllImport("libcups", CharSet = CharSet.Ansi)]
|
|||
|
static extern int cupsWriteRequestData(string http, string buffer, int length);
|
|||
|
// http_status_t cupsWriteRequestData (http_t *http, const char *buffer, size_t length);
|
|||
|
|
|||
|
[DllImport("libcups", CharSet = CharSet.Ansi)]
|
|||
|
static extern int cupsFinishDocument(string http, string name);
|
|||
|
// ipp_status_t cupsFinishDocument (http_t *http, const char *name);
|
|||
|
// ReSharper restore InconsistentNaming
|
|||
|
#endregion
|
|||
|
|
|||
|
internal override bool Print(string printerName, string documentName, string printingText)
|
|||
|
{
|
|||
|
var cupsOption = new IntPtr(0);
|
|||
|
const string CUPS_HTTP_DEFAULT = "CUPS_HTTP_DEFAULT";
|
|||
|
var jobId = cupsCreateJob(CUPS_HTTP_DEFAULT, printerName, documentName, 0, cupsOption);
|
|||
|
if (jobId > 0)
|
|||
|
{
|
|||
|
const string format = "CUPS_FORMAT_TEXT";
|
|||
|
cupsStartDocument(CUPS_HTTP_DEFAULT, printerName, jobId, documentName, format, 1);
|
|||
|
cupsWriteRequestData(CUPS_HTTP_DEFAULT, printingText, printingText.Length);
|
|||
|
cupsFinishDocument(CUPS_HTTP_DEFAULT, printerName);
|
|||
|
}
|
|||
|
return jobId > 0;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|