asp.net mvc - كيفية طباعة الصورة النقطية دون التكبير من وحدة تحكم مفك في دبيان



asp.net-mvc bitmap (1)

تتم طباعة المستند من وحدة تحكم مفك إلى ديبيان ضغط طابعة ملقم لينوكس باستخدام التعليمات البرمجية أدناه في مونو.

الصفحة في الطابعة هي A4.

النص المطبوع في الورق كبير جدا و أونشارب. الجزء الأيسر من النص غير مرئي لأنه لا يصلح للصفحة.

إذا طبعت من ويندوز من .NET إلى هب لاسرجيت، الإخراج هو الصحيح.

لذلك يبدو وكأنه مونو أو سامسونج مل-331x سلسلة طابعة بتكبير صورة نقطية لسبب غير معروف والذي يسبب كبير جدا ونشارب الإخراج.

كيفية إصلاح هذا بحيث تتم طباعة الصورة النقطية كما هو الحال في النوافذ؟

الحلول الممكنة:

  1. أفضل طريقة سيكون لطباعة هتمل تنسيق مباشرة. كيفية القيام بذلك في الخادم حيث لا يوجد متصفح مثبت؟ وتملتوبف لا يدعم الطباعة. أنا نشرت في كيفية طباعة هتمل تنسيق في خادم لينكس

  2. ربما كان من الممكن استخدام وتمملتوبف تحويل هتمل إلى قوات الدفاع الشعبي بدلا من الصورة النقطية لقد نشرت ك سؤال منفصل في كيفية طباعة قوات الدفاع الشعبي في ديبيان لينكس من مفك تحكم

  3. ويمكنملتيماج يمكن أن تنتج أيضا صيغ الصور الأخرى. ربما بعض التنسيق الآخر هو أفضل؟

  4. ربما بعض سمتش سطوح سطوح وملتملتويماج مثل --width=750 أو --dpi يمكن إصلاح هذا؟

public class Test: Controller
{
    public ActionResult Print()
    {
        PrintOrderVormiga();
        return new ContentResult() { Content = "OK" };
    }

    void PrintOrderVormiga()
    {
        StringBuilder sb = new StringBuilder();
        sb.Insert(0, " test ", 500);
        var bmp = ConvertHtmlToBMP("<html><body>" +sb.Tostring()+ "</body></html>");
        var doc = new PrintDocument();
        doc.PrinterSettings.PrinterName = "Samsung ML-331x Series";
        doc.PrintPage += new PrintPageEventHandler(ProvideContent);
        pageHeight = doc.DefaultPageSettings.PaperSize.Height;
        using (bm = new Bitmap(new MemoryStream(bmp)))
        {
            lehti = (int)Math.Ceiling(bm.Height / (double)pageHeight);
            doc.PrinterSettings.FromPage = 1;
            doc.PrinterSettings.ToPage = lehti;
            pageno = 0;
            doc.Print();
        }
    }

    int pageno, lehti;
    int pageHeight;
    Bitmap bm;

    void ProvideContent(object sender, PrintPageEventArgs e)
    {
        Rectangle cropRect = new Rectangle(0, pageHeight * pageno++,
            bm.Width, pageHeight);
        Bitmap target = new Bitmap(cropRect.Width, cropRect.Height);
        e.Graphics.DrawImage(bm, new Rectangle(0, 0, target.Width, target.Height),
                       cropRect,
                       GraphicsUnit.Pixel);
        e.HasMorePages = pageno < lehti;
    }

    static byte[] ConvertHtmlToBMP(string html)
    {
        string programm = "wkhtmltoimage";
        if (Environment.OSVersion.Platform != PlatformID.Win32NT)
        {
            programm = "wkhtmltoimage-amd64";
        }

        var p = new Process
        {
            StartInfo =
            {
                CreateNoWindow = true,
                RedirectStandardOutput = true,
                RedirectStandardError = true,
                RedirectStandardInput = true,
                UseShellExecute = false,
                FileName = Environment.OSVersion.Platform == PlatformID.Win32NT ?
                "C:\\Program Files\\wkhtmltopdf\\bin\\" + programm + ".exe" : "/usr/bin/" + programm
            }
        };

        p.StartInfo.Arguments = "--format bmp --disable-javascript --quality 10";
        p.StartInfo.Arguments += " - -";
        p.Start();
        using (var stream = p.StandardInput)
        {
            byte[] ibuffer = System.Text.Encoding.UTF8.GetBytes(html);
            stream.BaseStream.Write(ibuffer, 0, ibuffer.Length);
            stream.WriteLine();
        }

        var buffer = new byte[32768];
        byte[] file;

        using (var ms = new MemoryStream())
        {
            while (true)
            {
                var read = p.StandardOutput.BaseStream.Read(buffer, 0, buffer.Length);
                if (read <= 0)
                {
                    break;
                }
                ms.Write(buffer, 0, read);
            }
            file = ms.ToArray();
        }

        p.WaitForExit(60000);
        var returnCode = p.ExitCode;
        p.Close();
        return file;
    }
}

يمكنك استخدام هذا هتمل لتحويل بدف لحل مونو من إيفوبدف. رمز C # لتحويل هتمل إلى بدف في مونو هو:

        // create the HTML to PDF converter object
        HtmlToPdfConverter htmlToPdfConverter = new HtmlToPdfConverter(serverIPAddress, serverPortNumber);

        // set service password if necessary
        if (serverPassword.Length > 0)
            htmlToPdfConverter.ServicePassword = serverPassword;

        // set PDF page size
        htmlToPdfConverter.PdfDocumentOptions.PdfPageSize = PdfPageSize.A4;

        // set PDF page orientation
        htmlToPdfConverter.PdfDocumentOptions.PdfPageOrientation = PdfPageOrientation.Portrait;

        // convert the HTML page from given URL to PDF in a buffer
        byte[] pdfBytes = htmlToPdfConverter.ConvertUrl(urlToConvert);




wkhtmltoimage