Manejo de Itextsharp
-
Upload
yoclaudioweb -
Category
Documents
-
view
233 -
download
10
description
Transcript of Manejo de Itextsharp
TrozosUn Chunk es la pieza significativa más pequeña 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 cómo utiliza trozos. El
siguiente fragmento muestra cómo configurar el texto de una Chunk, a continuación, 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 continuación, que muestra el texto de haber sido escrito en el documento
pero parece un lío. Trozos tienen ningún concepto de cómo forzar una nueva línea 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 línea. Por supuesto, puedes forzar un salto de línea
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 métodos 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);
FrasesLa frase es la siguiente contenedor de la jerarquía. Una frase es una serie de trozos, y obligará a una
nueva línea cuando la longitud de su contenido excede los márgenes verticales del documento. El
espacio entre cada línea (en realidad, la medida tomada entre las líneas de base de cada línea, o "líder")
es de 1,5 veces el tamaño de la fuente.Dado que el tamaño de fuente por defecto se aplicó por
iTextSharp (12 puntos), el código de abajo resultará en un líder 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 través de varios constructores sobrecargados de la frase. El siguiente fragmento muestra
cómo se añade 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);}
PárrafosLo que hemos visto hasta ahora es los bloques muy básicos para texto en archivos PDF. El objeto que
va a utilizar con más frecuencia es un párrafo, que es una secuencia de frases y Trozos celebrado
juntos. Los párrafos se derivan de la frase, para que quepan autommatically texto dentro de los límites
horizontales del documento, sino que también obligan a una nueva línea de cada párrafo (como en
cualquier procesador de texto). El párrafo anterior en la sección Chunk de este artículo es tan bueno
como cualquier otro para experimentar. Cuenta con una serie de frases y un texto con formato en línea,
por lo que puede usarlo para construir un párrafo 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 añadir manejo de excepciones al código. Por supuesto, usted
debe usar siempre try ... catch cuando se realizan operaciones de IO, y con objetos de documento
iTextSharp, también hay unDocumentException objeto de gestionar. Hay otra fuente de excepciones que
he encontrado a ser bastante astuto.Al probar el código 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 tamaño. Esto tuvo el efecto de establecer el tamaño de fuente a 0, que es
el valor que la constante se establece en. Una excepción 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 aparición, por lo que se libera al menos el
objeto de documento. También se dará cuenta de que los valores de tamaño de fuente se pasan ahora
con el sufijo fseguirlos. Eso dice explícitamente 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 línea 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
después se añadió a una frase para asegurar que las líneas se envuelven en el PDF. Finalmente ambas
frases se añaden al objeto Párrafo único.También es posible ajustar la alineación del texto de párrafo,
utilizando el Paragraph.setAlignment () método. Este acepta una cadena, con "izquierda", "Centro",
"Justify" y "derecha" siendo valores válidos. A continuación se muestra el ejemplo anterior
con p.setAlignment ("Justify");
La clase párrafo tiene un número de otros métodos útiles y las propiedades para el peinado incluyendo:
Paragraph.FirstLineIndent // le permite aplicar un valor flotante a sangrar la primera línea Paragraph.IndentationLeft // permite agregar espacio a la izquierda Paragraph.IndentationRight // le permite añadir espacio a la derecha Paragraph.setSpacingBefore // añade una determinada cantidad de espacio por encima del párrafo Paragraph.setSpacingAfter // agrega la cantidad especificada de espacio después del párrafo
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);