Trabajar con texto en PostScript | .NETO
Agregar texto en un documento PS
En este artículo, consideramos las formas en que se puede agregar texto a un documento PS.
Evidentemente, el texto debe estar escrito en un documento con alguna fuente. Las fuentes se pueden almacenar en carpetas del sistema y, en este caso, las llamamos fuentes del sistema y se pueden almacenar en carpetas personalizadas, que son carpetas en las que alguien coloca fuentes para un uso particular. Por lo general, estas fuentes no están en las carpetas del sistema. A estas fuentes las llamamos fuentes personalizadas. La biblioteca Aspose.Page para .NET ofrece métodos para usar fuentes de sistema y personalizadas.
Para usar fuentes del sistema, simplemente completamos o delineamos un texto con System.Drawing.Font nativo de .NET. Los números en la llamada del método son las coordenadas xey de la esquina superior izquierda del texto.
1document.FillText(str, new System.Drawing.Font("Times New Roman", fontSize, FontStyle.Bold), 50, 100);
Para usar fuentes personalizadas, primero agregue la carpeta fuentes personalizadas en PsSaveOptions, luego busque Aspose.Page.Font.DrFont. Y finalmente complete o delinee el texto con este objeto DrFont.
1options.AdditionalFontsFolders = new string[] { FONTS_FOLDER };
2Aspose.Page.Font.DrFont drFont = ExternalFontCache.FetchDrFont("Palatino Linotype", fontSize, FontStyle.Regular);
3document.FillText(str, drFont, 50, 100);
Otra opción es trabajar con texto que también pertenece a una fuente. La fuente que se utiliza para imprimir texto en el documento PostScript puede estar incrustada en este archivo o no. En el primer caso, el texto siempre se representará en cualquier visor o editor PostScript porque siempre se encuentra con el texto. En el segundo caso, deberíamos esperar que la fuente utilizada exista en las carpetas del sistema en el host de destino. Si la fuente utilizada no existe, el intérprete PostScript puede generar un error.
La tercera opción también tiene que ver con una fuente porque una fuente es lo principal al agregar texto. Una fuente utilizada para rellenar o dibujar (o recortar) un texto se puede incrustar en un archivo PS de varias formas. Ahora se admiten los tipos de fuente TrueType y Type3 incrustados.
La cuarta opción es la posibilidad de escribir los glifos del texto con avances asignados (anchos). Permite agregar algo de arte al texto.
En el siguiente ejemplo, demostramos el uso de varios métodos para agregar texto en un documento PS con la biblioteca Aspose.Page para .NET.
Un algoritmo para agregar un texto en un nuevo documento PS incluye los siguientes pasos:
- Cree una secuencia de salida para el archivo PS resultante.
- Cree PsSaveOptions. Si usamos una fuente personalizada, agregamos carpetas de fuentes personalizadas en las opciones de guardar.
- Cree PsDocument con el flujo de salida ya creado y guarde las opciones.
- Cree la fuente necesaria, sistema o personalizado.
- Rellene o delinee el texto con la fuente creada. Aquí podremos asignar System.Drawing.Brush o System.Drawing.Pen dependiendo de si rellenamos o dibujamos el texto. O podemos completar y delinear el texto con un solo método. Si utilizamos el método sin System.Drawing.Brush o System.Drawing.Pen, el texto se rellenará o delineará con la pintura/trazo actual en el estado de gráficos actual.
- Cierra la página.
- Guarde el documento.
Dividimos el código de ejemplo en pequeños fragmentos de código para separar la preparación inicial del documento PS, el uso de cada método para agregar texto y la finalización del documento.
En este fragmento de código, creamos un flujo de salida y PsSaveOptions, agregamos una carpeta de fuentes personalizadas para usar la fuente personalizada en el código, creamos un objeto PsDocument, establecemos texto común para todos los métodos como una variable de cadena y creamos una variable fontSize que es También se utiliza en todos los métodos utilizados.
1//Create an output stream for the PostScript document
2using (Stream outPsStream = new FileStream(dataDir + "AddText_outPS.ps", FileMode.Create))
3{
4 //Create save options with the A4 size
5 PsSaveOptions options = new PsSaveOptions();
6 // Set the custom fonts folder. It will be added to system fonts folders for finding the needed font.
7 options.AdditionalFontsFolders = new string[] { FONTS_FOLDER };
8 //A text to write to the PS file
9 string str = "ABCDEFGHIJKLMNO";
10 int fontSize = 48;
11
12 // Create a new 1-paged PS Document
13 PsDocument document = new PsDocument(outPsStream, options, false);
Aquí demostramos el uso de la fuente del sistema para rellenar el texto con el color actual del estado de los gráficos (es decir, negro) y con el nuevo SolidBrush.
1////////////////////////////////////// Using the sysem font (located in system fonts folders) for filling the text //////////////////
2 Font font = new Font("Times New Roman", fontSize, FontStyle.Bold);
3 //Fill the text with the default or already defined color. In given case it is black.
4 document.FillText(str, font, 50, 100);
5 //Fill the text with Blue color.
6 document.FillText(str, font, 50, 150, new SolidBrush(Color.Blue));
7/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Para Linux, MacOS y otros sistemas operativos distintos de Windows, ofrecemos utilizar nuestro paquete Nuget Aspose.Page.Drawing. Utiliza el backend Aspose.Drawing en lugar de la biblioteca del sistema System.Drawing.
Así que importe el espacio de nombres Aspose.Page.Drawing en lugar de System.Drawing. En los fragmentos de código anteriores y siguientes se utilizará Aspose.Page.Drawing.Font en lugar de System.Drawing.Font, se utilizará Aspose.Page.Drawing.SolidBrush en lugar de System.Drawing.SolidBrush y así sucesivamente. Nuestros ejemplos de código en GitHub contienen todas las sustituciones necesarias.
el resultado
Ahora llenamos el texto con la fuente personalizada.
1////////////////////////////////////// Using the custom font (located in custom fonts folders) for filling the text /////////////////
2 DrFont drFont = ExternalFontCache.FetchDrFont("Palatino Linotype", fontSize, FontStyle.Regular);
3 //Fill the text with default or already defined color. In the given case it is black.
4 document.FillText(str, drFont, 50, 200);
5 //Fill the text with the Blue color.
6 document.FillText(str, drFont, 50, 250, new SolidBrush(Color.Blue));
7/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
el resultado
Aquí demostramos el uso de la fuente del sistema para delinear el texto con el trazo actual del estado de los gráficos (es decir, negro) y con el nuevo Pluma.
1////////////////////////////////////// Using the sysem font (located in system fonts folders) for outlining the text ////////////////
2 //Outline the text with default or already defined pen. In the given case it is a black colored 1-points width pen.
3 document.OutlineText(str, font, 50, 300);
4 //Outline the text with the blue-violet colored 2-points width pen.
5 document.OutlineText(str, font, 50, 350, new Pen(new SolidBrush(Color.BlueViolet), 2));
6/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
el resultado
Ahora delineamos el texto con la fuente personalizada.
1////////////////////////////////////// Using the custom font (located in custom fonts folders) for outlining the text /////////////////
2 //Outline the text with the default or already defined pen. In given case it is a black colored 1-points width pen.
3 document.OutlineText(str, drFont, 50, 450);
4 //Outline the text with the blue-violet colored 2-points width pen.
5 document.OutlineText(str, drFont, 50, 500, new Pen(new SolidBrush(Color.BlueViolet), 2));
6///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
el resultado
Aquí demostramos el uso de fuente del sistema para rellenar y delinear el texto con los nuevos SolidBrush y Pen.
1 //Fill the text with the orange color and stroke with the blue colored 2-points width pen.
2 document.FillAndStrokeText(str, font, 50, 400, new SolidBrush(Color.Yellow), new Pen(new SolidBrush(Color.BlueViolet), 2));
el resultado
Ahora rellenamos y delineamos el texto con la fuente personalizada.
1 //Fill the text with the orange color and stroke with the blue colored 2-points width pen.
2 document.FillAndStrokeText(str, drFont, 50, 550, new SolidBrush(Color.Orange), new Pen(new SolidBrush(Color.Blue), 2));
el resultado
Y finalmente llenamos el texto asignando anchos de glifos. El número de anchos debe ser igual al número de glifos.
1 //Glyphs widths
2 float[] widths = new float[] { 87, 87, 87, 87, 34, 87, 87 };
3 //Fill ASCII text using with assigning glyphs widths.
4 document.FillText("BAMBOOK", widths, drFont, 50, 600, new SolidBrush(Color.Blue));
5
6 //Glyphs widths
7 widths = new float[] { 87, 34, 87, 87, 87, 87, 87 };
8 //Fill Unicode text using with assigning glyphs widths.
9 document.FillText("ЗООПАРК", widths, drFont, 50, 650, new SolidBrush(Color.Orange));
el resultado
Cierre la página actual, guarde el documento.
1 //Close the current page
2 document.ClosePage();
3
4 //Save the document
5 document.Save();
Ver cómo trabajar con un texto en documentos PS en Java.
En el ejemplo anterior, se utilizan fuentes incrustadas en el archivo PostScript como fuentes TrueType, porque es el comportamiento predeterminado al guardar fuentes en la clase PsDocument. Si necesita cambiar este comportamiento, utilice PsSaveOptions como se muestra a continuación:
1 //Do not embed used fonts.
2 options.EmbedFonts = false;
1 //Embed used fonts as Type3 fonts.
2 options.EmbedFontsAs = FontConstants.EMBED_FONTS_TYPE3;
Puede descargar ejemplos y archivos de datos desde GitHub.