2016-05-05 23 views
4

Ich unter einer Situation der Umwandlung von HTML in PDF, zum Glück kann ich dies durch fliegende Untertasse api erreichen. Aber mein HTML besteht aus SVG-Tags während der Konvertierung kann ich nicht die SVG in PDF bekommen. Nach Google fand ich, dass es erreicht werden kann unter Verwendung der folgenden Verbindung Stackoverflow question und Tutorial. ich nicht, was ist Mittelwert von replacedElementFactorySvg-Integration in PDF mit fliegenden Untertasse

ChainingReplacedElementFactory chainingReplacedElementFactory 
     = new ChainingReplacedElementFactory(); 
chainingReplacedElementFactory.addReplacedElementFactory(replacedElementFactory); 
chainingReplacedElementFactory.addReplacedElementFactory(new SVGReplacedElementFactory()); 
renderer.getSharedContext().setReplacedElementFactory(chainingReplacedElementFactory); 

Bitte helfen Sie diese loszuwerden aus

Antwort

2

Es ist nur ein Fehler im Tutorial wird die Linie mit replacedElementFactory nicht benötigt.

Hier ist mein Arbeitsbeispiel.

Java:

import java.io.ByteArrayOutputStream; 
import java.io.FileOutputStream; 
import java.io.OutputStream; 

import javax.xml.parsers.DocumentBuilder; 
import javax.xml.parsers.DocumentBuilderFactory; 

import org.w3c.dom.Document; 
import org.xhtmlrenderer.pdf.ITextRenderer; 

public class PdfSvg { 
    public static void main(String[] args) throws Exception { 
     DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 
     factory.setNamespaceAware(true); 
     DocumentBuilder builder = factory.newDocumentBuilder(); 
     Document inputDoc = builder.parse("svg.html"); 

     ByteArrayOutputStream output = new ByteArrayOutputStream(); 

     ITextRenderer renderer = new ITextRenderer(); 

     ChainingReplacedElementFactory chainingReplacedElementFactory = new ChainingReplacedElementFactory(); 
     chainingReplacedElementFactory.addReplacedElementFactory(new SVGReplacedElementFactory()); 
     renderer.getSharedContext().setReplacedElementFactory(chainingReplacedElementFactory); 

     renderer.setDocument(inputDoc, "");; 
     renderer.layout(); 
     renderer.createPDF(output); 

     OutputStream fos = new FileOutputStream("svg.pdf"); 
     output.writeTo(fos); 
    } 
} 

HTML:

<html> 
<head> 
<style type="text/css"> 
    svg {display: block;width:100mm;height:100mm} 
</style> 
</head> 
<body> 
    <div> 
     <svg xmlns="http://www.w3.org/2000/svg"> 
      <circle cx="50" cy="50" r="40" stroke="black" stroke-width="3" 
       fill="red" /> 
     </svg> 
    </div> 
</body> 
</html> 

Die ChainingReplacedElementFactory, SVGReplacedElement und SVGReplacedElementFactory stammt aus dem tutorial.

+0

Danke für schnelle Antwort ... Es funktioniert gut mit SVG-Tag in über html .. aber ich habe Svg von Highchart API generiert ... Beispiel Eingabe ist hier .... http://jsfiddle.net/gh/ get/jquery/1.9.1/highslide-software/highcharts/tree/master/sample/highcharts/demo/line-basic/ –

+0

Das Problem besteht darin, das SVG (oder ein Bild) aus dem highchart JS-Code zu generieren der Server. Leider habe ich keine Lösung dafür, aber diese Seite auf der Highchart-Website kann Ihnen helfen: http://www.highcharts.com/news/52-serverside-generated-charts. – obourgain

1

Wenn Sie eine In-Page-Lösung möchten, ist hier eine Alternative mit @cloudformatter, die eine Remote-Formatierung ist. Ich habe ihr Javascript zusammen mit Text und Ihrem Highchart-Diagramm zu Ihrer Geige hinzugefügt.

http://jsfiddle.net/yk0Lxzg0/1/

var click="return xepOnline.Formatter.Format('printme', {render:'download'})"; 
jQuery('#buttons').append('<button onclick="'+ click +'">PDF</button>'); 

Der obige Code in der Geige platziert werden zum Download das div mit 'id' printme in PDF-Format. Dieses div enthält dein Diagramm und etwas Text.

http://www.cloudformatter.com/CSS2Pdf.APIDoc.Usage zeigt Gebrauchsanweisungen und hat viele weitere Beispiele von Diagrammen in SVG formatiert zu PDF entweder allein oder als Teil von Seiten kombiniert mit Text, Tabellen und dergleichen.

0

@Rajesh Ich hoffe, Sie haben bereits eine Lösung für Ihr Problem gefunden. Wenn nicht (oder jemand Probleme mit fliegenden Untertasse, Batik und SVG-Tags arbeiten), dann möchten Sie vielleicht diese entfernen alle clip-path="url(#highcharts-xxxxxxx-xx)" von <g> Tags haben den Trick für mich.

Verwandte Themen