Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# C RSClientPrint超大线轴_C#_Networking_.net 3.5_Barcode_Spooler - Fatal编程技术网

C# C RSClientPrint超大线轴

C# C RSClientPrint超大线轴,c#,networking,.net-3.5,barcode,spooler,C#,Networking,.net 3.5,Barcode,Spooler,我正在使用ASP.NET3.5MVC1和DB2后端。我的公司正在尝试从Microsoft SQL Server 2008 RSCLient打印GDI+对话框打印条形码。我们无法将文件保存为PDF格式并在本地打印,因为这是针对我们的实际库存应用程序的,员工可能会使用本地条形码做一些不好的事情,因为他们是良好的检查,因此我们被迫通过HTTP打印并控制他们的打印。每个商店都有一个打印服务器,但web服务器位于公司IT办公室。我认为我必须使用.jpeg,因为.gif会导致条形码中的线条模糊,扫描枪无法读

我正在使用ASP.NET3.5MVC1和DB2后端。我的公司正在尝试从Microsoft SQL Server 2008 RSCLient打印GDI+对话框打印条形码。我们无法将文件保存为PDF格式并在本地打印,因为这是针对我们的实际库存应用程序的,员工可能会使用本地条形码做一些不好的事情,因为他们是良好的检查,因此我们被迫通过HTTP打印并控制他们的打印。每个商店都有一个打印服务器,但web服务器位于公司IT办公室。我认为我必须使用.jpeg,因为.gif会导致条形码中的线条模糊,扫描枪无法读取

该应用程序可以很好地处理几百个标签,大约5页,大约5分钟完成打印,但是打印2000个标签需要2小时,接近300页,大约+150MB。我在应用程序上运行Wireshark,试图捕捉来回的数据包,并将信息传递给网络,这就是他们的响应

否。时间源目标协议信息 36628 653.373235 HTTP[TCP窗口已满]继续或非HTTP流量 36630 654.245430 TCP[TCP ZeroWindowProbe]http>35503[ACK]Seq=26291213 ACK=3730 Win=63137 Len=1

我离题了。我的问题是,我可以使用什么类型的策略来帮助加快HTTP上的打印假脱机。我应该在X页处切掉打印卷轴,然后重新卷轴其余部分吗?我应该改变我的打印算法吗?有什么方法可以缩小打印卷轴的大小而不丢失.jpeg质量?RSClientPrint是否有开源或商业的替代方案来处理我需要的业务逻辑

现在开始编码吧!如果你还需要什么,请告诉我

        [AcceptVerbs(HttpVerbs.Post)]
    [Authorization(Roles = Roles.NonInquiry)]
    public ActionResult ReprintLabels(int eventId, int areaCode, int lowerLabelNumber, int upperLabelNumber)
    {
        if (!_eventAreaService.IsAreaEditable(eventId, areaCode))
            return RedirectToAction("Index", new { eventId = eventId });

        var printContext = _eventAreaService.ReprintLabels(eventId, areaCode, lowerLabelNumber, upperLabelNumber);

        ActionResult result = RedirectToAction("Index", new { eventId = eventId });
        if (printContext != null)
        {
            var redirectUrl = Url.RouteUrl(new { controller = "EventArea", action = "Index", eventId = eventId });
            Session[PrintContextViewModel.SessionKey] = new PrintContextViewModel(printContext, redirectUrl);

            result = RedirectToAction("PrintLabels", "LabelPrint");
        }

        return result;
    }

public InventoryAreaPrintContext ReprintLabels(int eventId, int areaCode, int lowerLabelBound, int upperLabelBound)
    {
        var user = _authentication.CurrentUser;

        if (user.IsInRole(Roles.CorporateInquiry) || user.IsInRole(Roles.StoreInquiry))
            throw new InvalidOperationException("User must be a non-inquiry role.");

        List<Fixture> fixturesToVoid = GetLabelsInRange(eventId, areaCode, lowerLabelBound, upperLabelBound).Where(f => f.StatusCode == FixtureStatus.Ready).ToList();

        if (fixturesToVoid.Count < 1) return null;

        // Void all old labels and tally the labels that to be recreated
        //      for each area involved.
        var voidFixturesByArea = new Dictionary<int, int>();
        foreach (var f in fixturesToVoid)
        {
            if (!voidFixturesByArea.ContainsKey(f.AreaCode))
                voidFixturesByArea[f.AreaCode] = 1;
            else
                voidFixturesByArea[f.AreaCode]++;

            f.StatusCode = FixtureStatus.VoidReplace;
            _fixtureRepo.Update(f);
        }

        var storeEvent = _storeEventRepository.FindEvent(user.DefaultStore, eventId);
        var lastUsedLabel = storeEvent.LastUsedLabelNumber;
        var affectedAreas = new List<InventoryArea>();

        // Create new labels for the affected areas.
        foreach (var pair in voidFixturesByArea)
        {
            var area = _areaRepo.FindByKey(user.DefaultStore.GroupCode, user.DefaultStore.ID, eventId, pair.Key);
            var fixtures = _fixtureBuilder.AddFixtures(lastUsedLabel.Value, area, pair.Value);
            fixtures.ForEach(f => _fixtureRepo.Insert(f));

            area.Fixtures = fixtures;
            affectedAreas.Add(area);
        }

        // Update the store event counts.
        var numberOfLabels = fixturesToVoid.Count();

        storeEvent.LastUsedLabelNumber += numberOfLabels;

        _storeEventRepository.Update(storeEvent);

        return new InventoryAreaPrintContext(_barcodeGenerator) { InventoryAreas = affectedAreas, StoreEvent = storeEvent, Store = user.DefaultStore };
    }

public class BarcodeGenerator : IBarcodeGenerator
{
    private readonly BarCodeImage.CodeSetEncoder _codeSetEncoder;

    public BarcodeGenerator(BarCodeImage.CodeSetEncoder codeSetEncoder)
    {
        _codeSetEncoder = codeSetEncoder;
    }

    public byte[] CreateBarcode(string barcodeText)
    {
        byte[] data;
        var generator = new BarCodeImage(barcodeText, _codeSetEncoder, true)
                            {
                                InsetText = false,
                                Font = new Font(
                                    FontFamily.GenericSansSerif,
                                    10,
                                    FontStyle.Regular,
                                    GraphicsUnit.Pixel)
                            };

        /** 
         * Keep the image dimensions at the same ratio as they will be displayed in the report.
         * Currently the report is set to a height to width ratio of 1/5 so we set the image
         * height to width at 1/5 as well. Otherwise the barcode will not scan properly.
         **/
        using (var image = generator.Render(50, 250))
        using (var ms = new MemoryStream())
        {
            image.Save(ms, ImageFormat.Jpeg);
            data = ms.GetBuffer();
        }

        return data;
    }
}

将图像包装器发送到后台打印程序时有些可疑。我最后做的是使用iTextSharp的barcode 128类,基本上用字体而不是图像构建条形码,然后对于人类可读的文本,我只是传入了条形码对象的fixture标记字符串,并将该值设置为.RDLC报告上的值。如果有人想要任何代码,请随时PM我