c#生成的打印图像对于Zebra ZXP 3来说太大了

时间:2017-03-21 13:22:10

标签: javascript c# asp.net model-view-controller printing

我想通过名为Zebra ZXP 3的打印机打印在C#中生成的图像。 本打印机配有86mm x 54 mm卡,打印速度为300 DPI。

我以这种方式生成图像(徽章高度是以mm为单位从数据库获取,然后以私有方式转换为像素,所以我写下这些变量的值以下。)

badgeWidth = 1016 badgeHeight = 638

 var bitmap = new Bitmap(badgeWidth, badgeHeight);

 bitmap.SetResolution(300, 300);
 SetBackgroundColor(badgeTemplateData, bitmap);

然后我有几种方法在位图上绘制一些东西(某些方法生成图片,一些文本,一些条形码等)。

private void SetStringElement(string value, Bitmap bitmap, BadgeElement element)
    {
        var left = element.Coordinates.Left;
        var top = element.Coordinates.Top;

        var fontSize = element.ElementStyle.TextSize;

        var textColor = new SolidBrush(element.ElementStyle.TextColor);
        var font = new Font("Arial", fontSize);

        using (Graphics graphic = Graphics.FromImage(bitmap))
        {
            graphic.DrawString(value, font, textColor, left, top);
        }
    }

最后,我有将此图像转换为Base64的方法:

//This is class which generate Image (look above):
var imageGenerator = new ImageGenerator(badgeTemplate);
var badgeTemplateBitmap = imageGenerator.MapBadgeTemplateToPng(badgeSide);

var memoryStream = new MemoryStream();

badgeTemplateBitmap.Save(memoryStream, ImageFormat.Png);

var byteImage = memoryStream.ToArray();

var badgeTemplateBase64 = Convert.ToBase64String(byteImage);

return badgeTemplateBase64;

最后一步是将这张图片发送到浏览器,所以我调用的Ajax高于base64:

$.ajax({
        url: "/Guests/PrintSingleFrontBadgeTemplate",
        type: "post",
        data: { guestTypeId: guestTypeId, guestId: guestId },
        success: function (response) {
            var popupWin = window.open('', '_blank', 'width=1200,height=800');
            popupWin.document.open();
            popupWin.document.write('<html><head></head><body"><img alt="Embedded Image" src="data:image/png;base64,' + response.frontBadgeTemplate + '" /></html>');
            popupWin.document.close();
            popupWin.print();
            popupWin.close();
        }
    });

AND我能看到什么?巨大的图像需要3页...... 正如我所说,我的打印机在300 dpi下打印86mm x 54mm。 要打印整个区域,我需要1016像素x 638像素的图像。 为什么我的照片比我预期的大3倍?

令人惊讶的是,当我下载此图像并从Windows打印时,我在一页上有完美的精确图像。

0 个答案:

没有答案