Agregar Texto al Archivo PDF
Para agregar texto a un archivo PDF existente:
- Abre el PDF de entrada usando el objeto Document.
- Obtén la página particular a la que deseas agregar el texto.
- Crea un objeto TextFragment con el texto de entrada junto con otras propiedades del texto. El objeto TextBuilder creado a partir de esa página particular – a la que deseas agregar el texto – te permite agregar el objeto TextFragment a la página usando el método AppendText.
- Llama al método Save del objeto Document y guarda el archivo PDF de salida.
Agregar Texto
El siguiente fragmento de código te muestra cómo agregar texto en un archivo PDF existente.
public static void AddingText() {
// Cargar el archivo PDF
Document document = new Document(_dataDir + "sample.pdf");
// obtener la página particular
Page pdfPage = document.getPages().get_Item(1);
// crear fragmento de texto
TextFragment textFragment = new TextFragment("Aspose.PDF");
textFragment.setPosition(new Position(80, 700));
// establecer propiedades del texto
textFragment.getTextState().setFont(FontRepository.findFont("Verdana"));
textFragment.getTextState().setFontSize(14);
textFragment.getTextState().setForegroundColor(Color.getBlue());
textFragment.getTextState().setBackgroundColor(Color.getLightGray());
// crear objeto TextBuilder
TextBuilder textBuilder = new TextBuilder(pdfPage);
// agregar el fragmento de texto a la página PDF
textBuilder.appendText(textFragment);
// Guardar el documento PDF resultante.
document.save(_dataDir + "AddText_out.pdf");
}
Cargando Fuente desde Stream
El siguiente fragmento de código muestra cómo cargar una fuente desde un objeto Stream al agregar texto a un documento PDF.
import com.aspose.pdf.*;
import com.aspose.pdf.text.FontTypes;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
//...
public static void LoadingFontFromStream() throws FileNotFoundException{
String fontFile = "/usr/share/fonts/truetype/msttcorefonts/Arial.ttf";
// Cargar archivo PDF de entrada
Document doc = new Document(_dataDir + "input.pdf");
// Crear objeto constructor de texto para la primera página del documento
TextBuilder textBuilder = new TextBuilder(doc.getPages().get_Item(1));
// Crear fragmento de texto con cadena de ejemplo
TextFragment textFragment = new TextFragment("Hello world");
if (fontFile != "")
{
// Cargar la fuente TrueType en el objeto stream
FileInputStream fontStream = new FileInputStream(fontFile);
// Establecer el nombre de la fuente para la cadena de texto
textFragment.getTextState().setFont(FontRepository.openFont(fontStream, FontTypes.TTF));
// Especificar la posición para el Fragmento de Texto
textFragment.setPosition(new Position(10, 10));
// Agregar el texto al TextBuilder para que se pueda colocar sobre el archivo PDF
textBuilder.appendText(textFragment);
_dataDir = _dataDir + "LoadingFontFromStream_out.pdf";
// Guardar el documento PDF resultante.
doc.save(_dataDir);
}
}
Agregar Texto usando TextParagraph
El siguiente fragmento de código muestra cómo agregar texto en un documento PDF usando la clase TextParagraph.
public static void AddTextUsingTextParagraph() {
// Abrir documento
Document doc = new Document();
// Agregar página a la colección de páginas del objeto Document
Page page = doc.getPages().add();
TextBuilder builder = new TextBuilder(page);
// Crear párrafo de texto
TextParagraph paragraph = new TextParagraph();
// Establecer la sangría de las líneas subsiguientes
paragraph.setSubsequentLinesIndent (20);
// Especificar la ubicación para agregar TextParagraph
paragraph.setRectangle(new Rectangle(100, 300, 200, 700));
// Especificar el modo de ajuste de palabras
paragraph.getFormattingOptions().setWrapMode(TextFormattingOptions.WordWrapMode.ByWords);
// Crear fragmento de texto
TextFragment fragment1 = new TextFragment("the quick brown fox jumps over the lazy dog");
fragment1.getTextState().setFont (FontRepository.findFont("Times New Roman"));
fragment1.getTextState().setFontSize (12);
// Agregar fragmento al párrafo
paragraph.appendLine(fragment1);
// Agregar párrafo
builder.appendParagraph(paragraph);
_dataDir = _dataDir + "AddTextUsingTextParagraph_out.pdf";
// Guardar el documento PDF resultante.
doc.save(_dataDir);
}
Añadir Hipervínculo a TextSegment
Una página PDF puede constar de uno o más objetos TextFragment, donde cada objeto TextFragment puede tener una o más instancias de TextSegment. Para establecer un hipervínculo en TextSegment, se puede utilizar la propiedad Hyperlink de la clase TextSegment mientras se proporciona el objeto de la instancia de Aspose.Pdf.WebHyperlink. Por favor, intente utilizar el siguiente fragmento de código para cumplir con este requisito.
public static void AddHyperlinkToTextSegment() {
// Crear instancia de documento
Document doc = new Document();
// Agregar página a la colección de páginas del archivo PDF
Page page1 = doc.getPages().add();
// Crear instancia de TextFragment
TextFragment tf = new TextFragment("Fragmento de texto de ejemplo");
// Establecer alineación horizontal para TextFragment
tf.setHorizontalAlignment(HorizontalAlignment.Right);
// Crear un TextSegment con texto de ejemplo
TextSegment segment = new TextSegment(" ... Segmento de texto 1...");
// Agregar segmento a la colección de segmentos de TextFragment
tf.getSegments().add(segment);
// Crear un nuevo TextSegment
segment = new TextSegment("Enlace a Google");
// Agregar segmento a la colección de segmentos de TextFragment
tf.getSegments().add(segment);
// Establecer hipervínculo para TextSegment
segment.setHyperlink(new com.aspose.pdf.WebHyperlink("www.aspose.com"));
// Establecer color de primer plano para el segmento de texto
segment.getTextState().setForegroundColor(com.aspose.pdf.Color.getBlue());
// Establecer formato de texto como cursiva
segment.getTextState().setFontStyle(FontStyles.Italic);
// Crear otro objeto TextSegment
segment = new TextSegment("TextSegment sin hipervínculo");
// Agregar segmento a la colección de segmentos de TextFragment
tf.getSegments().add(segment);
// Agregar TextFragment a la colección de párrafos del objeto página
page1.getParagraphs().add(tf);
_dataDir = _dataDir + "AddHyperlinkToTextSegment_out.pdf";
// Guardar el documento PDF resultante.
doc.save(_dataDir);
}
Use OTF Font
Aspose.PDF for Java ofrece la función de usar fuentes Personalizadas/TrueType al crear/manipular contenidos de archivos PDF para que los contenidos del archivo se muestren utilizando fuentes distintas a las fuentes predeterminadas del sistema. A partir del lanzamiento de Aspose.PDF para Java 10.4.0, hemos proporcionado soporte para Fuentes de Tipo Abierto.
public static void UseOTFFont() {
// Crear una nueva instancia de documento
Document pdfDocument = new Document();
// Agregar una página a la colección de páginas del archivo PDF
Page page = pdfDocument.getPages().add();
// Crear una instancia de TextFragment con texto de ejemplo
TextFragment fragment = new TextFragment("Texto de ejemplo en fuente OTF");
// O incluso puede especificar la ruta de la fuente OTF en el directorio del sistema
fragment.getTextState().setFont(FontRepository.openFont("/home/aspose/.fonts/Montserrat-Black.otf"));
// Especificar que la fuente se incruste dentro del archivo PDF, para que se muestre correctamente,
// Incluso si la fuente específica no está instalada/presente en la máquina de destino
fragment.getTextState().getFont().setEmbedded(true);
// Agregar TextFragment a la colección de párrafos de la instancia de Page
page.getParagraphs().add(fragment);
// Guardar el documento PDF resultante.
pdfDocument.save(_dataDir + "OTFFont_out.pdf");
}
Añadir Cadena HTML usando DOM
La clase Aspose.Pdf.Generator.Text contiene una propiedad llamada IsHtmlTagSupported que permite agregar etiquetas/contenidos HTML en archivos PDF. El contenido añadido se renderiza en etiquetas HTML nativas en lugar de aparecer como una simple cadena de texto. Para admitir una característica similar en el nuevo Modelo de Objeto de Documento (DOM) del espacio de nombres Aspose.Pdf, se ha introducido la clase HtmlFragment.
La instancia HtmlFragment se puede usar para especificar los contenidos HTML que deben colocarse dentro del archivo PDF. Similar a TextFragment, HtmlFragment es un objeto a nivel de párrafo y se puede agregar a la colección de párrafos del objeto Page. Los siguientes fragmentos de código muestran los pasos para colocar contenidos HTML dentro del archivo PDF usando el enfoque DOM.
public static void AddingHtmlString() {
// Instanciar objeto Document
Document doc = new Document();
// Añadir una página a la colección de páginas del archivo PDF
Page page = doc.getPages().add();
// Instanciar HtmlFragment con contenidos HTML
HtmlFragment title = new HtmlFragment("<h1 style=\"color:blue\"><strong>Demostración de Cadena HTML</strong></h1>");
// establecer MarginInfo para detalles de margen
MarginInfo Margin = new MarginInfo();
Margin.setBottom(10);
Margin.setTop(200);
// Establecer información de margen
title.setMargin(Margin);
// Añadir Fragmento HTML a la colección de párrafos de la página
page.getParagraphs().add(title);
// Guardar archivo PDF
doc.save(_dataDir + "sample_html_out.pdf");
}
El siguiente fragmento de código demuestra los pasos para agregar listas ordenadas de HTML en el documento:
public static void AddHTMLOrderedListIntoDocuments() {
// Instanciar objeto Document
Document doc = new Document();
// Instanciar objeto HtmlFragment con el fragmento HTML correspondiente
HtmlFragment t = new HtmlFragment(
"<div style=\"font-family: sans-serif\"><ul><li>Primero</li><li>Segundo</li><li>Tercero</li><li>Cuarto</li><li>Quinto</li></ul><p>Texto después de la lista.</p><p>Siguiente línea<br/>Última línea</p></div>");
// Agregar Página en la Colección de Páginas
Page page = doc.getPages().add();
// Agregar HtmlFragment dentro de la página
page.getParagraphs().add(t);
// Guardar archivo PDF resultante
doc.save(_dataDir + "AddHTMLOrderedListIntoDocuments_out.pdf");
}
También puede establecer el formato de cadena HTML usando el objeto TextState de la siguiente manera:
public static void AddHTMLStringFormatting() {
// Instanciar objeto Document
Document doc = new Document();
// Agregar una página a la colección de páginas del archivo PDF
Page page = doc.getPages().add();
// Instanciar HtmlFragment con contenidos HTML
HtmlFragment title = new HtmlFragment("<h1><strong>Demostración de Cadena HTML</strong></h1>");
TextState textState = new TextState(12);
textState.setFont(FontRepository.findFont("Calibri"));
textState.setForegroundColor(Color.getGreen());
textState.setBackgroundColor(Color.getCoral());
title.setTextState(textState);
// Agregar Fragmento HTML a la colección de párrafos de la página
page.getParagraphs().add(title);
// Guardar archivo PDF
doc.save(_dataDir + "sample_html_out.pdf");
}
En caso de que establezcas algunos valores de atributos de texto a través del marcado HTML y luego proporciones los mismos valores en las propiedades de TextState, ellos sobrescribirán los parámetros HTML por las propiedades del formulario de instancia de TextState. Los siguientes fragmentos de código muestran el comportamiento descrito.
public static void AddHTMLUsingDOMAndOverwrite() {
// Instanciar objeto Document
Document doc = new Document();
// Agregar una página a la colección de páginas del archivo PDF
Page page = doc.getPages().add();
// Instanciar HtmlFragment con contenido HTML
HtmlFragment title = new HtmlFragment("<p style='font-family: Verdana'><b><i>La tabla contiene texto</i></b></p>");
// La fuente 'Verdana' se restablecerá a 'Arial'
title.setTextState(new TextState("Arial Black"));
title.setTextState(new TextState(20));
// Establecer información de margen inferior
title.getMargin().setBottom(10);
// Establecer información de margen superior
title.getMargin().setTop(400);
// Agregar fragmento HTML a la colección de párrafos de la página
page.getParagraphs().add(title);
// Guardar archivo PDF
doc.save(_dataDir + "AddHTMLUsingDOMAndOverwrite_out.pdf");
}
FootNotes y EndNotes (DOM)
FootNotes indican notas en el texto de tu documento usando números en superíndice consecutivos. La nota actual está indentada y puede aparecer como una nota al pie en la parte inferior de la página.
Agregar FootNote
En un sistema de referencia por nota al pie, indica una referencia:
- colocando un número pequeño sobre la línea del tipo directamente después del material de origen. Este número se llama identificador de nota y se sitúa ligeramente por encima de la línea de texto.
- colocando el mismo número, seguido de una cita de tu fuente, en la parte inferior de la página. La numeración de notas al pie debe ser numérica y cronológica: la primera referencia es 1, la segunda es 2, y así sucesivamente.
La ventaja de las notas al pie es que el lector puede simplemente bajar la vista hacia la página para descubrir la fuente de una referencia que les interese.
Por favor, sigue los pasos especificados a continuación para crear una FootNote:
-
Crear una instancia de Document
-
Crear un objeto Page
-
Crear un objeto TextFragment
-
Crear una instancia de Note y pasar su valor a la propiedad TextFragment.FootNote
-
Agregar TextFragment a la colección de párrafos de una instancia de página
Estilo de línea personalizado para FootNote
El siguiente ejemplo demuestra cómo agregar notas al pie al final de la página del PDF y definir un estilo de línea personalizado.
public static void AddFootNote() {
// crear instancia de Document
Document document = new Document(_dataDir + "sample.pdf");
Page page = document.getPages().get_Item(1);
TextFragmentAbsorber tfa = new TextFragmentAbsorber("Portable Document Format");
tfa.visit(page);
TextFragment t = tfa.getTextFragments().get_Item(1);
Note note = new Note();
note.setText("Demo");
t.setFootNote(note);
// crear instancia de TextFragment
TextFragment text = new TextFragment("Hello World");
// establecer valor de FootNote para TextFragment
text.setFootNote(new Note("nota al pie para texto de prueba 1"));
// agregar TextFragment a la colección de párrafos de la primera página del documento
page.getParagraphs().add(text);
// crear segundo TextFragment
text = new TextFragment("Aspose.Pdf for Java");
// establecer FootNote para el segundo fragmento de texto
text.setFootNote(new Note("nota al pie para texto de prueba 2"));
// agregar segundo fragmento de texto a la colección de párrafos del archivo PDF
page.getParagraphs().add(text);
document.save(_dataDir + "sample_footnote.pdf");
}
Podemos configurar el formato de la Etiqueta de Nota al Pie (identificador de nota) utilizando el objeto TextState de la siguiente manera:
public static void AddCustomFootNoteLabel() {
// crear instancia de Document
Document document = new Document(_dataDir + "sample.pdf");
Page page = document.getPages().get_Item(1);
TextFragmentAbsorber tfa = new TextFragmentAbsorber("Portable Document Format");
tfa.visit(page);
TextFragment t = tfa.getTextFragments().get_Item(1);
Note note = new Note();
note.setText("Demo");
t.setFootNote(note);
// crear instancia de TextFragment
TextFragment text = new TextFragment("Hola Mundo");
// establecer valor de Nota al Pie para TextFragment
text.setFootNote(new Note("nota al pie para texto de prueba 1"));
text.getFootNote().setText("21");
TextState ts = new TextState();
ts.setForegroundColor(Color.getBlue());
ts.setFontStyle(FontStyles.Italic);
text.getFootNote().setTextState(ts);
// añadir TextFragment a la colección de párrafos de la primera página del documento
page.getParagraphs().add(text);
// crear segundo TextFragment
text = new TextFragment("Aspose.Pdf para Java");
// establecer Nota al Pie para el segundo fragmento de texto
text.setFootNote(new Note("nota al pie para texto de prueba 2"));
// añadir el segundo fragmento de texto a la colección de párrafos del archivo PDF
page.getParagraphs().add(text);
document.save(_dataDir + "sample_footnote.pdf");
}
Personalizar etiqueta de nota al pie
Por defecto, el número de la nota al pie es incremental comenzando desde 1. Sin embargo, podemos tener un requisito para establecer una etiqueta de nota al pie personalizada. Para cumplir con este requisito, intente usar el siguiente fragmento de código
public static void CustomFootNote_Label() {
// Crear instancia de Documento
Document document = new Document();
// Añadir página a la colección de páginas del PDF
Page page = document.getPages().add();
// Crear objeto GraphInfo
GraphInfo graph = new GraphInfo();
// Establecer el ancho de línea como 2
graph.setLineWidth(2);
// Establecer el color para el objeto graph
graph.setColor(Color.getRed());
// Establecer el valor de la matriz de guiones como 3
graph.setDashArray(new int[] { 3 });
// Establecer el valor de fase de guiones como 1
graph.setDashPhase(1);
// Establecer el estilo de línea de nota al pie para la página como graph
page.setNoteLineStyle(graph);
// Crear instancia de TextFragment
TextFragment text = new TextFragment("Hello World");
// Establecer el valor de la nota al pie para TextFragment
text.setFootNote(new Note("nota al pie para texto de prueba 1"));
// Especificar etiqueta personalizada para la nota al pie
text.getFootNote().setText(" Aspose(2021)");
// Añadir TextFragment a la colección de párrafos de la primera página del documento
page.getParagraphs().add(text);
document.save(_dataDir + "CustomizeFootNoteLabel_out.pdf");
}
Añadiendo Imagen y Tabla a una Nota al Pie
En versiones de lanzamiento anteriores, se proporcionó soporte para Notas al Pie, pero solo era aplicable al objeto TextFragment. Sin embargo, a partir del lanzamiento de Aspose.PDF para Java 10.7.0, también puedes agregar Notas al Pie a otros objetos dentro del documento PDF, como Tabla, Celdas, etc. El siguiente fragmento de código muestra los pasos para agregar una Nota al Pie al objeto TextFragment y luego agregar un objeto Imagen y Tabla a la colección de párrafos de la sección de Nota al Pie.
public static void AddingImageAndTableToFootnote() {
// Crear instancia de Documento
Document document = new Document();
// Agregar página a la colección de páginas del PDF
Page page = document.getPages().add();
// Crear instancia de TextFragment
TextFragment text = new TextFragment("Hello World");
page.getParagraphs().add(text);
text.setFootNote(new Note());
Image image = new Image();
image.setFile(_dataDir + "aspose-logo.jpg");
image.setFixHeight(20);
text.getFootNote().getParagraphs().add(image);
TextFragment footNote = new TextFragment("texto de la nota al pie");
footNote.getTextState().setFontSize(20);
footNote.setInLineParagraph(true);
text.getFootNote().getParagraphs().add(footNote);
Table table = new Table();
table.getRows().add().getCells().add().getParagraphs().add(new TextFragment("Fila 1 Celda 1"));
text.getFootNote().getParagraphs().add(table);
page.getParagraphs().add(text);
document.save(_dataDir + "AddImageAndTable_out.pdf");
}
Cómo Crear Notas al Final
Una Nota al Final es una cita de fuente que remite a los lectores a un lugar específico al final del documento donde pueden encontrar la fuente de la información o las palabras citadas o mencionadas en el documento. Al usar notas al final, la oración citada, parafraseada o resumida va seguida de un número en superíndice.
El siguiente ejemplo demuestra cómo agregar una Nota al Final en la página de un Pdf.
public static void HowToCreateEndNotes() {
Document doc = new Document();
// añadir página a la colección de páginas del PDF
Page page = doc.getPages().add();
// crear instancia de TextFragment
TextFragment text = new TextFragment("Hello World");
// establecer valor de FootNote para TextFragment
text.setEndNote(new Note("nota final de ejemplo"));
// especificar etiqueta personalizada para FootNote
text.getEndNote().setText(" Aspose(2021)");
// añadir TextFragment a la colección de párrafos de la primera página del documento
page.getParagraphs().add(text);
// guardar el archivo PDF
doc.save(_dataDir + "EndNote.pdf");
}
Texto e Imagen como Párrafo en Línea
El diseño predeterminado del archivo PDF es un diseño de flujo (de arriba a la izquierda hacia abajo a la derecha). Por lo tanto, cada nuevo elemento que se agrega al archivo PDF se añade en el flujo de la esquina inferior derecha. Sin embargo, podemos tener un requisito para mostrar varios elementos de la página, es decir, Imagen y Texto al mismo nivel (uno tras otro). Un enfoque puede ser crear una instancia de Tabla y agregar ambos elementos a objetos de celda individuales. Sin embargo, otro enfoque puede ser el párrafo en línea. Al establecer la propiedad IsInLineParagraph de Imagen y Texto como verdadera, estos párrafos aparecerán como en línea con otros elementos de la página.
El siguiente fragmento de código muestra cómo agregar texto e imagen como párrafos en línea en un archivo PDF.
public static void TextAndImageAsInLineParagraph() {
// Instanciar la clase Document
Document doc = new Document();
// Agregar página a la colección de páginas de la instancia de Document
Page page = doc.getPages().add();
// Crear TextFragment
TextFragment text = new TextFragment("Hola Mundo.. ");
// Agregar fragmento de texto a la colección de párrafos del objeto Page
page.getParagraphs().add(text);
// Crear una instancia de imagen
Image image = new Image();
// Configurar la imagen como párrafo en línea para que aparezca justo después
// del objeto de párrafo anterior (TextFragment)
image.setInLineParagraph (true);
// Especificar la ruta del archivo de imagen
image.setFile(_dataDir + "aspose-logo.jpg");
// Establecer altura de la imagen (opcional)
image.setFixHeight(30);
// Establecer ancho de la imagen (opcional)
image.setFixWidth(100);
// Agregar imagen a la colección de párrafos del objeto page
page.getParagraphs().add(image);
// Re-inicializar el objeto TextFragment con diferentes contenidos
text = new TextFragment(" Hola de nuevo..");
// Configurar TextFragment como párrafo en línea
text.setInLineParagraph (true);
// Agregar el nuevo TextFragment creado a la colección de párrafos de la página
page.getParagraphs().add(text);
doc.save(_dataDir+"TextAndImageAsParagraph_out.pdf");
}
Especificar el Espaciado de Caracteres al Agregar Texto
Se puede agregar texto dentro de una colección de párrafos de archivos PDF utilizando la instancia de TextFragment o mediante el objeto TextParagraph e incluso puede estampar el texto dentro del PDF utilizando la clase TextStamp. Al agregar el texto, podemos tener un requisito para especificar el espaciado de caracteres para los objetos de texto. Para cumplir con este requisito, se ha introducido una nueva propiedad llamada propiedad CharacterSpacing. Por favor, revise los siguientes enfoques para cumplir con este requisito.
Los siguientes enfoques muestran los pasos para especificar el espaciado de caracteres al agregar texto dentro de un documento PDF.
Usando TextBuilder y TextFragment
public static void CharacterSpacing_TextFragment(){
// Crear instancia de Documento
Document pdfDocument = new Document();
// Agregar página a la colección de páginas del Documento
Page page = pdfDocument.getPages().add();
// Crear instancia de TextBuilder
TextBuilder builder = new TextBuilder(page);
// Crear instancia de fragmento de texto con contenido de muestra
TextFragment wideFragment = new TextFragment("Texto con espaciado de caracteres incrementado");
wideFragment.getTextState().applyChangesFrom(new TextState("Arial", 12));
// Especificar espaciado de caracteres para TextFragment
wideFragment.getTextState().setCharacterSpacing(2.0f);
// Especificar la posición de TextFragment
wideFragment.setPosition(new Position(100, 650));
// Añadir TextFragment a la instancia de TextBuilder
builder.appendText(wideFragment);
// Guardar el documento PDF resultante.
pdfDocument.save(_dataDir+ "CharacterSpacingUsingTextBuilderAndFragment_out.pdf");
}
Usando TextBuilder y TextParagraph
public static void CharacterSpacing_TextParagraph() {
// Crear instancia de Document
Document pdfDocument = new Document();
// Agregar página a la colección de páginas del Documento
Page page = pdfDocument.getPages().add();
// Crear instancia de TextBuilder
TextBuilder builder = new TextBuilder(page);
// Instanciar instancia de TextParagraph
TextParagraph paragraph = new TextParagraph();
// Crear instancia de TextState para especificar el nombre y tamaño de la fuente
TextState state = new TextState("Arial", 12);
// Especificar el espaciado de caracteres
state.setCharacterSpacing (1.5f);
// Añadir texto al objeto TextParagraph
paragraph.appendLine("Este es un párrafo con espaciado de caracteres", state);
// Especificar la posición para TextParagraph
paragraph.setPosition (new Position(100, 550));
// Añadir TextParagraph a la instancia de TextBuilder
builder.appendParagraph(paragraph);
// Guardar el documento PDF resultante.
pdfDocument.save(_dataDir + "CharacterSpacingUsingTextBuilderAndParagraph_out.pdf");
}
Usando TextStamp
public static void CharacterSpacing_TextStamp() {
// Crear una instancia de Document
Document pdfDocument = new Document();
// Agregar una página a la colección de páginas del Document
Page page = pdfDocument.getPages().add();
// Instanciar TextStamp con texto de ejemplo
TextStamp stamp = new TextStamp("Este es un sello de texto con espaciado de caracteres");
// Especificar el nombre de la fuente para el objeto Stamp
stamp.getTextState().setFont(FontRepository.findFont("Arial"));
// Especificar el tamaño de fuente para TextStamp
stamp.getTextState().setFontSize(12);
// Especificar el espaciado de caracteres como 1f
stamp.getTextState().setCharacterSpacing (1f);
// Establecer la XIndent para Stamp
stamp.setXIndent(100);
// Establecer la YIndent para Stamp
stamp.setYIndent(500);
// Agregar el sello textual a la instancia de página
stamp.put(page);
// Guardar el documento PDF resultante.
pdfDocument.save(_dataDir+"CharacterSpacingUsingTextStamp_out.pdf");
}
Crear documento PDF de varias columnas
En revistas y periódicos, vemos principalmente que las noticias se muestran en varias columnas en las páginas individuales en lugar de los libros donde los párrafos de texto se imprimen principalmente en toda la página de izquierda a derecha. Muchas aplicaciones de procesamiento de documentos como Microsoft Word y Adobe Acrobat Writer permiten a los usuarios crear múltiples columnas en una sola página y luego agregarles datos.
Aspose.PDF para Java también ofrece la función de crear múltiples columnas dentro de las páginas de documentos PDF. Para crear un archivo PDF de múltiples columnas, podemos hacer uso de la clase Aspose.Pdf.FloatingBox ya que proporciona la propiedad ColumnInfo.ColumnCount para especificar el número de columnas dentro de FloatingBox y también podemos especificar el espacio entre columnas y los anchos de las columnas usando las propiedades ColumnInfo.ColumnSpacing y ColumnInfo.ColumnWidths respectivamente. Por favor, tenga en cuenta que FloatingBox es un elemento dentro del Modelo de Objeto de Documento y puede tener un posicionamiento obsoleto en comparación con el posicionamiento relativo (es decir, Texto, Gráfico, Imagen, etc.). El espaciado entre columnas significa el espacio entre las columnas y el espaciado predeterminado entre las columnas es de 1,25 cm. Si no se especifica el ancho de la columna, entonces Aspose.PDF para Java calcula automáticamente el ancho de cada columna de acuerdo con el tamaño de la página y el espaciado entre columnas.
A continuación se da un ejemplo para demostrar la creación de dos columnas con objetos de Gráficos (Línea) y se añaden a la colección de párrafos de FloatingBox, que luego se añade a la colección de párrafos de la instancia de Page.
public static void CreateMultiColumn() {
Document doc = new Document();
// Especificar la información del margen izquierdo para el archivo PDF
doc.getPageInfo().getMargin().setLeft(40);
// Especificar la información del margen derecho para el archivo PDF
doc.getPageInfo().getMargin().setRight(40);
Page page = doc.getPages().add();
com.aspose.pdf.drawing.Graph graph1 = new com.aspose.pdf.drawing.Graph(500, 2);
// Añadir la línea a la colección de párrafos del objeto sección
page.getParagraphs().add(graph1);
// Especificar las coordenadas para la línea
float[] posArr = new float[] { 1, 2, 500, 2 };
com.aspose.pdf.drawing.Line l1 = new com.aspose.pdf.drawing.Line(posArr);
graph1.getShapes().add(l1);
// Crear variables de cadena con texto que contiene etiquetas html
String s = "<span style=\"font-family: \"Times New Roman\", Times, serif;\" font-size=\"14pt\" \">"
+"<strong> Cómo evitar estafas de dinero</<strong> </span>";
// Crear párrafos de texto que contienen texto HTML
HtmlFragment heading_text = new HtmlFragment(s);
page.getParagraphs().add(heading_text);
FloatingBox box = new FloatingBox();
// Añadir cuatro columnas en la sección
box.getColumnInfo().setColumnCount(2);
// Establecer el espaciado entre las columnas
box.getColumnInfo().setColumnSpacing("5");
box.getColumnInfo().setColumnWidths("105 105");
TextFragment text1 = new TextFragment("Por Un Googler (El Blog Oficial de Google)");
text1.getTextState().setFontSize(8);
text1.getTextState().setLineSpacing(2);
text1.getTextState().setFontSize(10);
text1.getTextState().setFontStyle(FontStyles.Italic);
box.getParagraphs().add(text1);
// Crear un objeto de gráficos para dibujar una línea
com.aspose.pdf.drawing.Graph graph2 = new com.aspose.pdf.drawing.Graph(50, 10);
// Especificar las coordenadas para la línea
float[] posArr2 = new float[] { 1, 10, 100, 10 };
com.aspose.pdf.drawing.Line l2 = new com.aspose.pdf.drawing.Line(posArr2);
graph2.getShapes().add(l2);
// Añadir la línea a la colección de párrafos del objeto sección
box.getParagraphs().add(graph2);
TextFragment text2 = new TextFragment("Sed augue tortor, sodales id, luctus et, pulvinar ut, eros. Suspendisse vel dolor. "
+"Sed quam. Curabitur ut massa vitae eros euismod aliquam. Pellentesque sit amet elit. Vestibulum interdum pellentesque augue."
+"Cras mollis arcu sit amet purus. Donec augue. Nam mollis tortor a elit. Nulla viverra nisl vel mauris. Vivamus sapien. nascetur "
+"ridiculus mus. Nam justo lorem, aliquam luctus, sodales et, semper sed, enim Nam justo lorem, aliquam luctus, sodales et,nAenean "
+"posuere ante ut neque. Morbi sollicitudin congue felis. Praesent turpis diam, iaculis sed, pharetra non, mollis ac, mauris. "
+"Phasellus nisi ipsum, pretium vitae, tempor sed, molestie eu, dui. Duis lacus purus, tristique ut, iaculis cursus, tincidunt vitae, "
+"risus. Sed commodo. *** sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nam justo lorem, aliquam "
+"luctus, sodales et, semper sed, enim Nam justo lorem, aliquam luctus, sodales et, semper sed, enim Nam justo lorem, aliquam luctus, "
+"sodales et, semper sed, enim nAenean posuere ante ut neque. Morbi sollicitudin congue felis. Praesent turpis diam, iaculis sed, "
+"pharetra non, mollis ac, mauris. Phasellus nisi ipsum, pretium vitae, tempor sed, molestie eu, dui. Duis lacus purus, tristique ut,"
+"iaculis cursus, tincidunt vitae, risus. Sed commodo. *** sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus "
+"mus. Sed urna. . Duis convallis ultrices nisi. Maecenas non ligula. Nunc nibh est, tincidunt in, placerat sit amet, vestibulum a, nulla."
+"Praesent porttitor turpis eleifend ante. Morbi sodales.nAenean posuere ante ut neque. Morbi sollicitudin congue felis. Praesent turpis diam,"
+"iaculis sed, pharetra non, mollis ac, mauris. Phasellus nisi ipsum, pretium vitae, tempor sed, molestie eu, dui. Duis lacus purus, tristique"
+"ut, iaculis cursus, tincidunt vitae, risus. Sed commodo. *** sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus."
+"Sed urna. . Duis convallis ultrices nisi. Maecenas non ligula. Nunc nibh est, tincidunt in, placerat sit amet, vestibulum a, nulla. "
+"Praesent porttitor turpis eleifend ante. Morbi sodales.");
box.getParagraphs().add(text2);
page.getParagraphs().add(box);
// Guardar archivo PDF
doc.save(_dataDir + "CreateMultiColumnPdf_out.pdf");
}
Trabajar con tabulaciones personalizadas
Un tabulador es un punto de parada para la tabulación. En el procesamiento de textos, cada línea contiene una serie de tabulaciones colocadas a intervalos regulares (por ejemplo, cada media pulgada). Sin embargo, se pueden cambiar, ya que la mayoría de los procesadores de texto te permiten establecer tabulaciones donde desees. Cuando presionas la tecla Tab, el cursor o punto de inserción salta al siguiente tabulador, el cual es invisible. Aunque los tabuladores no existen en el archivo de texto, el procesador de texto los rastrea para que pueda reaccionar correctamente a la tecla Tab.
Aspose.PDF for Java permite a los desarrolladores utilizar tabulaciones personalizadas en documentos PDF. La clase Aspose.Pdf.Text.TabStop se usa para establecer tabulaciones personalizadas en la clase TextFragment.
Aspose.PDF for Java también ofrece algunos tipos de líderes de tabulación predefinidos como una enumeración llamada TabLeaderType cuyos valores predefinidos y sus descripciones se dan a continuación:
Tipo de Líder de Tabulación | Descripción |
---|---|
None | Sin líder de tabulación |
Solid | Líder de tabulación sólido |
Dash | Líder de tabulación de guion |
Dot | Líder de tabulación de punto |
Aquí hay un ejemplo de cómo establecer paradas de TAB personalizadas.
public static void CustomTabStops() {
Document pdfdocument = new Document();
Page page = pdfdocument.getPages().add();
com.aspose.pdf.TabStops ts = new com.aspose.pdf.TabStops();
com.aspose.pdf.TabStop ts1 = ts.add(100);
ts1.setAlignmentType(TabAlignmentType.Right);
ts1.setLeaderType (TabLeaderType.Solid);
com.aspose.pdf.TabStop ts2 = ts.add(200);
ts2.setAlignmentType(TabAlignmentType.Center);
ts2.setLeaderType (TabLeaderType.Dash);
com.aspose.pdf.TabStop ts3 = ts.add(300);
ts3.setAlignmentType(TabAlignmentType.Left);
ts3.setLeaderType (TabLeaderType.Dot);
TextFragment header = new TextFragment("Este es un ejemplo de formación de tabla con paradas de TAB", ts);
TextFragment text0 = new TextFragment("#$TABHead1 #$TABHead2 #$TABHead3", ts);
TextFragment text1 = new TextFragment("#$TABdata11 #$TABdata12 #$TABdata13", ts);
TextFragment text2 = new TextFragment("#$TABdata21 ", ts);
text2.getSegments().add(new TextSegment("#$TAB"));
text2.getSegments().add(new TextSegment("data22 "));
text2.getSegments().add(new TextSegment("#$TAB"));
text2.getSegments().add(new TextSegment("data23"));
page.getParagraphs().add(header);
page.getParagraphs().add(text0);
page.getParagraphs().add(text1);
page.getParagraphs().add(text2);
pdfdocument.save(_dataDir + "CustomTabStops_out.pdf");
}
Cómo Agregar Texto Transparente en PDF
Un archivo PDF contiene objetos de Imagen, Texto, Gráfico, adjunto, Anotaciones y, al crear TextFragment, puede establecer información de color de primer plano, color de fondo, así como el formato de texto. Aspose.PDF para Java admite la función de agregar texto con canal de color Alpha. El siguiente fragmento de código muestra cómo agregar texto con color transparente.
public static void AddTransparentText() {
// Crear instancia de Documento
Document pdfdocument = new Document();
// Crear página para la colección de páginas del archivo PDF
Page page = pdfdocument.getPages().add();
// Crear objeto Gráfico
Graph canvas = new Graph(100, 400);
// Crear instancia de rectángulo con ciertas dimensiones
com.aspose.pdf.drawing.Rectangle rect = new com.aspose.pdf.drawing.Rectangle(100, 100, 400, 400);
// Crear objeto de color desde el canal de color Alpha
int alpha = 10;
int green = 0;
int red = 100;
int blue = 0;
Color alphaColor = Color.fromArgb(alpha, red, green, blue);
rect.getGraphInfo().setFillColor(alphaColor);
// Agregar rectángulo a la colección de formas del objeto Gráfico
canvas.getShapes().add(rect);
// Agregar objeto gráfico a la colección de párrafos del objeto página
page.getParagraphs().add(canvas);
// Configurar valor para no cambiar la posición del objeto gráfico
canvas.setChangePosition(false);
// Crear instancia de TextFragment con valor de ejemplo
TextFragment text = new TextFragment(
"texto transparente texto transparente texto transparente texto transparente texto transparente texto transparente texto transparente texto transparente texto transparente texto transparente texto transparente texto transparente texto transparente texto transparente texto transparente texto transparente ");
// Crear objeto de color desde el canal Alpha
alpha = 30;
alphaColor = Color.fromArgb(alpha, red, green, blue);
// Establecer información de color para la instancia de texto
text.getTextState().setForegroundColor(alphaColor);
// Agregar texto a la colección de párrafos de la instancia de página
page.getParagraphs().add(text);
pdfdocument.save(_dataDir + "AddTransparentText_out.pdf");
}
Especificar el Espaciado de Línea para Fuentes
Cada fuente tiene un cuadrado abstracto, cuya altura es la distancia prevista entre líneas de texto en el mismo tamaño de fuente. Este cuadrado se llama cuadrado em
y es la cuadrícula de diseño en la cual se definen los contornos de los glifos. Muchas letras de la fuente de entrada tienen puntos que están colocados fuera de los límites del cuadrado em
de la fuente, por lo que para mostrar la fuente correctamente, se necesita el uso de una configuración especial. El objeto TextFragment tiene un conjunto de opciones de formato de texto que son accesibles a través del método TextState.getFormattingOptions.
Este método devuelve la clase TextFormattingOptions.
Esta clase tiene una enumeración LineSpacingMode que está diseñada para fuentes específicas, por ejemplo, la fuente de entrada “HPSimplified.ttf”. También la clase TextFormattingOptions tiene un método setLineSpacing de tipo LineSpacingMode. Solo necesitas establecer LineSpacing en LineSpacingMode.FullSize. El fragmento de código para que una fuente se muestre correctamente sería el siguiente:
public static void SpecifyLineSpacingForFonts() {
String fontFile = _dataDir + "hp-simplified.ttf";
// Cargar archivo PDF de entrada
Document doc = new Document();
// Crear TextFormattingOptions con LineSpacingMode.FullSize
TextFormattingOptions formattingOptions = new TextFormattingOptions();
formattingOptions.setLineSpacing(TextFormattingOptions.LineSpacingMode.FullSize);
// Crear objeto TextBuilder para la primera página del documento
// TextBuilder textBuilder = new TextBuilder(doc.Pages[1]);
// Crear fragmento de texto con cadena de ejemplo
TextFragment textFragment = new TextFragment("Hello world");
// Cargar la fuente TrueType en el objeto stream
FileInputStream fontStream;
try {
fontStream = new FileInputStream(fontFile);
} catch (FileNotFoundException e) {
e.printStackTrace();
return;
}
// Establecer el nombre de la fuente para la cadena de texto
textFragment.getTextState().setFont(FontRepository.openFont(fontStream, FontTypes.TTF));
// Especificar la posición para el Fragmento de Texto
textFragment.setPosition(new Position(100, 600));
// Establecer TextFormattingOptions del fragmento actual al predefinido (que apunta a
// LineSpacingMode.FullSize)
textFragment.getTextState().setFormattingOptions(formattingOptions);
// Agregar el texto a TextBuilder para que pueda colocarse sobre el archivo PDF
// textBuilder.AppendText(textFragment);
Page page = doc.getPages().add();
page.getParagraphs().add(textFragment);
// Guardar el documento PDF resultante
doc.save(_dataDir + "SpecifyLineSpacing_out.pdf");
}
Obtener el Ancho del Texto Dinámicamente
A veces, es necesario obtener el ancho del texto de manera dinámica. Aspose.PDF para Java incluye dos métodos para la medición del ancho de cadenas. Puede invocar el método MeasureString de las clases com.aspose.pdf.Font o com.aspose.pdf.TextState (o ambas). El siguiente fragmento de código muestra cómo utilizar esta funcionalidad.
public static void GetTextWidthDynamicaly() {
Font font = FontRepository.findFont("Arial");
TextState ts = new TextState();
ts.setFont(font);
ts.setFontSize(14);
if (Math.abs(font.measureString("A", 14) - 9.337) > 0.001)
System.out.println("¡Medición inesperada de la cadena de fuente!");
if (Math.abs(ts.measureString("z") - 7.0) > 0.001)
System.out.println("¡Medición inesperada de la cadena de fuente!");
for (char c = 'A'; c <= 'z'; c++)
{
double fnMeasure = font.measureString(String.valueOf(c), 14);
double tsMeasure = ts.measureString(String.valueOf(c));
if (Math.abs(fnMeasure - tsMeasure) > 0.001)
System.out.println("¡La medición de cadena de fuente y estado no coincide!");
}
}