Trozos
Un Chunk es la pieza significativa ms pequea de texto que se puede trabajar. Es equivalente ASP.NET
es el <asp:Label>. Al igual que con la etiqueta, es necesario tener cuidado de cmo utiliza trozos. El
siguiente fragmento muestra cmo configurar el texto de una Chunk, a continuacin, escribir al
documento PDF 3 veces:
string path = Server.MapPath("PDFs");
Rectangle r = new Rectangle(400, 300);
Document doc = new Document(r);
PdfWriter.GetInstance(doc, new FileStream(path + "/Blocks.pdf", FileMode.Create));
doc.Open();
Chunk c1 = new Chunk("A chunk represents an isolated string. ");
for (int i = 1; i < 4; i++)
{
doc.Add(c1);
}
El resultado se puede ver a continuacin, que muestra el texto de haber sido escrito en el documento
pero parece un lo. Trozos tienen ningn concepto de cmo forzar una nueva lnea cuando la longitud es
superior a la anchura disponible en el documento. En realidad, todo lo que se deben utilizar para es para
cambiar o definir el estilo de una palabra o frase en lnea. Por supuesto, puedes forzar un salto de lnea
utilizando "\ n" o Medio Ambiente.NewLine, o incluso Chunk. NEWLINE como parte de la cadena que da
un trozo.
El fragmento tiene una serie de mtodos para permitir que hagas esto,
como setUnderLine (), setBackground (), ysetTextRise (), as como una serie de constructores que le
permiten configurar el tipo de letra y sus estilos.
Chunk chunk = new Chunk("Setting the Font", FontFactory.GetFont("dax-black"));
chunk.SetUnderline(0.5f, -1.5f);
Frases
La frase es la siguiente contenedor de la jerarqua. Una frase es una serie de trozos, y obligar a una
nueva lnea cuando la longitud de su contenido excede los mrgenes verticales del documento. El
espacio entre cada lnea (en realidad, la medida tomada entre las lneas de base de cada lnea, o "lder")
es de 1,5 veces el tamao de la fuente.Dado que el tamao de fuente por defecto se aplic por
iTextSharp (12 puntos), el cdigo de abajo resultar en un lder de 16pt. Puede establecer el liderazgo o
la fuente como parte del inicio de una nueva frase, as como pasar una cuerda o trozo de establecer su
contenido a travs de varios constructores sobrecargados de la frase. El siguiente fragmento muestra
cmo se aade el trozo anterior a una frase 3 veces, y el resultado.
Phrase phrase = new Phrase();
for (int i = 1; i < 4; i++)
{
phrase.Add(c1);
}
Prrafos
Lo que hemos visto hasta ahora es los bloques muy bsicos para texto en archivos PDF. El objeto que va
a utilizar con ms frecuencia es un prrafo, que es una secuencia de frases y Trozos celebrado
juntos. Los prrafos se derivan de la frase, para que quepan autommatically texto dentro de los lmites
horizontales del documento, sino que tambin obligan a una nueva lnea de cada prrafo (como en
cualquier procesador de texto). El prrafo anterior en la seccin Chunk de este artculo es tan bueno
como cualquier otro para experimentar. Cuenta con una serie de frases y un texto con formato en lnea,
por lo que puede usarlo para construir un prrafo de trozos y frases:
string path = Server.MapPath("PDFs");
Rectangle r = new Rectangle(400, 300);
Document doc = new Document(r);
try
{
PdfWriter.GetInstance(doc, new FileStream(path + "/Blocks2.pdf", FileMode.Create));
doc.Open();
string text = @"The result can be seen below, which shows the text
having been written to the document but it looks a
mess. Chunks have no concept of how to force a new
line when the length exceeds the available width in
the document. Really, all they should be used for is
to change or set the style of a word or phrase inline. ";
text = text.Replace(Environment.NewLine, String.Empty).Replace(" ", String.Empty);
Font brown = new Font(Font.COURIER, 9f, Font.NORMAL, new Color(163, 21, 21));
Font lightblue = new Font(Font.COURIER, 9f, Font.NORMAL, new Color(43, 145, 175));
Font courier = new Font(Font.COURIER, 9f);
Font georgia = FontFactory.GetFont("georgia", 10f);
georgia.Color = Color.GRAY;
Chunk beginning = new Chunk(text, georgia);
Phrase p1 = new Phrase(beginning);
Chunk c1 = new Chunk("You can of course force a newline using \"", georgia);
Chunk c2 = new Chunk(@"\n", brown);
Chunk c3 = new Chunk("\" or ", georgia);
Chunk c4 = new Chunk("Environment", lightblue);
Chunk c5 = new Chunk(".NewLine", courier);
Chunk c6 = new Chunk(", or even ", georgia);
Chunk c7 = new Chunk("Chunk", lightblue);
Chunk c8 = new Chunk(".NEWLINE", courier);
Chunk c9 = new Chunk(" as part of the string you give a chunk.", georgia);
Phrase p2 = new Phrase();
p2.Add(c1);
p2.Add(c2);
p2.Add(c3);
p2.Add(c4);
p2.Add(c5);
p2.Add(c6);
p2.Add(c7);
p2.Add(c8);
p2.Add(c9);
Paragraph p = new Paragraph();
p.Add(p1);
p.Add(p2);
doc.Add(p);
}
catch (DocumentException dex)
{
throw (dex);
}
catch (IOException ioex)
{
throw (ioex);
}
finally
{
doc.Close();
}
First, the result, then some notes about the code:
No pas mucho tiempo para empezar a aadir manejo de excepciones al cdigo. Por supuesto, usted
debe usar siempre try ... catch cuando se realizan operaciones de IO, y con objetos de documento
iTextSharp, tambin hay unDocumentException objeto de gestionar. Hay otra fuente de excepciones que
he encontrado a ser bastante astuto.Al probar el cdigo para generar el archivo PDF, sin darme cuenta
traspuesto dos argumentos en el constructor de la fuente llam azul claro, en que pas en el valor de
fuente .Normal antes de que el tamao. Esto tuvo el efecto de establecer el tamao de fuente a 0, que es
el valor que la constante se establece en. Una excepcin cuando se trata de llamar doc.Close (), y tengo
que apagar VS para liberar su control sobre el objeto de documento.
Por lo tanto, el manejo de excepciones comienza a hacer su aparicin, por lo que se libera al menos el
objeto de documento. Tambin se dar cuenta de que los valores de tamao de fuente se pasan ahora
con el sufijo fseguirlos. Eso dice explcitamente al compilador que el valor debe ser tratada como un
flotador, y evita el tipo de error que yo experiment ocurra de nuevo.
El primer bloque de texto, que es @ -quoted, o una cadena literal literal, tiene que tener todo el espacio
en blanco y saltos de lnea retirados de ella, de lo contrario, aparecer con ellos se conserva en el
archivo PDF resultante.Aparte de eso, cada cadena estilo individual se aplica a su propio objeto Chunk, y
despus se aadi a una frase para asegurar que las lneas se envuelven en el PDF. Finalmente ambas
frases se aaden al objeto Prrafo nico.Tambin es posible ajustar la alineacin del texto de prrafo,
utilizando el Paragraph.setAlignment () mtodo. Este acepta una cadena, con "izquierda", "Centro",
"Justify" y "derecha" siendo valores vlidos. A continuacin se muestra el ejemplo anterior
con p.setAlignment ("Justify");
La clase prrafo tiene un nmero de otros mtodos tiles y las propiedades para el peinado incluyendo:
Paragraph.FirstLineIndent // le permite aplicar un valor flotante a sangrar la primera lnea
Paragraph.IndentationLeft // permite agregar espacio a la izquierda
Paragraph.IndentationRight // le permite aadir espacio a la derecha
Paragraph.setSpacingBefore // aade una determinada cantidad de espacio por encima del prrafo
Paragraph.setSpacingAfter // agrega la cantidad especificada de espacio despus del prrafo
using iTextSharp.text;
using iTextSharp.text.pdf;
var doc1 = new Document();
//use a variable to let my code fit across the page...
string path = Server.MapPath("PDFs");
PdfWriter.GetInstance(doc1, new FileStream(path + "/Doc1.pdf", FileMode.Create));
doc1.Open();
doc1.Add(new Paragraph("My first PDF"));
doc1.Close();
public Document(iTextSharp.text.Rectangle pageSize);
public Document(iTextSharp.text.Rectangle pageSize, float, float, float, float);
var doc = new Document(PageSize.A5);
var doc = new Document(new Rectangle(100f, 300f));
PdfWriter.GetInstance(doc, new FileStream(path + "/Doc2.pdf", FileMode.Create));
doc.Open();
doc.Add(new Paragraph("This is a custom size"));
doc.Close();
r.BackgroundColor = new CMYKColor(25, 90, 25, 0);
r.BackgroundColor = new Color(191, 64, 124);
BaseFont bfTimes = BaseFont.CreateFont(BaseFont.TIMES_ROMAN, BaseFont.CP1252, false);
Font times = new Font(bfTimes, 12, Font.ITALIC, Color.RED);
string path = Server.MapPath("PDFs");
Document doc = new Document();
PdfWriter.GetInstance(doc, new FileStream(path + "/Font.pdf", FileMode.Create));
doc.Open();
doc.Add(new Paragraph("This is a Red Font Test using Times Roman", times));
doc.Close();
And the result (if all goes well) is as follows:
int totalfonts = FontFactory.RegisterDirectory("C:\\WINDOWS\\Fonts");
StringBuilder sb = new StringBuilder();
foreach (string fontname in FontFactory.RegisteredFonts)
{
sb.Append(fontname + "\n");
}
doc.Add(new Paragraph("All Fonts:\n" + sb.ToString()));
Font arial = FontFactory.GetFont("Arial", 28, Color.GRAY);
Font verdana = FontFactory.GetFont("Verdana", 16, Font.BOLDITALIC, new Color(125, 88, 15));
Font palatino = FontFactory.GetFont(
"palatino linotype italique",
BaseFont.CP1252,
BaseFont.EMBEDDED,
10,
Font.ITALIC,
Color.GREEN
);
Font smallfont = FontFactory.GetFont("Arial", 7);
Font x = FontFactory.GetFont("nina fett");
x.Size = 10;
x.SetStyle("Italic");
x.SetColor(100, 50, 200);