Изменение параметров печати в C # принтера Brother для печати этикеток - PullRequest
0 голосов
/ 04 мая 2019

Я пытаюсь создать приложение на C #, которое позволяет перетаскивать PDF-файл этикетки DHL Shipping на .exe, преобразовывать его в изображение, масштабировать, обрезать, компоновать и распечатывать на термопринтере, напримербрат ql500.

После большого количества «если ошибка, то stackoverflow ()» я получил это, чтобы сделать то, что я хочу.

Только одна серьезная проблема , я не могуизменить параметры печати, я всегда должен делать это вручную, и он не останется.Я должен установить следующие параметры: Ширина бумаги (62 мм) и Длина печати (160 мм).
Я поместил все настройки в предустановку под названием «DHLLabel», но не могу установить ее по умолчанию.

фото:

диалоговое окно печати диалоговое окно параметров

Моя проблема заключается в том, что эти параметры (формат: DHLLabel) всегда возвращаются кПо умолчанию.
При настройке Width (Bandbreite) или Length (Länge) на то, что мне нужно, он возвращается к значению по умолчанию в следующий раз, когда я хочу напечатать этикетку.

Я попытался установить его в C # с помощью PrintDocument.DefaultPageSettings.PaperSize но он ничего не сделает.

Вот что я получил до сих пор: (требуется библиотека cs-pdf-to-image)

using PdfToImage;
using System;
using System.IO;
using System.Drawing;
using System.Windows.Forms;
using System.Drawing.Printing;

namespace DHLLabelConverter
{
    class Program
    {
        public static void CopyRegionIntoImage(Bitmap srcBitmap, Rectangle srcRegion, Bitmap destBitmap, Rectangle destRegion)
        {
            using (Graphics grD = Graphics.FromImage(destBitmap))
            {
                grD.DrawImage(srcBitmap, destRegion, srcRegion, GraphicsUnit.Pixel);
            }
        }

        static void Main(string[] args)
        {
            if(args.Length > 0 && args[0] != "" && File.Exists(args[0]) )
            {

                PDFConvert converter = new PDFConvert();
                GhostScriptRevision version = converter.GetRevision();

                bool Converted = false;
                converter.RenderingThreads = -1;
                converter.TextAlphaBit = -1;
                converter.TextAlphaBit = -1;
                converter.FitPage = true;
                converter.OutputFormat = "png256";
                converter.Width = 4000;
                converter.Height = 6000;
                converter.ResolutionX = 1000;
                converter.ResolutionY = 1000;
                converter.OutputToMultipleFile = false;
                converter.FirstPageToConvert = 1;
                converter.LastPageToConvert = 1;

                System.IO.FileInfo input = new FileInfo(args[0]);

                //convert pdf to image
                Converted = converter.Convert(input.FullName, "temp.png");

                String fil = Path.GetDirectoryName(args[0]);

                //open image to create a modified version of it
                var stream = File.OpenRead("temp.png");
                Bitmap label_main = new Bitmap(stream);
                Bitmap label_edit = new Bitmap(1750, 700);

                //modify and compose the actual image
                label_main.RotateFlip(RotateFlipType.Rotate90FlipNone);
                CopyRegionIntoImage(label_main, new Rectangle(3000, 270, 2120, 1250), label_edit, new Rectangle(20, 0, 1100, 700));
                CopyRegionIntoImage(label_main, new Rectangle(3050, 1530, 1200, 180), label_edit, new Rectangle(50, 585, 680, 105));
                CopyRegionIntoImage(label_main, new Rectangle(3500, 2360, 1100, 1350), label_edit, new Rectangle(1100, 0, 650, 700));
                //save the edited image.
                label_edit.Save("temp2.png");


                //open print dialog, pass edited image into it and set parameters
                PrintDialog pdi = new PrintDialog();
                PrintDocument pdo = new PrintDocument();

                pdo.PrintPage += (sender, arg) =>
                {
                    Image i = Image.FromFile(@"temp2.png");
                    arg.Graphics.DrawImage(i, 0,0,600,240);
                };
                pdo.DefaultPageSettings.PrinterSettings.PrinterName = "Brother QL-500";
                pdo.DefaultPageSettings.Landscape = true;
                pdi.Document = pdo;

                if (pdi.ShowDialog() == DialogResult.OK)
                {
                    pdo.Print();
                }else{
                    MessageBox.Show("Print Cancelled");
                }

            }
        }
    }
}
...