Tamanho de papel personalizado no Crystal Reports 2008

11/03/2010

Prezados;

Estou com o seguinte problema:

Criei um relatório no Crystal Reports (Visual Studio 2008) com tamanho personalizado (8,5 x 5,4 cm), para imprimir possuo uma rotina que exporta o relatório para PDF.

Nessa rotina utilizo o comando abaixo para fixar o tamanho do relatório:

'Definindo o tamanho do Papel
crReportDocument.PrintOptions.PaperSize = PaperSize.PaperA4

Este comando fixa tamanho do papel para A4, não consegui ainda definir para o tamanho personalizado.

Como faço isso via código?

Indemberge
Indemberge Santos

Indemberge Santos

Curtidas 0

Respostas

Luiz Maia

Luiz Maia

11/03/2010

Imbemberg, Tente o codigo abaixo: Dim i As Integer Dim doctoprint As New System.Drawing.Printing.PrintDocument() doctoprint.PrinterSettings.PrinterName = "PrinterName" For i = 0 To doctoprint.PrinterSettings.PaperSizes.Count - 1 Dim rawKind As Integer If doctoprint.PrinterSettings.PaperSizes(i).PaperName = "CustomPaperSizeName" Then rawKind = CInt(doctoprint.PrinterSettings.PaperSizes(i).GetType().GetField("kind", Reflection.BindingFlags.Instance Or Reflection.BindingFlags.NonPublic).GetValue(doctoprint.PrinterSettings.PaperSizes(i))) MessageBox.Show(rawKind.ToString) Exit For End If Next O que acontece é que o CR salva a informação do formato do formulario numa memoria sem portabilidade. E salva o ID ao inves do Nome. Isto gera um problema para o windows reconhecer.   O metodo acima na verdade é um truque para burlar este bug do CR. Qualquer dúvida, me avise, ok?   Abraços Att Luiz Maia
GOSTEI 0
Indemberge Santos

Indemberge Santos

11/03/2010

Luiz;

Tudo bem?

Ainda estou na luta com esta aplicação, contudo um pouco mais tranquilo.

Achei esse código na web, mas não havia entendido.

Localmente funcionou, informei o nome da impressora padrão do window e o nome do papel personalizado não havia informado e funcionou, mas na web não funcionou da mesma forma. Pedi para o pessoal que cuida do servidor (onde a aplicação está hospedada) para criar um papel personalizado com as medidas que preciso (85 x 54 milímetros) e me enviar o nome.

É isso mesmo?

Um abraço,

Indemberge
GOSTEI 0
Luiz Maia

Luiz Maia

11/03/2010

Sim, isto mesmo.   Mas isto pode dar algum tipo de problema nos Hosts mesmo. Tipo cluster e etc... Mas a principio, funcionara! Fico no aguardo, ok?   Abraços Att Luiz Maia
GOSTEI 0
Indemberge Santos

Indemberge Santos

11/03/2010

Luiz;   A impressora foi instalada no servidor e o papel personalizado criado, mas observei que devemos definir a impressora que possui o papel personalizado que preciso, como impressora padrão do windows.   Há como informarmos a impressora que iremos utilizar via código mesmo ela não sendo a impressora padrão do windows?   Abraço,   Indemberge
GOSTEI 0
Luiz Maia

Luiz Maia

11/03/2010

Indemberg,   De uma olhada no exemplo abaixo, ele lista todas as impresoras num combo e dai ´eescolhido a que vc quer. So alterar o codigo para o que precisa:   uses
  Printers, Winspool;


procedure TForm1.FormCreate(Sender: TObject);
begin
  ComboBox1.Items.Assign(Printer.Printers);
end;


procedure TForm1.ComboBox1Change(Sender: TObject);
var
  hPrinter: THandle;
  PrtName: string;
  DriverInfo: PDriverInfo2;
  dwNeeded: DWORD;
begin
  Memo1.Clear;
  PrtName := Combobox1.Text;
  OpenPrinter(PChar(PrtName), hPrinter, nil);
  GetPrinterDriver(hPrinter, nil, 2, DriverInfo, 0, dwNeeded);
  GetMem(DriverInfo, dwNeeded);
  if GetPrinterDriver(hPrinter, nil, 2, DriverInfo, dwNeeded, dwNeeded) then
  begin
        // Add infos to Memo1
        Memo1.Lines.Add('Version: ' + IntToStr(DriverInfo.cVersion));
        Memo1.Lines.Add(StrPas(DriverInfo.pName));
        Memo1.Lines.Add(StrPas(DriverInfo.pEnvironment));
        Memo1.Lines.Add(StrPas(DriverInfo.pDriverPath));
        Memo1.Lines.Add(StrPas(DriverInfo.pDataFile));
        Memo1.Lines.Add(StrPas(DriverInfo.pConfigFile));
  end
  else
        Memo1.Lines.Add('No Info needed = ' + IntToStr(dwNeeded));

  ClosePrinter(hPrinter);
  FreeMem(DriverInfo);
end;     Abraços Att Luiz Maia
GOSTEI 0
Indemberge Santos

Indemberge Santos

11/03/2010

Luiz;

Esse código é do Delphi, eu estou programando em ASP.NET / VB.net Web Appliction.

Vi algo sobre PrintDialog(), mas testei e não funcionou.

Indemberge
GOSTEI 0
Luiz Maia

Luiz Maia

11/03/2010

Indemberg,   De uma olhada neste codigo, veja se te atende:   Private Sub MenuItem18_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MenuItem18.Click
'page setup
PageSetupDialog1.Document = PrintDocument2
PageSetupDialog1.Document.DefaultPageSettings.Colo r = False
PageSetupDialog1.Document.DefaultPageSettings.Land scape = True
PageSetupDialog1.ShowNetwork = True
PageSetupDialog1.PrinterSettings.PrinterName = "Acrobat PDFWriter"
PageSetupDialog1.ShowDialog()
End Sub     Altere o PrinterName.   Abraços Att Luiz Maia  
GOSTEI 0
Devmedia

Devmedia

11/03/2010

INDEMBERGE,
a resposta do consultor responder a sua dúvida? Podemos encerrar o chamado?
GOSTEI 0
Devmedia

Devmedia

11/03/2010

INDEMBERGE,
a resposta do consultor responder a sua dúvida? Podemos encerrar o chamado?
GOSTEI 0
Luiz Maia

Luiz Maia

11/03/2010

Indemberg, Como não obtivemos retorno deste post, estaremos concluindo o mesmo. Lembrando que você pode reabrí-lo a qualquer momento caso a dúvida persista! Abraços
Att Luiz Maia
GOSTEI 0
Indemberge Santos

Indemberge Santos

11/03/2010

Luiz;   Permaneço com o problema, confesso que ainda não testei último código que você me enviou.   O meu maior problema é no servidor, localmente tudo funciona perfeitamente.   O funcionário da empresa que hospeda a aplicação disse que definiu como impressora padrão do windows  a impressora que possui um papel personalizado com o tamanho que preciso, contudo quando verifiquei descobri que na minha aplicação não está setada como impressora padrão.   A impressora que aparece pra mim é "Microsoft XPS Document Writer".   Conseguiria resolver o problema se eu conseguisse criar um papel personalizado com o tamanho que preciso, 8,5 x 5,3 cm, só que não encontrei nessa impressora opção para papel personalizado.   Como estou com urgência, resolvi fazer a impressão localmente, baixo o banco e faço local, até resolver isso.   Abraço,   Indemberge
GOSTEI 0
Luiz Maia

Luiz Maia

11/03/2010

Ok Indemberg, qualquer duvida com o cosigo, pode reabrir o chamado, ok? Abraços Att Luiz Maia
GOSTEI 0
Luiz Maia

Luiz Maia

11/03/2010

Ok Indemberg, qualquer duvida com o cosigo, pode reabrir o chamado, ok? Abraços Att Luiz Maia
GOSTEI 0
Luiz Maia

Luiz Maia

11/03/2010

Ok Indemberg, qualquer duvida com o cosigo, pode reabrir o chamado, ok? Abraços Att Luiz Maia
GOSTEI 0
POSTAR