2017-05-27 27 views
0

iText7を使用してPDFファイルを生成しています。私はPDF文書にsvgファイルを追加する際に助けが必要です。 svgファイルは、URLを使用してリモートロケーションから取得する必要があります。IText7を使用してSVG画像をPDFに追加

+0

使用ApacheのバティックビットマップイメージにあなたのSVGファイルを変換して、PDF文書にそれを追加します。 –

+0

共有できるコードサンプルはありますか?それは大きな助けになるでしょう。 –

+0

実際のコードを書くことは、読者の練習として残されています。 –

答えて

1

私はこれをapache batikライブラリを使用して取得できました。ここに私がそれをした方法があります。 SvgImage

ため

Mavenの依存

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

カスタムITagWorker

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; 
    } 

} 
関連する問題