« first day  last day (14 days later) » 

1:20 PM
faca uma impressao e manda um printscreen da impressao
para ver q e q quer dizer com embaraco
@M.Victor falemos por aqui
 
1:39 PM
Bom dia!
 
boas
 
como estava dizendo lá nos comentários, você realizou testes com seu código e conseguiu o resultado esperado?
tentou imprimir uma string muito grande e o restante dela foi parar em outra folha?
 
isto e pagina um da minha impressao (tem mais 2 paginas)
o texto e corrido, sem quebras de linha
e sem usar as margens que tem (20, 20, 20, 20 e uma ideia terrivel para ser sincero)
 
quebras de linha podem atrapalhar?
não há uma forma segura de eu usar as margens?
 
diria para ir por partes, esqueca as margens por agora (remova-as)
e tente por texto direito
sim quebras de linhas afectam a formatacao
 
1:54 PM
de acordo com meus testes o texto é passado por outra página mas só depois que foi escrito na mesma página duas vezes
para outra*
 
2:12 PM
poderia colocar todo o seu código na resposta para eu poder comparar com o meu e ver o que está errado?
 
static void Main(string[] args)
{
IEnumerable<int> test = Enumerable.Range(0, 2000);
StringBuilder sb = new StringBuilder();

foreach (var t in test)
{
sb.AppendFormat("Test: {0} ", t);
}

PrintPreviewDialog dialog = new PrintPreviewDialog
{
Document = new PrintDocument()
};

string textoFinal = sb.ToString();
string stringCopia = textoFinal;
// Margins margem = new Margins(20, 20, 20, 20);
// dialog.Document.DefaultPageSettings.Margins = margem;

dialog.Document.PrintPage += (sender, e) =>
{
int caracteresNaPagina;
mais simples por aqui do q estar a editar a resposta (para ja)
 
o meu stringCopia = stringFinal; está dentro da void Imprimir()
 
sim estou a ver mas nao ha diferenca, so n tenho o internal Imprimir tambem pq estou numa sandbox e torna mais simples assim
continuo a achar q o seu problema esta nos espacos/margens
eu tiraria a imagem/espacos/margens ate ter tudo em condicoes, dps comecava a por as coisas uma a uma
 
2:27 PM
tentei retirando as margens e as quebras de linha, mas o texto continua sendo escrito sobre o outro
 
mande um screenshot da pagina que imprime
 
2:44 PM
tentei usando seu método
mas para mim fica embaralhado
estou começando a crer que o erro está aqui: textoFinal = sb.ToString();
stringCopia = textoFinal;
eu estou colocando isto dentro da void Imprimir() juntamente com o foreach
 
manda-me o seu codigo sff
 
IEnumerable<int> test = Enumerable.Range(0, 2000);
StringBuilder sb = new StringBuilder();

string textoFinal;
string stringCopia;

internal void Imprimir()
{
try
{
foreach (var t in test)
{
sb.AppendFormat("Test: {0} ", t);
}
textoFinal = sb.ToString();
stringCopia = textoFinal;
printDocumento.PrintPage += printDocumento_PrintPage;
//Margins margem = new Margins(20, 20, 20, 20);
//printDocumento.DefaultPageSettings.Margins = margem;
printPrevisao.ShowDialog();
}
catch (Exception exp)
{
MessageBox.Show("Erro: " + exp.Message.ToString());
 
e o conteudo de printDocumento_PrintPage?
 
private void printDocumento_PrintPage(object sender, PrintPageEventArgs e)
{
int caracteresNaPagina;
int linhasPorPagina;

var Fonte = new Font("Arial", 9);

e.Graphics.DrawImage(Properties.Resources.logoI, 20, 20, 20, 20);

StringFormat alinhar = new StringFormat(StringFormatFlags.NoClip) { Alignment = StringAlignment.Near };

Rectangle size = new Rectangle(e.MarginBounds.X, e.MarginBounds.Y + 30, e.MarginBounds.Width, e.MarginBounds.Height);

e.Graphics.MeasureString(stringCopia, Fonte, size.Size, alinhar, out caracteresNaPagina, out linhasPorPagina);
este é todo o código
 
size.Size
de onde e q vem este size?
esqueca, n reparei
 
2:50 PM
ele consta no código que você me passou logo acima
tenho quase certeza que o problema é causado na void Imprimir
 
mostre o codigo onde cria o PrintPreviewDialog
e o PrintDocument
corri o seu codigo e esta a sair tudo normalmente :/
 
'-'
achei o erro
o problema era aqui: printDocumento.PrintPage += printDocumento_PrintPage;
 
entao?
 
estou usando winforms e já tinha o evento apontado anteriormente
 
ahh :P
pronto ta explicado
 
2:58 PM
não preciso de escreve-lo novamente
ele estava criando duas instâncias então?
 
nao, estava era a invocar o mesmo metodo duas vezes
e assim escrevia duas vezes para o documento
 
sim, foi o que pensei
agora está funcionando perfeitamente!
gostaria de aproveitar e lhe pedir ajuda para solucionar mais um pequeno problema
eu gostaria que a logo fosse impressa somente na primeira folha
 
para isso vai ter mudar a logica, cm tem o logo dentro do evento e impresso smp
 
mas como tenho que usar o e.Graphics para desenha-la e ele só consta no evento printPage, logicamente ela terá que ficar lá dentro
 
coloque uma flag que diz se ja foi impresso ou nao
 
3:02 PM
consequentemente será impressa em todas as páginas
humm flag?
 
se nao foi impresso imprime e ajusta a posicao do texto, caso contrario nao faz nada
 
poderia me dar um exemplo?
 
um bool
tipo bool imprimirLogo = true;
if(imprimirLogo)
{
// imprime logo
imprimirLogo = false;
}
e depois no

if (!e.HasMorePages)
stringCopia = textoFinal;

fica

if (!e.HasMorePages)
{
stringCopia = textoFinal;
imprimirLogo = true;
}
caso contrario so imprime no preview e nao imprime no documento
 
fiz dessa maneira mas a imagem continua sendo impressa em todas as páginas
 
if(imprimirLogo)
e.Graphics.DrawImage(Properties.Resources.logoI, 20, 20, 20, 20);
nao se esqueca de colocar imprimirLogo fora do evento
 
3:13 PM
ohh foi um erro meu
não defini para false a bool após desenhar a imagem
corrigi e funcionou perfeitamente
muito obrigado, só tenho a lhe agradecer por tomar do seu tempo e me ajudar a resolver meu problema!
 
sem problema :)
boa continuacao
 
obrigado! Grande abraço e sucesso!
 

« first day  last day (14 days later) »