Тема: печать

Здравствуйте!
не могу никак отпечатать на А3 формате:
код:
Acad.ActiveDocument.ActiveLayout.ConfigName = "HP Color LaserJet 5500 PCL 6"
Call Acad.ActiveDocument.ActiveLayout.SetWindowToPlot(PointsLowerLeft, PointsUpperRight)
Acad.ActiveDocument.ActiveLayout.PlotType = acWindow
Acad.ActiveDocument.ActiveLayout.PaperUnits = acMillimeters
Acad.ActiveDocument.ActiveLayout.PlotRotation = ac0degrees
Acad.ActiveDocument.ActiveLayout.CanonicalMediaName = "A3"
Acad.ActiveDocument.ActiveLayout.StandardScale = acScaleToFit
Acad.ActiveDocument.ActiveLayout.UseStandardScale = True
Acad.ActiveDocument.ActiveLayout.RefreshPlotDeviceInfo
Call Acad.ActiveDocument.Regen(acAllViewports)
Call Acad.ActiveDocument.Plot.PlotToDevice("HP Color LaserJet 5500 PCL 6")
упорно печатает на А4. что неправильно???
Заранее спасибо

Re: печать

а какой автокад?
может буду не совсем прав, однако бился с этим...
по моему, ввели  с 2005 автокада возможность послать на печать масив лейаутов, а не только один лейаут. По этому, может надо задать этот масив равным 1?
Dim oPlot As AcadPlot
    Dim AddedLayouts() As String
    Dim LayoutList As Variant
    Dim oLayout As AcadLayout
    Dim ArraySize As Integer, BatchCount As Integer
    ArraySize = 1
    ReDim Preserve AddedLayouts(1 To ArraySize)
    AddedLayouts(ArraySize) = leaut.Name
    LayoutList = AddedLayouts
    Set oPlot = Acdoc.Plot
    oPlot.SetLayoutsToPlot LayoutList
    oPlot.PlotToDevice
у меня получилось... хотя без этих маниуляций у меня просто выпадала ошибка...
тут конечно есть мои переменные, но думаю понятно...

Re: печать

а ещё у меня почему то не получалось програмно создать свой PlotConfiguration.
пришлось через ком строку с выходом в обычный пейдж сетап

Re: печать

Акад - 2002
в хелпе написано что SetLayoutsToPlot устаревший метод и в будущих версиях может не поддерживаться
Dim LayoutList As Variant
ReDim LayoutList(0)
LayoutList(0) = Acad.ActiveDocument.ActiveLayout.Name
Call Acad.ActiveDocument.Plot.SetLayoutsToPlot(LayoutList)
Invalid procedure call or argument при его вызове...

Re: печать

а еще написано что если этот метод не вызывать или вызывать параметром Null то печататься будет текущий лист...

Re: печать

> evgm

Call Acad.ActiveDocument.ActiveLayout.SetWindowToPlot(PointsLowerLeft, PointsUpperRight)
Acad.ActiveDocument.ActiveLayout.PlotType = acWindow

Возможно, размеры зависят от переменных

PointsLowerLeft, PointsUpperRight

Тип печати ведь

acWindow

Re: печать

не.. от этих переменных зависит что попадёт в область печати а что нет... все равно скейл то фит...
не назначется просто формат листа. может элементарно нет такого названия листа для печати в названиях листов принтера...
я печатал так: создавал пейдж сетап с нужными настройками (через стандартное окно), потом для текущего листа назначал все настройки необходимого пейдж сетапа (просто перебирал до нужного в цикле), и потом в печать.
leaut.UseStandardScale = False
leaut.StandardScale = acScaleToFit
leaut.SetWindowToPlot minExt, maxExt
leaut.PlotType = acWindow
            Acdoc.Plot.QuietErrorMode = False
            leaut.RefreshPlotDeviceInfo
            leaut.ConfigName = PlotConfiguration.ConfigName
            leaut.RefreshPlotDeviceInfo
            leaut.CanonicalMediaName = PlotConfiguration.CanonicalMediaName
            leaut.PaperUnits = PlotConfiguration.PaperUnits
            leaut.PlotHidden = PlotConfiguration.PlotHidden
            leaut.PlotOrigin = PlotConfiguration.PlotOrigin
            leaut.PlotRotation = PlotConfiguration.PlotRotation
            leaut.PlotViewportBorders = PlotConfiguration.PlotViewportBorders
            leaut.PlotViewportsFirst = PlotConfiguration.PlotViewportsFirst
            leaut.PlotWithLineweights = PlotConfiguration.PlotWithLineweights
            leaut.PlotWithPlotStyles = PlotConfiguration.PlotWithPlotStyles
            leaut.ScaleLineweights = PlotConfiguration.ScaleLineweights
            leaut.StyleSheet = PlotConfiguration.StyleSheet
а потом просто в печать Acdoc.Plot.PlotToDevice (для акада 2004)
а для 2006 пришлось содрать с хелпа то что писал выше, про масив на печать

Re: печать

а вообще, если хотите дам Вам свой код... вы же разбираетесь...
у меня работает

Re: печать

лист с названием А3 в списке доступных листов конкретного принтера есть - проверял
сам акад печатает хоть на А4 хоть на А3 если делать все тоже самое из диалогового окна
CanonicalMediaName изменяется с А4 на А3 но печатает все равно на А4
может в настройках самого принтера что-то???
по умолчанию там стоит А4...
а за пример кода конечно буду очень признателен

Re: печать

если в настройках самого принтера указать формат А3 то печатает только на А3 даже если CanonicalMediaName = А4...
дак как же принтеру сказать на какой формат выводить???

Re: печать

> evgm
Вспомнил. У меня такое было. Если в настройках принтера есть "Формат А3" или "ISO A3", то надо писать именно как записано в настройках притера, а не просто "А3".
Еще бы я проверил букву A. Русская или английская...

Re: печать

в настройках принтеров есть в том числе форматы и просто А3 и А4
буква А английская
установил Win2PDF - все тоже самое
печатает только на тот формат который установлен в настройках принтера - из кода не меняет...

Re: печать

я вам на ящик кинул.. гляньте

Re: печать

а ещё в хелпе написано, что после определённых назначений надо использовать .RefreshPlotDeviceInfo
попробуйте его почаще применить?

Re: печать

а. все. точно. после назначения формата бумаги надо этот метод и применять.. у меня в коде тоже так..
.RefreshPlotDeviceInfo

Re: печать

RefreshPlotDeviceInfo даже после каждого назначения свойств на помогает
кроме того
objPrinter.PaperSize = vbPRPSA3
говорит что property is read-only ...

Re: печать

что то никак не получилось у меня (даже API-ми выставлял принтеру нужный формат - не помогло - что-то не так все - таки я делаю)
пока временно обошел это так:
Acad.ActiveDocument.SendCommand("_.-plot" & vbCr & "Yes" & vbCr & vbCr & vbCr & Trim$(sPrintPaper) & vbCr ... и тд)
поскольку все настройки печать кроме формата бумаги задать удалось то на все вопросы отвечаем просто vbCr, а бумагу задаем...
через место это конечно, но... хоть как-то

Re: печать

а мой код работает?

Re: печать

вырезанно из контекста проекта, код рабочий печатает на плотере до сих пор

        ReDim MultiSetings(12)
        'PathToPlotIni
        MultiSetings(0) = PathToIni & "\plot.ini"
        'whatprint
        MultiSetings(1) = IniStringPrivate("plotconfig", "whatprint", MultiSetings(0))
        MultiSetings(2) = IniStringPrivate("plotconfig", "printer", MultiSetings(0))
        MultiSetings(3) = IniStringPrivate("plotconfig", "paperISO", MultiSetings(0))
        'granithy MIN MultiSetings(4) MAX MultiSetings(5)
        BoundingBoxMIN = ac.GetVariable("EXTMIN")
        MultiSetings(4) = BoundingBoxMIN(0) & "_" & BoundingBoxMIN(1)
        BoundingBoxMAX = ac.GetVariable("EXTMAX")
        MultiSetings(5) = BoundingBoxMAX(0) & "_" & BoundingBoxMAX(1)
        MultiSetings(4) = Replace(MultiSetings(4), ",", ".")
        MultiSetings(4) = Replace(MultiSetings(4), "_", ",")
        MultiSetings(5) = Replace(MultiSetings(5), ",", ".")
        MultiSetings(5) = Replace(MultiSetings(5), "_", ",")
        'orientation
        If BoundingBoxMAX(0) - BoundingBoxMIN(0) > BoundingBoxMAX(1) - BoundingBoxMIN(1) Then
         MultiSetings(6) = "L"
        Else
         MultiSetings(6) = "P"
        End If
        MultiSetings(7) = IniStringPrivate("plotconfig", "upsideDown", MultiSetings(0))
EnterSCALE:
        MultiSetings(8) = "1:" & CDbl(findSCALA(ac) / 1000)
        PrintMessage ac, 90, MultiSetings(8) & "000> 1:"
         strTemp = ac.Utility.getstring(False)
         If strTemp = "" Then
         Else
          If IsNumeric(strTemp) Then
           MultiSetings(8) = "1:" & CDbl(strTemp / 1000)
          Else
           PrintMessage ac, 92
           GoTo EnterSCALE
          End If
         End If
        MultiSetings(9) = IniStringPrivate("plotconfig", "offset", MultiSetings(0))
        MultiSetings(10) = IniStringPrivate("plotconfig", "style", MultiSetings(0))
        MultiSetings(11) = IniStringPrivate("plotconfig", "removeHiden", MultiSetings(0))
        MultiSetings(12) = IniStringPrivate("plotconfig", "NumberOfCopyes", MultiSetings(0))
        strTemp = MultiSetings(12)
        'If strTemp < 1 Or IsNumeric(strTemp) = False Then j = 1 Else j = strTemp
        If IsNumeric(strTemp) = False Then
          j = 1
        Else
             j = strTemp
             If j < 1 Then j = 1
        End If
        PrintMessage ac, 91, MultiSetings(8) & "000. " & GetMessage(86) & " " & j & ". " & GetMessage(85)  'Scale is= MultiSetings(8) Number of copies  J   Do you want to plot? [Yes/No] <N>:
        strTemp = Replace(ac.Utility.getstring(False), "/", "")
        strTemp = Format(Left$(strTemp, 1 * Percent), "<")
        If strTemp = "y" Then
         SetVar ac, "nomutt", 1
         intTemp = 0
         Do While intTemp < j
            ' SendCmdEX ac, "-plot" & vbCr
            ' SendCmdEX ac, "Y" & vbCr
            ' SendCmdEX ac, "Model" & vbCr                                    'from ini
            ' SendCmdEX ac, "\\192.168.9.9\Lexmark Z600 Series" & vbCr        'from ini
            ' SendCmdEX ac, "A4" & vbCr                                       'from ini
            ' SendCmdEX ac, "M" & vbCr
            ' SendCmdEX ac, "P" & vbCr                                        'from ini
            ' SendCmdEX ac, "Y" & vbCr                                        'from ini
            ' SendCmdEX ac, "W" & vbCr
            ' SendCmdEX ac, "0,0" & vbCr                                      'from DWG
            ' SendCmdEX ac, "700,1000" & vbCr                                 'from DWG
            ' SendCmdEX ac, "1:3" & vbCr                                      'from DWG
            ' SendCmdEX ac, "2,2" & vbCr                                      'from ini
            ' SendCmdEX ac, "Y" & vbCr
            ' SendCmdEX ac, "monochrome.ctb" & vbCr                           'from ini
            ' SendCmdEX ac, "Y" & vbCr
            ' SendCmdEX ac, "N" & vbCr
            ' SendCmdEX ac, "N" & vbCr
            ' SendCmdEX ac, "N" & vbCr
            ' SendCmdEX ac, "Y" & vbCr
            '---------------------------------------
        '    GetCurrentFileName ac
        '    strTemp4 = GetCurrentFileName(ac, True) & ".ini "
        '    'MsgBox GetCurrentFileName(ac) & ".ini "
            SendCmdEX ac, "-plot" & vbCr
            'Detailed plot configuration?
            SendCmdEX ac, "Y" & vbCr
            'Enter a layout name or [?] <Model>:
            SendCmdEX ac, MultiSetings(1) & vbCr       'from ini
            'Enter an output device name or [?]
            SendCmdEX ac, MultiSetings(2) & vbCr       'from ini
            'Enter paper size or [?] <A4>:
            SendCmdEX ac, MultiSetings(3) & vbCr       'from ini
            'Enter paper units [Inches/Millimeters] <Millimeters>:
            SendCmdEX ac, "M" & vbCr
            'Enter drawing orientation [Portrait/Landscape] <Portrait>:
            'SendCmdEX ac, IniStringPrivate("plotconfig", "orientation", "c:\plot.ini") & vbCr                                    'from DWG
            SendCmdEX ac, MultiSetings(6) & vbCr       'from DWG
            'Plot upside down? [Yes/No] <No>:
            SendCmdEX ac, MultiSetings(7) & vbCr                                                        'from ini
            'Enter plot area [Display/Extents/Limits/View/Window] <Window>:
            SendCmdEX ac, "W" & vbCr
            'Enter lower left corner of window <0.000000,0.000000>:
            'SendCmdEX ac, IniStringPrivate("plotconfig", "x0y0", "c:\plot.ini") & vbCr                  'from DWG
            SendCmdEX ac, MultiSetings(4) & vbCr                                                                    'from DWG
            'Enter upper right corner of window <700.000000,1000.000000>:
            'SendCmdEX ac, IniStringPrivate("plotconfig", "x1y1", "c:\plot.ini") & vbCr                                      'from DWG
            SendCmdEX ac, MultiSetings(5) & vbCr                                      'from DWG
            'Enter plot scale (Plotted Millimeters=Drawing Units) or [Fit] <1=3>:
            'SendCmdEX ac, IniStringPrivate("plotconfig", "scale", "c:\plot.ini") & vbCr                                     'from DWG
            'SendCmdEX ac, CStr("1:" & findSCALA(ac)) & vbCr
            SendCmdEX ac, MultiSetings(8) & vbCr
            'Enter plot offset (x,y) or [Center] <2.00,2.00>:
            SendCmdEX ac, MultiSetings(9) & vbCr                                    'from ini
            'Plot with plot styles? [Yes/No] <Yes>:
            SendCmdEX ac, "Y" & vbCr
            'Enter plot style table name or [?] (enter . for none) <monochrome.ctb>:
            SendCmdEX ac, MultiSetings(10) & vbCr                                     'from ini
            'Plot with lineweights? [Yes/No] <Yes>:
            SendCmdEX ac, "Y" & vbCr
            'Remove hidden lines? [Yes/No] <No>:
            SendCmdEX ac, MultiSetings(11) & vbCr
            'Write the plot to a file [Yes/No] <N>:
            SendCmdEX ac, "N" & vbCr
            'Save changes to model tab [Yes/No]? <N>
            SendCmdEX ac, "N" & vbCr
            'Proceed with plot [Yes/No] <Y>: Y
            SendCmdEX ac, "Y" & vbCr
            intTemp = intTemp + 1
         Loop
         SetVar ac, "nomutt", 0
        End If  'peceatati=y
      End If