Преобразование строки ZPL в изображение JPG и PDF

Добрый день,

В настоящее время я работаю над проектом, который динамически генерирует строку ZPL. Ниже вы можете увидеть пример, и вы можете использовать http://labelary.com/viewer.html для просмотра наклейка. Есть ли какое-либо программное обеспечение, которое может преобразовать строку ZPL в изображение JPG или файл PDF?

"^XA^FX Top section with company logo, name and address.^CF0,60^FO50,50^GB100,100,100^FS^FO75,75^FR^GB100,100,100^FS^FO88,88^GB50,50,50^FS^FO220,50^FDInternational Shipping, Inc.^FS^CF0,40^FO220,100^FD1000 Shipping Lane^FS^FO220,135^FDShelbyville TN 38102^FS^FO220,170^FDUnited States (USA)^FS^FO50,250^GB700,1,3^FS^FX Second section with recipient address and permit information.^CFA,30^FO50,300^FDJohn Doe^FS^FO50,340^FD100 Main Street^FS^FO50,380^FDSpringfield TN 39021^FS^FO50,420^FDUnited States (USA)^FS^CFA,15^FO600,300^GB150,150,3^FS^FO638,340^FDPermit^FS^FO638,390^FD123456^FS^FO50,500^GB700,1,3^FS^FX Third section with barcode.^BY5,2,270^FO175,550^BC^FD1234567890^FS^FX Fourth section (the two boxes on the bottom).^FO50,900^GB700,250,3^FS^FO400,900^GB1,250,3^FS^CF0,40^FO100,960^FDShipping Ctr. X34B-1^FS^FO100,1010^FDREF1 F00B47^FS^FO100,1060^FDREF2 BL4H8^FS^CF0,190^FO485,965^FDCA^FS^XZ"

Я ищу наиболее эффективный способ сделать это. Я могу использовать API http://labelary.com для преобразования ZPL в JPG, но API часто выходит из строя, поэтому любой предложения для библиотек приветствуются. Однако мы ищем не библиотеки, а предложения по преобразованию строки ZPL в PDF/JPG.

Пожалуйста, имейте в виду, что мы используем .NET Core


person Lostaunaum    schedule 11.05.2017    source источник
comment
Меня очень интересует ответ на этот вопрос, но проголосуйте за закрытие, поскольку запросы на библиотеки не относятся к теме SO.   -  person Mitch    schedule 11.05.2017
comment
@mitch Я понимаю и могу переформулировать вопрос, потому что мы не обязательно просто ищем библиотеку. Наша цель — найти способ, позволяющий клиентам без принтера Zebra печатать свои этикетки.   -  person Lostaunaum    schedule 11.05.2017


Ответы (3)


После некоторых исследований кажется, что есть 2 способа сделать это.

Спокойный вызов с использованием labreary API:

byte[] zpl = Encoding.UTF8.GetBytes("^xa^cfa,50^fo100,100^fdHello World^fs^xz");

// adjust print density (8dpmm), label width (4 inches), label height (6 inches), and label index (0) as necessary
var request = (HttpWebRequest) WebRequest.Create("http://api.labelary.com/v1/printers/8dpmm/labels/4x6/0/");
request.Method = "POST";
request.Accept = "application/pdf"; // omit this line to get PNG images back
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = zpl.Length;

var requestStream = request.GetRequestStream();
requestStream.Write(zpl, 0, zpl.Length);
requestStream.Close();

try {
    var response = (HttpWebResponse) request.GetResponse();
    var responseStream = response.GetResponseStream();
    var fileStream = File.Create("label.pdf"); // change file name for PNG images
    responseStream.CopyTo(fileStream);
    responseStream.Close();
    fileStream.Close();
} catch (WebException e) {
    Console.WriteLine("Error: {0}", e.Status);
}

Если вы не можете полагаться на веб-службу и вам нужна возможность совершать звонки без отправки внешних запросов.

Могу ли я использовать движок Labelary локально, не полагаясь на общедоступный веб-сервис?

Мы предлагаем автономную версию движка Labelary, лицензированную для локального использования. Пожалуйста, свяжитесь с нами для получения информации о лицензировании. http://labelary.com/faq.html

Это позволяет нам распечатывать файлы PDF и PNG для клиентов, у которых нет принтера Zebra.

person Lostaunaum    schedule 11.05.2017


ZPL в pdf в x++, если кому-то нужно: -

using System.Net;
using System.Text;
class SPSConvertZPLtoPDF
{

/// <summary>
/// Runs the class with the specified arguments.
/// </summary>
/// <param name = "_args">The specified arguments.</param>
public static void main(Args _args)
{
    SPSShipmentPackage spsshipmentpackage;
    select firstonly spsshipmentpackage where spsshipmentpackage.ShipmentId == "S0000087";
    System.Byte[] zpl = Encoding::UTF8.GetBytes(spsshipmentpackage.ImageContent);

    // adjust print density (8dpmm), label width (4 inches), label height (6 inches), and label index (0) as necessary
    HttpWebRequest request = WebRequest::Create("http://api.labelary.com/v1/printers/8dpmm/labels/4x6/0/");
        request.Method = "POST";
    request.Accept = "application/pdf"; // omit this line to get PNG images back
    request.ContentType = "application/x-www-form-urlencoded";
    request.ContentLength = zpl.Length;

    var requestStream = request.GetRequestStream();
    requestStream.Write(zpl, 0, zpl.Length);
    requestStream.Close();

    try
    {
        HttpWebResponse response = request.GetResponse();
        var responseStream = response.GetResponseStream();
        File::SendFileToUser(responseStream,"zpl.pdf");//Create("label.pdf"); // change file name for PNG images
        //responseStream.CopyTo(fileStream);
        responseStream.Close();
       // fileStream.Close();
    }
    catch 
    {
        Info("Error");
    }
   }

 }
person Priyanka Upadhyay Pandey    schedule 22.01.2021