Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

MSA_GT

FPDF com limitação de texto na .Cell

Recommended Posts

Preciso fazer um formulário estilo tabela, acontece que mesmo setando o tamanho e altura de MultiCell ela acaba imprimindo duas linhas numa mesma ou estoura a borda... O que posso fazer ?!

Compartilhar este post


Link para o post
Compartilhar em outros sites

use o table.ext

Code:
var widths;
this.Table = {Border:{Width:0.1,Color:''},Fill:{Color:''},TextAlign:"J"}
this.SetColumns=function(){this.widths=arguments;}
this.HexToRGB=function(value){
var ar=new Array()
s= new String(value.toUpperCase());
ar["R"] = parseInt(s.substring(0,2),16);
ar["G"] = parseInt(s.substring(2,4),16);
ar["B"] = parseInt(s.substring(4,6),16);
return ar;
}
this.Row=function()
{
var xdata = arguments
var xi;var xh;var xnb;
var xw;
xnb=0;
for(xi=0;xi<xdata.length;xi++){xnb=Math.max(xnb,this.NbLines(this.widths[xi],xdata[xi]))};
xh=(xnb)*5;
this.CheckPageBreak(xh);
for(xi=0;xi<xdata.length;xi++)
{
xw=this.widths[xi];
xx=this.GetX();
xy=this.GetY();
if (this.Table.Border.Width>0||this.Table.Fill.Color!=''){
var xstyle='';
this.SetLineWidth(this.Table.Border.Width);
if(this.Table.Border.Color!=''){
var RGB = this.HexToRGB(this.Table.Border.Color);
this.SetDrawColor(RGB["R"],RGB["G"],RGB["B"]);
xstyle+='D';
}
if(this.Table.Fill.Color!=''){
var RGB = this.HexToRGB(this.Table.Fill.Color);
this.SetFillColor(RGB["R"],RGB["G"],RGB["B"]);
xstyle+="F"
}
this.Rect(xx,xy,xw,xh,xstyle);
}
this.MultiCell(xw,5,xdata[xi],0,this.Table.TextAlign);
this.SetXY(xx+xw,xy);
}
this.Ln(xh);
}
this.CheckPageBreak=function(xh)
{
if(this.GetY()+xh>this.PageBreakTrigger)this.AddPage(this.CurOrientation);
}
this.NbLines=function(xw , xtxt)
{
var xnb;
xcw=this.CurrentFont["cw"];
if(xw==0)xw=this.w-(this.rMargin)-this.x;
xwmax=((xw)-2*(this.cMargin))*1000/(this.FontSize);
xs=lib.str_replace("\r","",xtxt);
xnb=xs.length;
if(xnb>0 && xs.charAt(xnb-1)=="\n")xnb--;
xsep=-1;
xi=0;
xj=0;
xl=0;
xnl=1;
while(xi<xnb)
{
xc=xs.charAt(xi);
if(xc=="\n")
{
xi++;
xsep=-1;
xj=xi;
xl=0;
xnl++;
continue;
}
if(xc==" ")xsep=xi;
xl+=(xcw[xc]);
if(xl>xwmax)
{
if(xsep==-1)
{
if(xi==xj)xi++;
}
else xi=xsep+1;
xsep=-1;
xj=xi;
xl=0;
xnl++;
}
else {xi++;}
}
return xnl;
}

 

aqui a página que cria a tabela de quatro collumn

Code:
<!--#include file="fpdf.asp"-->
<%
Dim i,pdf,d
Set pdf=CreateJsObject("FPDF")
pdf.CreatePDF()
pdf.SetPath("fpdf/")
pdf.LoadExtension("table")
pdf.Open()
pdf.AddPage()
pdf.Table.Border.Width = 0.1
pdf.Table.Border.Color="006699"
'pdf.Table.Fill.Color="C9C8C0"
pdf.Table.TextAlign = "L"
pdf.SetColumns 30,57,57,34
'pdf.SetAligns "C", "L", "L", "C"
pdf.SetFont "Arial","B",10
pdf.Row "Resultado","perguntas respondidas","resposta dada","Status"
pdf.SetFont "Arial","",10
for i=0 to 20
a= vbcrlf & "1.a" 
b="Texto longo pergunta que vai usar mais de uma linha de texto" 
c="A) Responder a uma que deve passar por cima de linha" & vbcrlf & ""&_
  "B) Rresposta dois que deve passar por cima da linha" & vbcrlf & ""&_
  "C) Resposta três que deve passar por cima de linha" & vbcrlf & ""&_
  "D) Esta é a resposta para o que deve passar por cima de linha" & vbcrlf & "" 
d=vbcrlf & "Correto" & vbcrlf & "2 de 3"
pdf.Row a,b,c,d
next
pdf.Close()
pdf.Output()
%>

e dê uma olhada aqui

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sua ajuda foi de grande valia, porém não era a minha dúvida, meu código é este e a imagem dele remontando

Minha intensão é apenas imprimir o que couber na celula, examente uma linha, se trata de um formulário então não pode ficar dando esse estouro.

fpdf.jpg

Set pdf=CreateJsObject("FPDF")
pdf.CreatePDF "L","mm","A4"
pdf.SetPath("fpdf/")
pdf.SetFont "Arial","",16
pdf.Open()
pdf.AddPage()
pdf.SetFont "Times"
pdf.SetFontSize 10
pdf.SetTopMargin 0

texto="TEXTO SAI TODO REMONTADO TEXTO SAI TODO REMONTADO TEXTO SAI TODO REMONTADO TEXTO SAI TODO REMONTADO TEXTO SAI TODO REMONTADO TEXTO SAI TODO REMONTADO TEXTO SAI TODO REMONTADO  "

pdf.MultiCell 63,2, texto, 1,0
pdf.Close()
pdf.Output()

Compartilhar este post


Link para o post
Compartilhar em outros sites

MSA_GT você quer que a célula não tenha quebra automática que tudo fique na mesma linha...!? é isso!?

 

acrescente o nowrap

 

exemplo:

 

<td width="50%" nowrap >Gustavo</td>

 

PS: tem componente PDF que gera o arquivo a partir de uma página html ou asp, aspx ... particularmente mais rápido com editores gráficos se produz mais rápidos os sistemas...



conhece esse componente... ABCpdf5.Doc vê se tem disponível em sua hospedagem...

Compartilhar este post


Link para o post
Compartilhar em outros sites

use o SetLineWidth, ele define a espessura da linha. Por padrão, o valor é igual a 0,2 milímetros.

Compartilhar este post


Link para o post
Compartilhar em outros sites
  • MSA_GT relendo você quer também limitar o tamanho dos dados com isso vc terá que contar o limite de caracteres dentro da célula e colocar um left(VariavelDoTexto,40) & "..."

o 40 foi somente um exemplo ... o reticências é só para informar que tem mais escrita com base nisso coloque um if para ver se for maior que 40 vc corta e coloca o "..." senão ponha o texto completo....

 

att;

Compartilhar este post


Link para o post
Compartilhar em outros sites

use o SetLineWidth, ele define a espessura da linha. Por padrão, o valor é igual a 0,2 milímetros.

 

Preciso do seguinte numa célula de 50mm não pode exceder texto superior a isso, se o conteudo for maior para até onde dá.

Compartilhar este post


Link para o post
Compartilhar em outros sites

olha este exemplo

 

<%@language=javascript%>
<!--#include file="fpdf.asp"-->
<%

// criando o pdf
pdf=new FPDF(); 

// adicionar várias funções como títulos padrões para todas as páginas, numeração de páginas e etc.

// montando o corpo do pdf, setando o tipo da folha, tipo de medida e o tamanho da folha
pdf.CreatePDF('P','mm','A4');
pdf.SetPath("fpdf/");
pdf.Open();

// adcionando página
pdf.AddPage();

// setando fonte e tamanho
pdf.SetFont('Arial','',12);

// setando grossura da linha
pdf.SetLineWidth(50.00)

// setando linhas, repare que, as medidas são feitas em x1, y1, x2 e y2, começando no ponto inicial de x e y e finalizando nos mesmo.
pdf.Line('7','24','201','24') 
// criamos aki uma linha horizontal, a linha pode ser feita de qualquer jeito, vertical, diagonal somente setando os valores de x e y.

// escrevendo um texto
pdf.Text('7','24','Creative Commons lança iniciativa para difundir cases de grande impacto com licenças abertas')
// na linha acima setamos primeiro a função Text, depois aonde começamos a escrever a partir do x e y e por fim o texto a ser adicionado

// fechando o pdf

pdf.Output();
%>

Compartilhar este post


Link para o post
Compartilhar em outros sites

você testou o exemplo acima...

com o

pdf.SetLineWidth(50.00)

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.