Замена VirtualPrintEngine на JsPDF - PullRequest
       53

Замена VirtualPrintEngine на JsPDF

1 голос
/ 09 октября 2019

Имейте в виду:
Это мой первый вопрос о StackOverflow.
Веб-приложение представляет собой программный пакет, который компания изменила для своих нужд.
Часть, которая используетсяVirtual Print Engine от IDEAL Software (VPE).
Значения были изменены для этого сообщения

Проблема
Основная проблема заключается в том, что VPE использует ActiveX Control, и мы пытаемсяканаву Internet Explorer. Процесс состоит в том, чтобы создать PDF размер стикеров, которые они используют для доставки.

Попытайтесь остаться со мной, пока я пытаюсь объяснить, как называется generatePDF.asp:

  • Пользователь нажимает кнопку на странице report_up.asp, которая отправляет запрос на report_pr.asp
  • report_pr.asp, затем обрабатывает сообщение и вызывает report.asp
  • generatePDF.asp генерирует PDF, отправляет его прямо на выбранный принтер

Таким образом, весь процесс скрыт от инструмента разработки из браузера (кроме IE)

Вот примероригинальный код. Как вы могли заметить, я также манипулирую с VBScript. Отредактировано, чтобы добавить больше кода


        <%@ LANGUAGE=VBSCRIPT %>
    <%Option Explicit%>
    <!-- #Include virtual="\SOFTinit.asp" -->
    <!-- #Include virtual="\reportfunction.asp" -->
    <%
    DIM rssql,vstorename,vparam,vserialnoparam,vprintsection,vpiecestock,vnbretiquettes,vversion
    DIM vwonbr,vdescr,vserialno,vshortserialno,vname,vtransport,vexpedition,vliste,vpoprojet,vzone
    DIM vsoustraitance,vitemserialid,vitemid,vcodemecinov,vwoid,vshipbarcodeid,vpono,vprintername,vlabelexpedition
    DIM visrack,vcustname,vcustid,vcodeboite,vzonerack,vcodebarre,vtempid
    DIM i

    vversion="v1.0"
    vstorename = "IN_RPT.ProductsBarCode_sp"
    vshipbarcodeid = CDBL(SOFT.IFEMPTY(REQ("fshipbarcodeid")))
    vtempid = CDBL(SOFT.IFEMPTY(REQ("ftempid")))
    IF visrack = 0 THEN
      vserialnoparam = REQ("fnoserie")
    END IF
    vsoustraitance = CDBL(SOFT.IFEMPTY(REQ("fsoustraitance")))
    vitemserialid  = CDBL(SOFT.IFEMPTY(REQ("fitemserialid")))
    vitemid        = CDBL(SOFT.IFEMPTY(REQ("fitemid")))
    vwoid          = CDBL(SOFT.IFEMPTY(REQ("fwoid")))
    visrack        = CDBL(SOFT.IFEMPTY(REQ("frack")))

    IF visrack <> 0 THEN

    '   vcustid    = CDBL(SOFT.IFEMPTY(REQ("fcustid")))
      vcodeboite = TRIM(REQ("fcodeboite"))

    '  sql = "SELECT Name,fob FROM customers WHERE custid = " & vcustid
    '  SET RSSQL = CONN.EXECUTE(SQL)
    '   IF NOT RSSQL.EOF THEN
    '    vcustname = TRIM(RSSQL("Name"))
    '    vzonerack = TRIM(RSSQL("fob"))
    '   END IF
    '  RSSQL.CLOSE
    '  SET RSSQL = NOTHING

      sql = "SELECT codemecinov,shipbarcodeid FROM shipbarcode WHERE  isactive=1 AND cieid= "& gcieid &" AND codeboite = '" & vcodeboite & "' "
      SET RSSQL = CONN.EXECUTE(SQL)
        IF NOT RSSQL.EOF THEN
        'vcodebarre = TRIM(RSSQL("codemecinov"))
        vshipbarcodeid =RSSQL("shipbarcodeid")
        END IF
      RSSQL.CLOSE
      SET RSSQL = NOTHING
        response.write vshipbarcodeid
        response.write sql
    END IF


    IF vshipbarcodeid <> 0 Then
        SQL = "SELECT shipbarcode.codebarre as serialno,shipbarcode.itemserialid,shipbarcode.woid,shipbarcode.itemid,shipbarcode.soustraitance,SOTOMECINOVID FROM shipbarcode " &_
                    " LEFT JOIN sotomecinov ON sotomecinov.serialno = shipbarcode.codebarre " &_
                    " WHERE shipbarcodeid = " & vshipbarcodeid
        SET RSSQL = CONN.EXECUTE(SQL)
        IF NOT RSSQL.EOF THEN
            vserialnoparam = RSSQL("SOTOMECINOVID")
            vitemserialid = CDBL(RSSQL("itemserialid"))
            vitemid = CDBL(RSSQL("itemid"))
            vsoustraitance = SOFT.FNBOOLEAN(RSSQL("soustraitance"))
            vwoid = CDBL(RSSQL("woid"))
            'BOITE DE PRODUCTION
            IF vwoid <> 0  Then
                vserialnoparam = rssql("serialno")
            END IF
            IF vsoustraitance = 1 Then
                vserialnoparam = rssql("serialno")
            END IF
        END IF
    END IF

    IF visrack = 0 THEN
      vprintsection  = REQ("fprintsection")
    END IF
    vnbretiquettes = SOFT.IFEMPTY(REQ("fnbrcopy"))
    IF vnbretiquettes = 0 THEN
        vnbretiquettes = 1
    END IF
    vpiecestock   = CDBL(SOFT.IFEMPTY(REQ("forshipping")))

    vprintername = ""
    SQL = "SELECT zprinter.name as printername FROM zprinter " &_
                " INNER JOIN zprinteruser ON zprinteruser.userid =  " & guserid &_
                " WHERE (zprinteruser.menuid = 2021 or zprinteruser.menuid = 2020) AND zprinter.printerid = zprinteruser.printerid "
    SET RSSQL =CONN.EXECUTE(SQL)
    IF NOT RSSQL.EOF Then
        vprintername = RSSQL("printername")
    END IF


    '****************************************************************************************************
    '*** * * * * * * * * * * * * * * * * * *SECTION HTML* * * * * * * * * * * * * * * * * * * * * * * ***
    '****************************************************************************************************

    %>

    <html>
    <head>
      <title><%=getlabel("Codeboite",glangid)%></title>
      <META HTTP-EQUIV="pragma"  CONTENT="no-cache">
      <meta http-equiv="Cache-Control" content="no-cache">
      <meta http-equiv='expires' content='0'>

    </head>
    <body topmargin="0" leftmargin="0" bottommargin="0" rightmargin="0">
      <!-- #Include virtual="\VpeCtrl4.asp"-->

    <SCRIPT LANGUAGE="javascript">

        <% if vshipbarcodeid = 0 AND vpiecestock = 0 then %>
            window.parent.opener.focus();
        <% end if %>
      var vfont,vRender;

      VpeCtrl.CloseDoc();
      VpeCtrl.OpenDoc();
      VpeCtrl.UnitTransformation = VUNIT_FACTOR_MM10;
      VpeCtrl.DevPrintQuality    = 200;
      VpeCtrl.DevJobName         = 'etiquette';
      VpeCtrl.SaveFileName       = 'etiquette.pdf';
      VpeCtrl.FontName           = "Verdana";
      //VpeCtrl.PageFormat         = VPAPER_LETTER;
      VpeCtrl.BarcodeAlignment   = ALIGN_CENTER;
      VpeCtrl.BarcodeMainTextParms  = BCP_HIDE;
      VpeCtrl.BarcodeAutoChecksum   = 1;
      VpeCtrl.PageWidth  = 1050;
      VpeCtrl.PageHeight = 1270;

      VpeCtrl.ScalePercent       = 100;
      VpeCtrl.PageOrientation    = VORIENT_PORTRAIT;
      VpeCtrl.SetOutRect(10,10,VpeCtrl.PageWidth,VpeCtrl.PageHeight);

      <%

      IF visrack = 0 OR visrack = 1 THEN
            vparam = "@glangid="                & glangid &_
                       ",@gcieid="              & gcieid &_
                       ",@guserid="             & guserid &_
                     ",@fnoserie='"         & vserialnoparam & "'" &_
                     ",@fprintsection='"    & vprintsection & "'" &_
                     ",@piecestock="      & vpiecestock &_
                     ",@nbretiquettes=1"  &_
                     ",@soustraitance="     & vsoustraitance &_
                     ",@Itemserialid="      & vitemserialid  &_
                     ",@itemid="                    & vitemid &_
                     ",@woid="                    & vwoid
            IF vshipbarcodeid <> 0 THEN
                vparam = vparam &_
                                 ",@shipbarcodeid=" & vshipbarcodeid
            END IF
            IF vtempid <> 0 THEN
                vparam = vparam &_
                                 ",@tempid=" & vtempid
            END IF

            SQL = "EXEC " & vstorename & " " & vparam & ""
                    response.write "//" & sql
            'RESPONSE.END
            SET rssql = CONN.EXECUTE(SQL)
            IF rssql.eof THEN
                RESPONSE.END
            END IF
            DO WHILE NOT RSSQL.EOF
                FOR i = 1 to CDBL(RSSQL("copycount"))
                            IF i <> 1 tHEN %>
                                VpeCtrl.PageBreak();
                            <%
                            END IF
                vwonbr = RSSQL("wonbr")
                vdescr = RSSQL("descr")
                vserialno = RSSQL("serialno")
                vshortserialno = RSSQL("shortserialno")
                vname = RSSQL("name")
                vlabelexpedition = RSSQL("expeditionlabel")
                vexpedition = RSSQL("expedition")
                vtransport = RSSQL("transport")
                vliste = RSSQL("liste")
                vcodemecinov = RSSQL("codemecinov")
                vpono = RSSQL("po")
                IF ISNULL(vliste) THEN
                    vliste = ""
                END IF
                vpoprojet = RSSQL("project")
                vzone = RSSQL("zone")

                RESPONSE.WRITE "Before Header Loop"
                %>
                //HEADER
                VpeCtrl.TextAlignment = ALIGN_CENTER;
                VpeCtrl.FontSize = 24;
                <%
                    IF LEN(vserialno) > 18 THEN
                        RESPONSE.WRITE "VpeCtrl.FontSize = 18;"
                    END IF
                %>
                <% IF vsoustraitance = 1 THEN %>
                    VpeCtrl.VpeWrite(30,18,1025,VFREE,'[N B 72]<%=vserialno%>');
                <% ELSE %>
                    VpeCtrl.VpeWrite(30,18,1025,VFREE,'[N B 72]<%=vshortserialno%>');
                <% END IF %>
                VpeCtrl.FontSize = 12;
                VpeCtrl.VpeWrite(40,105,1020,160,'[N B 72]<%=SOFT.FNGUILJAVA2(vname)%>');
                VpeCtrl.FontSize = 10;
                VpeCtrl.TextAlignment = ALIGN_LEFT;
                <% IF vsoustraitance = 0 THEN %>
                    VpeCtrl.FontSize = 9;
                    VpeCtrl.VpeWrite(50,160,400,230,'[N B 72]<%=SOFT.FNGUILJAVA2(vlabelexpedition)%>');
                    VpeCtrl.VpeWrite(50,190,400,250,'[N B 72]<%=SOFT.FNGUILJAVA2(vexpedition)%>');
                     VpeCtrl.FontSize = 10;
                <% END IF %>
                VpeCtrl.PenSize=0;
                VpeCtrl.BarCode(385, 160, 1005, 250, BCT_CODE128, '<%=vcodemecinov%>', '');
                VpeCtrl.PenSize=1;
                VpeCtrl.TextAlignment = ALIGN_LEFT;
                VpeCtrl.VpeWrite(60,250,500,300,'[N B 72]<%=SOFT.FNGUILJAVA2(vtransport)%>');
                VpeCtrl.TextAlignment = ALIGN_CENTER;
                <% IF vsoustraitance = 1 THEN %>
                    VpeCtrl.VpeWrite(450,250,1000,300,'[N B 72]<%=vshortserialno%>');
                <% ELSE %>
                    VpeCtrl.VpeWrite(450,250,1000,300,'[N B 72]<%=vserialno%>');
                <% END IF %>

                VpeCtrl.TextAlignment = ALIGN_LEFT;
                VpeCtrl.VpeWrite(60,300,1020,400,'[N B 72]<%=SOFT.FNGUILJAVA2(vdescr)%>');
                VpeCtrl.VpeWrite(60,390,650,440,'[N B 72]<%=SOFT.FNGUILJAVA2(vpoprojet)%>');
                VpeCtrl.TextAlignment = ALIGN_RIGHT;
                            VpeCtrl.VpeWrite(660,390,1000,440,'[N B 72]<%=SOFT.FNGUILJAVA2(vpono)%>');
                //VpeCtrl.Vpeline(40,360,1020,360);
                            VpeCtrl.TextAlignment = ALIGN_LEFT;

                //DÉTAIL
                VpeCtrl.PenSize=0;
                VpeCtrl.Rotation = 2700;
                VpeCtrl.BarCode(60, 440, 660, 520, BCT_CODE128, '<%=vcodemecinov%>', '');
                VpeCtrl.Rotation = 0;
                VpeCtrl.PenSize=1;
                VpeCtrl.VpeWrite(200,450,1040,1030,'[N 72]<%=FNGuilJava2(REPLACE(REPLACE(REPLACE(TRIM(vliste),VBCRLF,"\n"),CHR(13),"\n"), CHR(10),"\n"))%>');

                //FOOTER
                VpeCtrl.Picture(60,1070,250,1250,'<%=LocatePgm("sys/getlogo.asp",1)%>' + EncryptParams('?gsessionid=<%=gsessionid%>&cieid=<%=gcieid%>'));
                VpeCtrl.Picture(280,1070,480,1250,'<%=locatepgm("images/madeincanada.jpg",1)%>');
                VpeCtrl.VpeWrite(520,1140,750,VFREE,'<%=FNGETDATE(gCurrDate)%>');
                VpeCtrl.Pensize=5;
                VpeCtrl.Box(770,1070,1020,1250);
                VpeCtrl.FontSize = 26;
                VpeCtrl.VpeWrite(840,1110,1015,1250,'[N B 72]<%=vzone%>');
                VpeCtrl.FontSize = 10;
                <%
                NEXT
             RSSQL.MOVENEXT

             IF NOT RSSQL.EOF THEN
                %>VpeCtrl.PageBreak();<%
             END IF

             LOOP

      ELSE%>
                //HEADER
                VpeCtrl.TextAlignment = ALIGN_CENTER;
                VpeCtrl.FontSize = 24;
                <%
                  RESPONSE.WRITE "Before Header"
                    IF LEN(vserialno) > 18 THEN
                        RESPONSE.WRITE "VpeCtrl.FontSize = 18;"
                    END IF
                %>

                VpeCtrl.VpeWrite(30,18,1025,VFREE,'[N B 72]<%=vcodeboite%>');

                VpeCtrl.FontSize = 12;
                VpeCtrl.VpeWrite(40,105,1020,160,'[N B 72]<%=SOFT.FNGUILJAVA2(vcustname)%>');
                VpeCtrl.FontSize = 10;
                VpeCtrl.TextAlignment = ALIGN_LEFT;
                VpeCtrl.PenSize=0;
                VpeCtrl.BarCode(385, 160, 1005, 250, BCT_CODE128, '<%=vcodebarre%>', '');
                VpeCtrl.PenSize=1;
                VpeCtrl.TextAlignment = ALIGN_LEFT;
                VpeCtrl.VpeWrite(60,250,500,300,'[N B 72]<%=SOFT.FNGUILJAVA2(vtransport)%>');
                VpeCtrl.TextAlignment = ALIGN_CENTER;
                VpeCtrl.VpeWrite(450,250,1000,300,'[N B 72]<%=vcodeboite%>');

                VpeCtrl.TextAlignment = ALIGN_CENTER;
                VpeCtrl.VpeWrite(60,300,1020,400,'[N B 72]<%="Rack"%>');
                VpeCtrl.TextAlignment = ALIGN_RIGHT;
                //VpeCtrl.Vpeline(40,360,1020,360);
                            VpeCtrl.TextAlignment = ALIGN_LEFT;

                //DÉTAIL
                VpeCtrl.PenSize=0;
                VpeCtrl.Rotation = 2700;
                VpeCtrl.BarCode(60, 440, 660, 520, BCT_CODE128, '<%=vcodebarre%>', '');
                VpeCtrl.Rotation = 0;
                VpeCtrl.PenSize=1;
                VpeCtrl.VpeWrite(200,450,1040,1030,'[N 72]<%=FNGuilJava2(REPLACE(REPLACE(REPLACE(TRIM(vliste),VBCRLF,"\n"),CHR(13),"\n"), CHR(10),"\n"))%>');

                //FOOTER
                VpeCtrl.Picture(60,1070,250,1250,'<%=LocatePgm("sys/getlogo.asp",1)%>' + EncryptParams('?gsessionid=<%=gsessionid%>&cieid=<%=gcieid%>'));
                VpeCtrl.Picture(280,1070,480,1250,'<%=locatepgm("images/madeincanada.jpg",1)%>');
                VpeCtrl.VpeWrite(520,1140,750,VFREE,'<%=FNGETDATE(gCurrDate)%>');
                VpeCtrl.Pensize=5;
                VpeCtrl.Box(770,1070,1020,1250);
                VpeCtrl.FontSize = 26;
                VpeCtrl.VpeWrite(840,1110,1015,1250,'[N B 72]<%=vzonerack%>');
                VpeCtrl.FontSize = 10;
                <%
      END IF
      %>
        <%IF vshipbarcodeid <> 0 AND visrack = 0 THEN %>

            <% IF vprintername <> "" Then %>
                VpeCtrl.Preview();
                //VpeCtrl.Device = '<%=SOFT.FNGUILJAVA2(REPLACE(vprintername,"\","\\"))%>';
                //VpeCtrl.PrintDoc(false)
                //window.close()
            <% else %>
                    VpeCtrl.Preview();
            <%  END IF %>
        <% ELSE %>
            VpeCtrl.DevCopies = <%=vnbretiquettes%>;
            <% IF vprintername <> "" Then %>
              VpeCtrl.Device = '<%=SOFT.FNGUILJAVA2(REPLACE(vprintername,"\","\\"))%>';
            <% END IF %>
            //VpeCtrl.Preview();
            VpeCtrl.PrintDoc(false)
            window.close()
        <% END IF %>

    </SCRIPT>
    </body>
    </html>
    <%
    RSSQL.CLOSE
    SET RSSQL = NOTHING
    SOFT.DisconnectDB
    %>

Я создал целый .html для проверки работы JsPdf и смог создать точно такую ​​же копию, которая была сгенерирована VPE. Функции save (), ouput () и autoprint () отлично работают на моем локальном HTML

Sample


    var doc = new jsPDF({
        orientation: 'p',
        unit: 'mm',
        format: [105, 125]
    });
    JsBarcode("#barcodeHorizontal", "00-000-000-00");
    JsBarcode("#barcodeVertical", "00-000-000-00", {
    displayValue: false
    });

    doc.addFont("Verdana", "Verdana", "Regular")
    doc.setFont("Verdana", "Regular");

    //HEADER
    doc.setFontSize(24);
    doc.text('Value', 5, 10);

    doc.setFontSize(12);
    doc.text('Value', 5, 15);

    doc.setFontSize(9);
    doc.text('Value :', 5, 19);
    doc.text('Value', 5, 22);
    doc.setFontSize(10);

    const barcodeHorizontal = document.querySelector("img#barcodeHorizontal");
    doc.addImage(barcodeHorizontal.src, "PNG", 48, 16, 55, 13, "");
    doc.text('Value', 5, 25);

    const barcodeVertical = document.querySelector("img#barcodeVertical");
    doc.addImage(barcodeVertical.src, "PNG", 2, 30, 60, 10, "", "NONE", -90);
    doc.text('Value', 8, 32)
    doc.text('Value', 8, 40)
    doc.text('Value', 70, 40)

Что я пробовал

  • Я изменил все, чтобы использовать JsPDf

    // VpeCtrl.VpeWrite(30,18,1025,VFREE,'[N B 72]<%=value%>');
    doc.text("value",3,2);

  • Я пытался сохранить обе версии

    VpeCtrl.VpeWrite(30,18,1025,VFREE,'[N B 72]<%=value%>');
    doc.text("value",3,2);

  • Добавлен console.log (), чтобы посмотреть, остановлюсь ли я в какой-то момент

    VpeCtrl.VpeWrite(30,18,1025,VFREE,'[N B 72]<%=value%>');
    doc.text("value",3,2);
    console.log("Error value");

  • Я попытался большинство из них попытаться / поймать, чтобы узнать, смогу ли ячтобы поймать ошибку

    try {
        doc.text("value",3,2);
        console.log('<%=value%>');
    } catch (error) {
        console.log("Error here");
    }

Вот результат, который я получаю из нескольких попыток:

Поврежден или нет PDF из:


    doc.save("sticker.pdf");

Пустое окно из:


    doc.output("dataurlnewwindow");

Я все еще не получаю ошибку при попытке / поймать, и я вижу все свои console.log ()

Мои вопросы без ответа такfar
- Может ли быть конфликт между множественными JQuery.js - Что я не могу контролировать
- Может ли быть конфликт с VBScript? - Может ли быть проблема во время процесса, описанного ранее?

Я открыт для любых предложений, комментариев или для предоставления более подробной информации, если это необходимо!

РЕДАКТИРОВАТЬ

Я попробовал самый простой способ, и он не сработал! Я начинаю думать, что я не буду работать, так как процесс сделан на стороне сервера


    var doc = new jsPDF({
    orientation: 'p',
    unit: 'mm',
    format: [105, 127]

    doc.text("value",5,16);
    doc.output("dataurlnewwindow");

...