es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Java: ¿Cómo dibujar un archivo SVG en un archivo PDF?

Nuestra aplicación tiene como objetivo componer facturas en formato PDF con códigos de barras (en formato SVG) incrustados en ellas. Intenté encontrar algunos consejos en internet, pero no encontré nada que funcione fácilmente.

¿Podría proporcionar un fragmento de código que muestre cómo solucionar ese problema?

PD: En el fragmento, puede suponer que hemos descubierto todo el XML en los códigos de barras SVG.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Sí, puedo proporcionar un fragmento de código para incrustar un código de barras SVG en una factura PDF usando Java y la biblioteca Pdfbox.

    import java.io.IOException;
    import java.io.InputStream;
    import org.apache.pdfbox.cos.COSName;
    import org.apache.pdfbox.io.IOUtils;
    import org.apache.pdfbox.pdfparser.PDFParser;
    import org.apache.pdfbox.pdmodel.PDDocument;
    import org.apache.pdfbox.pdmodel.PDPage;
    import org.apache.pdfbox.pdmodel.common.PDRectangle;
    import org.apache.pdfbox.pdmodel.edit.PDPageContentStream;
    import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject;
    import org.apache.pdfbox.pdmodel.PDPageContentStream;
    
    public class EmbedSVGBarcodeInPDF {
    
        public static void main(String[] args) throws IOException {
            // Leer el código de barras SVG como un flujo de entrada
            InputStream in = EmbedSVGBarcodeInPDF.class.getResourceAsStream("barcode.svg");
    
            // crear objeto de documento
            PDDocument document = new PDDocument();
            PDPage page = new PDPage(PDRectangle.A4); // crear una nueva página
            document.addPage(page);
    
            // Creando objeto PDImageXObject
            PDImageXObject image = PDImageXObject.createFromFileByExtension(in, document, "svg");
    
            // crear un nuevo flujo de contenido para escribir en la página
            PDPageContentStream contentStream = new PDPageContentStream(document, page);
    
            // agregar la imagen del código de barras a la página
            contentStream.drawImage(image, 50, 50);
    
            // cerrar el flujo de contenido
            contentStream.close();
    
            // guardar el documento
            document.save("factura_con_codigo_de_barras.pdf");
    
            // cerrar el documento
            document.close();
    
            // cerrar el flujo de entrada
            IOUtils.closeQuietly(in);
        }
    }
    

    En este fragmento de código, primero creamos un nuevo documento PDF y una página. Luego, leemos el código de barras SVG como un flujo de entrada y lo convertimos en un PDImageXObject usando Pdfbox. Creamos un nuevo flujo de contenido y agregamos la imagen del código de barras a la página. Por último, cerramos el flujo de contenido, guardamos el documento y lo cerramos.

    Puede modificar el código para que se ajuste a sus requisitos específicos, por ejemplo, posicionando la imagen del código de barras en una ubicación diferente en la página o agregando otro contenido a la página.

    Tenga en cuenta que es necesario tener la biblioteca Pdfbox para ejecutar este código. Puede agregar Pdfbox a su proyecto utilizando su herramienta de compilación favorita, por ejemplo, Maven o Gradle.

Comments are closed.