SOFTWARE PARA CONTROLE IMPRESSAO EM SERVIDOR

CAUEFELIPE1 29/05/2012 07:35:53
#403049
LUIS HERRERA, bom dia...

Vou tentar te clarear as idéias...rsrsrsr

Vamos lá:
1- Existem DLL[ô]s envolvidas sim, mas são bibliotecas de funções, cujas funções acessam os dados do spool do Windows
2- Até onde pesquisei, ela um dia foi paga, mas hoje é open source (ao menos é o que esta no site do desenvolvedor, ALEVALE, me corrija se eu estiver errado).
3- Ela é um componente basedo em .net (como estou desenvolvendo em VB 2010, estou usando o .net framework 4, mas no site do desenvolvedor diz que é necessário o o framework 1 ou superior)
4- O servidor que nos referimos é a máquina que possui as impressoras instaladas (o print server), e como é uma DLL, você importa ela para dentro da classe (com um imports no começo da classe), e a partir daí você passa a chamar normalmente as funçoes contidas nela.

Sim, com essa estrutura é possivel fazer os testes sem problemas, basta você instalar as suas impressoras em um dos micros, e rodar o aplicativo nele, que a partir daí ele busca as impressoras instaladas no sistema (local ou de rede).
O seu roteador não exatamente o servidor, ele apenas faz a conexão entre os mincros. Um servidor é um micro que [Ô]serve[Ô] recursos (impressão, banco de dados, aplicações, arquivos e etc.) a outros micros.

Quando eu testo na empresa, eu rodo na minha estação, pois eu ainda não pude testa-lo no servidor, mas quando testo em casa, eu rodo o sistema em um servidor virtual com Windows Server 2003, instalado no meu notebook, apenas para testar o monitoramento de trabalhos que chagam remotamente na impressora.
Com relação aos Windows virtualizados, se o Virtual PC tiver uma forma de interface de rede com o SO hospedeiro, você também poderá testar o envio de trabalhos à impressora por eles.

O post ficou um pouco grande....rsrsrs
Qualquer duvida posta ai. Baixa o último anexo (o que eu digo que trago boas noticias), la você ja pega as DLL[ô]s e da uma olhada no código, ta em VB .NET (Se você não tiver, baixa a versão Express Edition, tem umas limitações, mas é gratuita, e é permitido desenvolver aplicativo comercialmente).

ALEVALE, mais uma vez, se eu estuver errado em algum ponto, me corrija.

Link do desenvolvedor da DLL:
http://www.merrioncomputing.com/Download/PrintQueueWatch/PrinterQueueWatchLicensing.htm

Vamos compartilhar o conhecimento!!
LUIS.HERRERA 29/05/2012 08:10:04
#403051
Caue bom dia.

No item (4) você disse que a aplicação (DLL) fica no servidor, ai está minha dúvida. Se minha aplicação .Net ficará nas estações, ouvi dizer que o Dot.Net não pode ficar centralizado no servidor e sim em cada estação, e como as DLLs não são mais registradas, como meu aplicativo irá encontrar essa DLL no servidor?

Desculpe a pergunta, mas só este ano comecei a usar o Dot.Net.
ALEVALE 29/05/2012 08:20:07
#403052
Caue perfeito !

Luis bom dia,

Depedende de como é a sua estrutura e o que deseja fazer, por exemplo na empresa utilizamos alguns sistemas desenvolvidos em .NET, para centralizar a aplicação (atualização, correção, remoção de apps etc) temos um diretório na rede e em todas as estações são somente atalhos para esse diretório, essa app.
Em todas as estações é necessário ter os requisitos da app por exemplo o Framework que foi desenvolvido o mais novo como já citado é o 4, então por sua vez as estações devem ter no minimo o framework instalado mas claro se for essa a realidade.

Sobre a sua pergunta:
Não, você irá ter uma única aplicação que ficará no [Ô]servidor de impressão[Ô] que irá monitorar as impressões ou seja em uma rede você terá XX estações e 1 servidor de impressão todas as estações estão conectadas nesse servidor que faz o gerenciamento de impressões que por sua vez a aplicação estará instalada e configurada para monitorar todos os [Ô]jobs de impressão[Ô] que passaram por ele.
CAUEFELIPE1 29/05/2012 08:21:15
#403053
Luis, a DLL fica no mesmo diretório do .exe da aplicação, por isso que ele consegue chamar ela.
Com relação a centralização no servidor, isso serve para monitorar as impressoras com uma única aplicação, mas nada impede de você colocar uma cópia da aplicação em cada estação (virtual ou física), e todas elas apontarem para a mesma base de dados.

Vou tentar explicara melhor como funciona a aplicação:
Ao importar a DLL para dentro da aplicação (lembre que a dll esta dentro do diretório do executavel), você adiciona dentro do componente as impressoras que vai monitorar (eu consegui fazer apenas com impressoras instaladas na máquina), tanto local como impressora de rede.
A partir daí a aplicação fica olhando o spool (software do windows que controla as impressoes), assim que chega um novo job de impressão, a aplicação consegue ver as informações dele, e até mesmo deixa-lo em pausa.

Ficou mais claro? Se não, pode perguntar mais.
CAUEFELIPE1 29/05/2012 09:19:29
#403055
Apenas complementando, descobri que quando eu monitoro uma impressora de rede, mesmo não estando no servidor, eu consigo monitorar todos os job[ô]s que chegam na mesma.
LUIS.HERRERA 29/05/2012 14:33:33
#403086
Caeu ainda tem algumas coisas que não entendi. Aproveito para explicar ao ALEVALE o que eu tenho ou teria que fazer.

No meu caso a aplicação não é para uso próprio, mas sim para terceiros (empresas cada uma com sua própria estrutura) que não tenho como saber, pois os clientes vão aparecendo aos poucos e raramente vou até eles, tudo é resolvido via web.

Então meu programa é instalado nos clientes, como citei no outro pos (rede, terminal server, estações). Ocorre que meu sistema é uma ferramenta de gestão, com vários módulos para controles específicos. Cada controle pode gerar (n) relatórios, alguns são controlados, sendo que a impressão hoje é responsabilidade do cliente, não tenho controle sobre isso, só a permissão de acesso que libera quem pode visualizar o relatório e quem pode imprimir.

Então tive solicitações para ter esse controle, saber quem imprimiu, o quê, em qual impressora e quantas cópias.

Pelo que entendi, sua solução é apenas uma aplicativo que monitora as impressões pelo spool do servidor de impressão. OK.
1- A dúvida é, tem como isso ser gerenciado pela minha aplicação que ficará ou no servidor (não impressão), ou na estação ou num terminal server?

2- Pelo que entendi eu tereia de ter duas aplicações, uma minha normal (gestão) e a outro nesse servidor de impressão (só para isso).
Então nesse caso, como seria a [Ô]Conversa[Ô] entre o meu aplicativo e esse no servidor de impressão, uma vez que só me interessa as impressões disparadas pelo meu aplicativo e não pela empresa como um todo?

3- Só não consegui entender ainda, como ele irá monitorar as impressões por exemplo do Terminal Server, uma vez que ela ocorrerá localmente numa filial e não na matriz onde os programas estão instalados, pois nesse caso a impressora local não está instalada no rede (servidor), mas o Terminal Server consegue gerenciar as estações remotas.

4- Caue você disse [Ô]...você adiciona dentro do componente as impressoras que vai monitorar ...[Ô] não entendi,como assim adiciona dentro do componente?

5- ALEVALE esse instalador que postou no site para download hoje, é o que perguntei no item (4) acima? Ou seja, ao rodar o aplicativo ele lista todas as impressoras instaladas no servidor, e você escolhe qual serão monitoradas? Então o componente guarda em algum lugar essas impressoras para controlar, é isso?

Obrigado pela ajuda.
CAUEFELIPE1 30/05/2012 10:36:40
#403145
Bom dia Luis

1 - A aplicação pode ficar no servidor de impressão, ou na estação, não consigo te informar quanto ao TS, de modo geral, a aplicação fica alocada onde estão instaladas as impressoras que se dejesa monitorar.

2 - Sim, nesse escopo você teria que ter duas aplicações, com relação a conversa entre os dois eu não sei te informar, mas como uma solução paleativa, você poderia verificar o nome do documento enviado, pois na maioria das vezes, é enviado nesse modelo: [Ô]Nome do aplicativo - nome do documento[Ô].

3 - Nesse caso, talvez voc~e possa oferecer isso como um aplicativo a parte, onde a proposta é o cliente monitorar todas as impressoes da empresa... é só uma idéia, mas eu não entendi essa pergunta, poderia explicar melhor?

4 - Adicionar é você indicar em um método do componente, quais as impressoras que ele ira monitorar (método AddPrinter(String PrinterName)), vc tem que adicionar as impresdsoras toda vez que o software iniciar, ou sempre que for necessário (isso vai depender da sua implementação).

5 - (Não foi direcionada a mim, mas vou tentar responder) Os exemplos que estão no tópico adicionam todas as impressoras que a máquina possui (o ultimo exemplo que eu coloquei adiciona também as impressoras de rede), mas nada impede de você adaptar o código para poder escolher as impressoras (a nessecidade que manda). Você pode efetuar a leitura das impressoras e armazena-las em um BD, e depois pega-las do BD e adicioná-las no componente (também vai depender de implementação e necessidade).

Qualquer dúvida, estamos ai!
LUIS.HERRERA 30/05/2012 14:24:54
#403160
Abaixo sobre cada resposta sua.

Entendi, teria então de fazer um teste.

Sobre 1, 2 e 3 - Seguindo sua explicação (1), eu acredito que poderia ser simples, na minha aplicação que monitora as impressões (no servidor de impressão), eu implementaria uma rotina que checaria no nome da impressão se tem o nome do meu sistema, se tiver eu pegaria os dados e gravaria no banco de dados da minha aplicação, assim não teria que manter a conversa entre os dois sistema, bastaria fazer uma pesquisa no meu banco de dados e pegar o que precisar.

Se nesta aplicação do servidor de impressão eu puder identificar exatamente:

-Nome do aplicativo que disparou a impressão
-Nome do usuário solicitante
-Nome do documento
-Nome e localização da impressora destino
-Número de impressões solicitadas e efetivamente impressas
-Data do servidor

Isso resolveria tudo.

4 - Acho interessante que esta aplicação gravasse no registro do servidor ou no DB as impressoras para que não precisasse reconfigurar a cada inicialização, como sugeriu no item (5).

Muito obrigado.



CAUEFELIPE1 30/05/2012 14:45:47
#403163
Luis, exato

Acredito que vale voce fazer o seguinte teste: abra a fila de impressão de uma impressora da máquina (pelo windows mesmo), mande um relatorio do seu software e veja como ele aparece na fila de impressão, se aparecer o nome no seu aplicativo, beleza, é só implementar a rotina.

Quanto as [Ô]SE[ô]s[Ô]..rsrs:

-Nome do aplicativo que disparou a impressão: Vai depender do resultado do teste descrito acima.
-Nome do usuário solicitante: a DLL retorna o nome do usuário logado na máquina.
-Nome do documento: existe a propriedade [Ô]PrintJob.Document[Ô]
-Nome e localização da impressora destino: O nome da impressora é possivel, quanto a localização, eu consegui retornar o nome do Server Print, e o noome do domínio de impressão(não entendi o q seria esse domínio)
-Número de impressões solicitadas e efetivamente impressas: Propriedades [Ô]PrintJob.Copies[Ô] e [Ô]PrintJob.PagesPrinted[Ô]
-Data do servidor: Propriedade [Ô]PrintJob.Subbimited[Ô]

Gravar o nome das impressoras você consege, mas sempre que iniciar o aplicativo você tera que adiciona-las (pegar o nome delas no BD), ou adicioná-las quando necessário.

Espero que ajude.

CAUEFELIPE1 31/05/2012 13:54:49
#403249
Nesse fim de semana eu vou tentar montar um projeto bpasico com uma base em access e postar aqui no fórum, ai acredito que fique melhor para entender a ideia.
Página 3 de 4 [32 registro(s)]
Tópico encerrado , respostas não são mais permitidas