2017-05-27 4 views
0

Ich verwende iText7 zum Generieren von PDF-Dateien. Ich brauche Hilfe beim Hinzufügen einer SVG-Datei zum PDF-Dokument. Die SVG-Datei muss über eine URL von einem Remote-Standort abgerufen werden.Hinzufügen eines SVG-Bildes zu PDF mithilfe von IText7

+0

Verwendung Apache Batik Ihre SVG-Datei in ein Bitmap-Bild zu konvertieren und dann das Dokument auf Ihren PDF hinzuzufügen. –

+0

Gibt es einige Codebeispiele, die geteilt werden können? Es wird eine große Hilfe sein. –

+0

Das Schreiben des eigentlichen Codes wird dem Leser als Übung überlassen. –

Antwort

1

Ich konnte dies mit Apache Batik-Bibliothek arbeiten. Hier ist das, wie ich es gemacht habe.

Maven Abhängigkeit

<dependency> 
    <groupId>org.apache.xmlgraphics</groupId> 
    <artifactId>batik-transcoder</artifactId> 
    <version>1.9</version> 
</dependency> 

Individuelle ITagWorker für SvgImage

import com.itextpdf.html2pdf.attach.ITagWorker; 
import com.itextpdf.html2pdf.attach.ProcessorContext; 
import com.itextpdf.html2pdf.html.node.IElementNode; 
import com.itextpdf.io.image.ImageDataFactory; 
import com.itextpdf.layout.IPropertyContainer; 
import com.itextpdf.layout.element.Image; 
import org.apache.batik.transcoder.TranscoderInput; 
import org.apache.batik.transcoder.TranscoderOutput; 
import org.apache.batik.transcoder.image.JPEGTranscoder; 

import java.io.ByteArrayOutputStream; 

public class SvgImageWorker implements ITagWorker { 

    private Image img; 

    @Override 
    public void processEnd(IElementNode iElementNode, ProcessorContext processorContext) { 
     String url = iElementNode.getAttribute("src"); 

     JPEGTranscoder jpegTranscoder = new JPEGTranscoder(); 

     // Set the transcoding hints. 
     jpegTranscoder.addTranscodingHint(JPEGTranscoder.KEY_QUALITY, new Float(.8)); 

     // Create the transcoder input. 
     try { 
      TranscoderInput input = new TranscoderInput(url); 
      ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(10000); 
      TranscoderOutput output = new TranscoderOutput(byteArrayOutputStream); 

      // Save the image. 
      jpegTranscoder.transcode(input, output); 

      img = new Image(ImageDataFactory.create(byteArrayOutputStream.toByteArray())); 
      byteArrayOutputStream.flush(); 
      byteArrayOutputStream.close(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

    } 

    @Override 
    public boolean processContent(String s, ProcessorContext processorContext) { 
     return false; 
    } 

    @Override 
    public boolean processTagChild(ITagWorker iTagWorker, ProcessorContext processorContext) { 
     return false; 
    } 

    @Override 
    public IPropertyContainer getElementResult() { 
     return img; 
    } 

} 
Verwandte Themen