Tamanho de papel personalizado no Crystal Reports 2008
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
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
Curtidas 0
Respostas
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
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
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
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
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
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
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
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
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
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
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
11/03/2010
INDEMBERGE,
a resposta do consultor responder a sua dúvida? Podemos encerrar o chamado?
a resposta do consultor responder a sua dúvida? Podemos encerrar o chamado?
GOSTEI 0
Devmedia
11/03/2010
INDEMBERGE,
a resposta do consultor responder a sua dúvida? Podemos encerrar o chamado?
a resposta do consultor responder a sua dúvida? Podemos encerrar o chamado?
GOSTEI 0
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
Att Luiz Maia
GOSTEI 0
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
11/03/2010
Ok Indemberg, qualquer duvida com o cosigo, pode reabrir o chamado, ok?
Abraços
Att
Luiz Maia
GOSTEI 0
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
11/03/2010
Ok Indemberg, qualquer duvida com o cosigo, pode reabrir o chamado, ok?
Abraços
Att
Luiz Maia
GOSTEI 0