Localizar impressoras instaladas com a tarefa de script

Aplica-se a: SQL Server SSIS Integration Runtime em Azure Data Factory

Os dados transformados pelos pacotes de Serviços de Integração frequentemente têm um relatório impresso como destino final. O espaço de nomes System.Drawing.Printing no Microsoft .NET Framework fornece classes para trabalhar com impressoras.

Note

Se quiser criar uma tarefa que possa reutilizar mais facilmente em vários pacotes, considere usar o código deste exemplo de tarefa Script como ponto de partida para uma tarefa personalizada. Para obter mais informações, consulte Desenvolvendo uma tarefa personalizada.

Description

O exemplo seguinte localiza impressoras instaladas no servidor que suportam papel em tamanho legal (como usado nos Estados Unidos). O código para verificar os tamanhos dos papéis suportados está encapsulado numa função privada. Para permitir que acompanhe o progresso do script enquanto verifica as definições de cada impressora, o script utiliza o Log método para gerar uma mensagem informativa para impressoras com papel tamanho legal e para emitir um aviso para impressoras sem papel tamanho legal. Estas mensagens aparecem na janela de Saída do IDE Microsoft Visual Studio Tools for Applications (VSTA) quando executa o pacote no designer.

Para configurar este exemplo de Tarefa de Script

  1. Crie a variável nomeada PrinterList com o tipo Object.

  2. Na página Script do Editor de Tarefas de Script, adicione esta variável à propriedade ReadWriteVariables.

  3. No projeto script, adiciona uma referência ao espaço de nomes System.Drawing .

  4. No seu código, use as instruções Imports para importar os espaços de nomes System.Collections e System.Drawing.Printing .

Code

Public Sub Main()  
  
    Dim printerName As String  
    Dim currentPrinter As New PrinterSettings  
    Dim size As PaperSize  
  
    Dim printerList As New ArrayList  
    For Each printerName In PrinterSettings.InstalledPrinters  
        currentPrinter.PrinterName = printerName  
        If PrinterHasLegalPaper(currentPrinter) Then  
            printerList.Add(printerName)  
            Dts.Events.FireInformation(0, "Example", _  
                "Printer " & printerName & " has legal paper.", _  
                String.Empty, 0, False)  
        Else  
            Dts.Events.FireWarning(0, "Example", _  
                "Printer " & printerName & " DOES NOT have legal paper.", _  
                String.Empty, 0)  
        End If  
    Next  
  
    Dts.Variables("PrinterList").Value = printerList  
  
    Dts.TaskResult = ScriptResults.Success  
  
End Sub  
  
Private Function PrinterHasLegalPaper( _  
    ByVal thisPrinter As PrinterSettings) As Boolean  
  
    Dim size As PaperSize  
    Dim hasLegal As Boolean = False  
  
    For Each size In thisPrinter.PaperSizes  
        If size.Kind = PaperKind.Legal Then  
            hasLegal = True  
        End If  
    Next  
  
    Return hasLegal  
  
End Function  
public void Main()  
        {  
  
            PrinterSettings currentPrinter = new PrinterSettings();  
            PaperSize size;  
            Boolean Flag = false;  
  
            ArrayList printerList = new ArrayList();  
            foreach (string printerName in PrinterSettings.InstalledPrinters)  
            {  
                currentPrinter.PrinterName = printerName;  
                if (PrinterHasLegalPaper(currentPrinter))  
                {  
                    printerList.Add(printerName);  
                    Dts.Events.FireInformation(0, "Example", "Printer " + printerName + " has legal paper.", String.Empty, 0, ref Flag);  
                }  
                else  
                {  
                    Dts.Events.FireWarning(0, "Example", "Printer " + printerName + " DOES NOT have legal paper.", String.Empty, 0);  
                }  
            }  
  
            Dts.Variables["PrinterList"].Value = printerList;  
  
            Dts.TaskResult = (int)ScriptResults.Success;  
  
        }  
  
        private bool PrinterHasLegalPaper(PrinterSettings thisPrinter)  
        {  
  
            bool hasLegal = false;  
  
            foreach (PaperSize size in thisPrinter.PaperSizes)  
            {  
                if (size.Kind == PaperKind.Legal)  
                {  
                    hasLegal = true;  
                }  
            }  
  
            return hasLegal;  
  
        }