Печать Tif Из Ls

Тема в разделе "Lotus - Программирование", создана пользователем Bob84, 4 ноя 2013.

  1. Bob84

    Bob84 Active Member

    Регистрация:
    16 май 2012
    Сообщения:
    38
    Симпатии:
    0
    Здравствуйте.
    Посредством LS отравляю на печать tif файл. Код:

    Код (LotusScript):
    Set oTiff = CreateObject("MODI.Document")  
    Call oTiff.Create(path)
    Call oTiff.PrintOut( 0, -1, 1, PrinterName, "", False, 1 )
    Если в PrinterName лежит что-то вроде "Xerox WorkCentre 3210 PCL 6" документ уходит на печать.
    Если же вот такое "\\SomeUSER-PC\Xerox WorkCentre 3210 PCL 6" (т.е. разшареный сетевой принтер), то задачу о печати просто добаляет в очередь и она остается висеть там, пока руками не удалю.
    Может в этой процедуре нужно в каком-то другом виде имя принтера передавать, в втором случае?
    Пробовал через Выполнить в Windows выполнить комманду
    rundll32.exe C:\WINDOWS\System32\shimgvw.dll,ImageView_PrintTo /pt filePath "\\SomeUSER-PC\Xerox WorkCentre 3210 PCL 6" - результат такой же, как и при программной реализации.
     
  2. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.073
    Симпатии:
    299
    большинство современных принтеров печатают PS (если принтер не виндозный, т.е. - софтварный)
    нек. принтеры печатают сразу PDF
    т.о. задача плавно превращается в конвертацию в PS, а делее - просто копированием бинаря в принтер...
    остается задача - как заставить винду копировать бинарь в принтер :)
     
  3. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.073
    Симпатии:
    299
  4. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.073
    Симпатии:
    299
    вот это по описанию - может печатать на дефолтный принтер и конвертить тиф в разное (PS там есть), условий использования я не знаю
     
  5. Bob84

    Bob84 Active Member

    Регистрация:
    16 май 2012
    Сообщения:
    38
    Симпатии:
    0
    Спасибо, буду изучать. Надеялся правда на более простой вариант :) .
     
  6. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.073
    Симпатии:
    299
    разгадывать - что не работает в КОМ - ни у кого не возникает желания - онож проприетарь и виндовз-онли :)
     
  7. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.073
    Симпатии:
    299
    проверил с командной строки, в линухах - и печатает и конвертит в PS
    НО - надо править скрипты:
    find ./ -name "*.sh" -exec dos2unix {} \;
    find ./ -name "*.sh" -exec chmod a+x {} \;

    а в винде надо править батник<div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">tiff_print_classpath.bat:</div></div><div class="sp-body"><div class="sp-content">
    Код (Text):
    @echo off
    if ""%JAVA_HOME%"" == """" goto SET_JAVA_HOME
    goto start

    :SET_JAVA_HOME
    echo Set JAVA_HOME to point to a JVM installation, e.g. set JAVA_HOME=c:\j2sdk1.4.2
    goto end

    :end
    exit 0

    :start
    set CLASSPATH=".;..\..\;..\..\jai_codec.jar;..\..\jai_core.jar;..\..\jai_imageio.jar;..\..\smartjcommon.jar;..\..\smartjpdfwriter_license.jar;..\..\smartjpdfwriter.jar;..\..\smartjtiff_license.jar;..\..\smartjtiff.jar;..\..\smartjtiff_demo.jar"
    set JAVA_OPTS=-Xms20m -Xmx400m -Djava.awt.headless=true -DSMARTJ_DEBUG=false
    echo Starting the demo using JAVA_HOME=%JAVA_HOME%
    %JAVA_HOME%\bin\java -version
    строка %JAVA_HOME%\bin\java -version
    там слэши непральные
    проверял с изменением PATH:%PATH%;"C:\Program Files\IBM\Notes\jvm\bin" (это необязательно)
    и JAVA_HOME:"C:\Program Files\IBM\Notes\jvm"
    т.е. брал нотуснёвую жвм

    виндистый запуск:
    cd \mydata\inst\development\java\Graphics\SmartJTiff_1.1_03_free\bin\print
    start SilentPrintTIFF.bat [..\..\sample_tif\sample1.tif]

    линуховый:
    cd ~/mydata/inst/development/java/Graphics/SmartJTiff_1.1_03_free/bin/print
    ./SilentPrintTIFF.sh [../../sample_tif/sample1.tif]

    конвертор проверял так: ./Tiff2PsDemo.sh [../../sample_tif/sample1.tif] ./ sample1.ps
    lp sample1.ps

    принтер Куоцера FS 4020 DN
    он же расшарен виндятке (по сети, IPP), кот. - Хрю в виртуалке

    т.о. - сморим скрипты и юзаем готовые классы, для генерации PS или прямой печати на дефолт - усё буить пахать (КМК)

    возможны заморочки с типами тифов - но здесь надо смореть по мере возникновения траблов
     
  8. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.073
    Симпатии:
    299
    использование либ в домине...
    либы:
    jai_codec.jar
    jai_core.jar
    smartjcommon.jar
    smartjpdfwriter.jar
    smartjpdfwriter_license.jar
    amartjtiff.jar
    smartjtiff_demo.jar
    smartjtiff_license.jar

    кладем в lib/ext (либо прописываем путь и notes.ini), пихать в nsf, на первый момент, ябы постремался
    код (пральней сказать - список импорта:) ) из:
    Tiff2PsDemo.java
    SilentPrintTIFF.java
    пихаем в либу
    пишем рапер для LS2J либо зовем его прям из LS (как это происходит и с КОМ), учитывая что конструкторы без аргументов - это ваще пестня
    получаем файло, либо печать
     
  9. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.073
    Симпатии:
    299
    как и предполагал - из БД либы работать не будут... (исследовать не стал)
    т.е. рекомендация - класть в lib/ext
    <div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">код агента</div></div><div class="sp-body"><div class="sp-content">
    Код (LotusScript):
    Option Public
    Option Declare
    Use "convert"
    Use "ErrorHandling"
    Public jSession As JavaSession
    Sub Initialize
    On Error GoTo ErrH
    Set jSession= New JAVASESSION
    Dim DocConverter As JAVACLASS, converter As JAVAOBJECT
    Set DocConverter = jSession.GetClass("com.activetree.tiff.server.SilentTiffConverter")
    Set converter=DocConverter.Createobject()
    Call converter.setAttribute(DocConverter.DOC_TYPE, DocConverter.PS)
    Call converter.setAttribute(DocConverter.DOC_LIST, {[/sample_tif/sample1.tif]})
    Call converter.setAttribute(DocConverter.OUTPUT_DIRECTORY, {/})
    Call converter.setAttribute(DocConverter.OUTPUT_STREAM, {sample1.ps})
    Call converter.setAttribute(DocConverter.DOC_LISTENER, "demo.activetree.tiff.TiffDocListener")
    '   Call converter.setAttribute(DocConverter.URL_AUTH_ID, {})
    '   Call converter.setAttribute(DocConverter.URL_AUTH_PASSWORD, {})

    Dim startProc As JavaMethod
    '   Dim myCollection
    '   Set myCollection = DocConverter.getClassMethods()
    '   ForAll m In myCollection
    '       Print m.MethodName, m.Signature
    '   End ForAll
    Set startProc=DocConverter.Getmethod({start}, {()V})
    Call startProc.invoke(converter)
    '   Call converter.start()
    Quit:
    Exit Sub
    ErrH:
    RaiseError_mod
    Resume Quit
    End Sub

    Function RaiseError_mod() As String
    Dim jError As JavaError
    Dim modInfo As String  
    modInfo = GetThreadInfo(LSI_THREAD_MODULE) & "::" & GetThreadInfo(LSI_THREAD_CALLPROC) & ": "
    Set jError = jSession.getLastJavaError()
    Dim es As String
    If (jError.errorMsg = "") Then
    es=modInfo
    If (Err = 0) Then
    es = es + "Manually raised an error"
    Else
    es = es + "Run time error: (" + Trim(Str(Err)) + ") " + Error$ + " at line: "+ Trim(Str(Erl))
    End If
    Else
    es=modInfo+"Error at line " & Erl & ": " & jError.errorMsg
    jSession.ClearJavaError
    End If
    Print es
    RaiseError_mod=es
    End Function
    код java либы (convert)<!--shcode--><pre><code class='java'>import com.activetree.common.conversion.DocConverter;
    import com.activetree.tiff.server.SilentTiffConverter;
    public class Untitled {
    }[/CODE]разумеется - имя класса не интересует (нужны тока импорты)
     
  10. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.073
    Симпатии:
    299
    хочу добавить, что можно печатать и из jai
    и принтера выбирать согласно javax.print.PrintService javax.print.PrintServiceLookup
    но с тифами будут заморочки...
    примеры реализации (я их по диагонали сморел) https://forums.oracle.com/thread/1283025

    хотелось бы отметить еще одну деталь...
    как пр-ло, сетевые принтеры поддерживают LPD и IPP
    т.о. можно ваще миновать ОС - http://code.google.com/p/jspi/source/brows...DocExample.java

    http://sourceforge.net/projects/jlpr/
     
  11. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.073
    Симпатии:
    299
  12. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.073
    Симпатии:
    299
    поигрался с прямой печатью (просто RAW), через PJL...
    выводит, но не подгоняет положение и размер картинки под лист, видать опций не хватает :)
    <div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">java код</div></div><div class="sp-body"><div class="sp-content"><!--shcode--><pre><code class='java'>import java.io.*;
    import java.net.*;

    import org.apache.commons.io.IOUtils;
    class TCPClient
    {
    /*************************************************************************/
    // known special characters
    /**
    * escape.
    */
    public static final char ESC = 0x1b;
    /**
    * end of transmission (EOF).
    */
    public static final char EOT = 0x04;
    /**
    * carriage return.
    */
    public static final String CR = "\r";
    /**
    * linefeed/newline.
    */
    public static final String LF = "\n";
    /**
    * form feed.
    */
    public static final String FF = "\f";
    /**
    * carriage return, line feed.
    */
    public static final String CRLF = CR + LF;
    /**
    * PostScript begin string.
    */
    public static final String PS = "%!PS";

    /*************************************************************************/
    // pjl strings
    /**
    * the pjl string.
    */
    public static final String PJL = "@PJL";
    private static final String UNESCAPED_UEL = "%-12345X";
    /**
    * the uel, gets the printer's attention to be able issue pjl commands.
    */
    public static final String UEL = ESC + UNESCAPED_UEL;
    /**
    * a full uel and enter into pjl.
    */
    public static final String ENTER_PJL = UEL + PJL + CRLF;
    /**
    * exit uel.
    */
    public static final String UEL_EXIT = UEL + CRLF;


    public static void main (String argv[]) throws Exception
    {
    // The line below illustrates the default port 6101 for mobile printers 9100 is the default port number
    // for desktop and tabletop printers
    Socket clientSocket=new Socket("KM7FA8DD",9100);

    DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream() );
    String strJob= "NAME = \"JOBNAME\" ";
    FileInputStream fis=new FileInputStream ("sample1.ps");
    outToServer.writeBytes(ENTER_PJL);
    outToServer.writeBytes(PJL + " JOB " + strJob + CRLF);
    outToServer.writeBytes(PJL + " ENTER LANGUAGE = POSTSCRIPT " + CRLF);
    IOUtils.copy(fis, outToServer);
    outToServer.writeBytes(ENTER_PJL);
    outToServer.writeBytes(PJL + " EOJ "+ strJob + CRLF);
    outToServer.writeBytes(UEL);
    IOUtils.closeQuietly(fis);
    IOUtils.closeQuietly(outToServer);
    clientSocket.close();
    }
    }[/CODE]
    константы брал отсюдова
    описание PJL
     
  13. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.073
    Симпатии:
    299
    расширил пример агента (там есть ряд "узких" моментов для LS2J)
    <div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">теперь и принтует</div></div><div class="sp-body"><div class="sp-content">
    Код (LotusScript):
    %REM
    Agent testTiff
    Created Nov 5, 2013 by Mikhail Cholokov/CRUINTERNET
    Description: Comments for Agent
    %END REM

    Option Public
    Option Declare
    Use "convert"
    'Use "ErrorHandling"
    %Include "lserr.lss"
    'Uselsx "*lsxlc"
    UseLSX "*javacon"
    %Include "lsconst.lss"
    Public jSession As JavaSession
    Sub Initialize
    PrintToDefault
    End Sub


    Function RaiseError_mod() As String
    Dim jError As JavaError
    Dim modInfo As String  
    modInfo = GetThreadInfo(LSI_THREAD_MODULE) & "::" & GetThreadInfo(LSI_THREAD_CALLPROC) & ": "
    Set jError = jSession.getLastJavaError()
    Dim es As String
    If (jError.errorMsg = "") Then
    es=modInfo
    If (Err = 0) Then
    es = es + "Manually raised an error"
    Else
    es = es + "Run time error: (" + Trim(Str(Err)) + ") " + Error$ + " at line: "+ Trim(Str(Erl))
    End If
    Else
    es=modInfo+"Error at line " & Erl & ": " & jError.errorMsg
    jSession.ClearJavaError
    End If
    Print es
    RaiseError_mod=es
    End Function
    %REM
    Sub CreatePS
    Description: Comments for Sub
    %END REM

    Sub CreatePS
    On Error GoTo ErrH
    Set jSession= New JAVASESSION
    Dim DocConverter As JAVACLASS, converter As JAVAOBJECT
    Set DocConverter = jSession.GetClass("com.activetree.tiff.server.SilentTiffConverter")
    Set converter=DocConverter.Createobject()
    Call converter.setAttribute(DocConverter.DOC_TYPE, DocConverter.PS)
    Call converter.setAttribute(DocConverter.DOC_LIST, {[/sample_tif/sample1.tif]})
    Call converter.setAttribute(DocConverter.OUTPUT_DIRECTORY, {/})
    Call converter.setAttribute(DocConverter.OUTPUT_STREAM, {sample1.ps})
    Call converter.setAttribute(DocConverter.DOC_LISTENER, "demo.activetree.tiff.TiffDocListener")
    '   Call converter.setAttribute(DocConverter.URL_AUTH_ID, {})
    '   Call converter.setAttribute(DocConverter.URL_AUTH_PASSWORD, {})

    Dim startProc As JavaMethod
    '   Dim myCollection
    '   Set myCollection = DocConverter.getClassMethods()
    '   ForAll m In myCollection
    '       Print m.MethodName, m.Signature
    '   End ForAll
    Set startProc=DocConverter.Getmethod({start}, {()V})
    Call startProc.invoke(converter)
    '   Call converter.start()
    Quit:
    Exit Sub
    ErrH:
    RaiseError_mod
    Resume Quit
    End Sub

    %REM
    Sub PrintToDefault
    Description: Comments for Sub
    %END REM

    Sub PrintToDefault
    On Error GoTo ErrH
    Set jSession= New JAVASESSION
    Dim BooleanC As Javaclass, IntegerC As JavaClass, Int1 As JavaObject
    Set BooleanC=jSession.GetClass("java.lang.Boolean")
    Set IntegerC=jSession.GetClass("java.lang.Integer")
    '   Set Int1=IntegerC.Createobject({(I)V},1)
    Dim SilentPrintTiff As Javaclass, silentPrint As JAVAOBJECT
    Set SilentPrintTiff=jSession.GetClass("com.activetree.tiff.server.SilentPrintTiff")
    Set silentPrint = SilentPrintTiff.CreateObject()
    'default media size
    Dim paperSize As String:paperSize = "(0, 0, 0, 0, 612, 792)"
    silentPrint.setAttribute SilentPrintTiff.PAPER, paperSize
    'when using paper - make sure To Use automatch To False; True Is default And it will Use size of the actual page.
    silentPrint.setAttribute SilentPrint.AUTO_MATCH_PAPER, BooleanC.FALSE
    'printer To Print
    Dim PrinService As Javaclass, defaultPrintService As Javaobject
    Dim PrintServiceLookup As Javaclass
    Set PrinService=jSession.GetClass("javax.print.PrintService")
    Set PrintServiceLookup=jSession.GetClass("javax.print.PrintServiceLookup")
    Set defaultPrintService = PrintServiceLookup.lookupDefaultPrintService()
    If defaultPrintService Is Nothing Then
    Print "No printers found."
    Exit Sub
    End if
    Dim printerName As String
    printerName = defaultPrintService.getName()
    Call silentPrint.setAttribute(SilentPrint.PRINTER_NAME, printerName)
    'auto rotate And center
    silentPrint.setAttribute SilentPrint.AUTO_ROTATE_AND_CENTER, BooleanC.TRUE
    'page scaling
    silentPrint.setAttribute SilentPrint.PAGE_SCALING, SilentPrint.FIT_TO_PRINTABLE_AREA
    'auto-match paper based On PDF page size.
    silentPrint.setAttribute SilentPrint.AUTO_MATCH_PAPER, BooleanC.FALSE
    'Print all docs As one Print job
    '   silentPrint.setAttribute(SilentPrint.SINGLE_PRINT_JOB, Boolean.TRUE);
    'collate
    silentPrint.setAttribute SilentPrint.COLLATE_COPIES, BooleanC.TRUE
    'copies defaut 1; can make it To N copies
    silentPrint.setAttribute SilentPrint.COPIES, IntegerC.Createobject({(I)V},1)
    'debug it
    'silentPrint.setAttribute(SilentPrint.DEBUG, Boolean.TRUE);
    'job Name
    silentPrint.setAttribute SilentPrint.JOB_NAME, "SilentPrintTIFF"
    'document
    silentPrint.setAttribute SilentPrint.DOC_LIST, {[/sample_tif/sample1.tif]}
    'Add a docListener
    'must have a default constructor For this class.
    silentPrint.setAttribute SilentPrint.DOC_LISTENER, "demo.activetree.tiff.TiffDocListener"
    'doc password protected If Any
    '   silentPrint.setAttribute(SilentPrint.PASSWORD, docPassword);
    'url protection If Any
    '   silentPrint.setAttribute(SilentPrint.URL_AUTH_ID, urlAuthId);
    '   silentPrint.setAttribute(SilentPrint.URL_AUTH_PASSWORD, urlAuthPassword);
    Dim startProc As Javamethod
    Set startProc=silentPrintTiff.Getmethod({start}, {()V})
    Call startProc.invoke(silentPrint)
    '   Call converter.start()
    Quit:
    Exit Sub
    ErrH:
    RaiseError_mod
    Resume Quit

    End Sub
     
Загрузка...

Поделиться этой страницей