2016-05-05 2 views
4

У меня возникла ситуация с преобразованием html в pdf, к счастью, я могу достичь этого через летающую тарелку api. Но My HTML состоит из svg-тегов при преобразовании. Я не могу получить svg в формате pdf. После google я обнаружил, что его можно достичь, используя следующую ссылку: Stackoverflow question и Tutorial. я делать не то, что среднее по replacedElementFactoryИнтеграция Svg в pdf с использованием летающей тарелки

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

Пожалуйста, помогите избавиться от этой

ответ

2

Это просто ошибка в учебнике, линия с replacedElementFactory не требуется.

Вот мой рабочий пример.

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> 

ChainingReplacedElementFactory, SVGReplacedElement и SVGReplacedElementFactory происходит от tutorial.

+0

Спасибо за быстрый ответ ... Он работает отлично с svg-тегом в выше html .. но у меня есть svg, сгенерированный highchart api ... sample input is here .... http://jsfiddle.net/gh/ get/jquery/1.9.1/highslide-software/highcharts.com/tree/master/samples/highcharts/demo/line-basic/ –

+0

Проблема состоит в том, чтобы сгенерировать SVG (или изображение) из высокозадачного JS-кода, на сервер. К сожалению, у меня нет для этого решения, но эта страница на высокопроизводительном веб-сайте может помочь вам: http://www.highcharts.com/news/52-serverside-generated-charts. – obourgain

1

Если вам нужно решение для работы с страницами, воспользуйтесь альтернативным использованием @cloudformatter, который является удаленной службой форматирования. Я добавил свой Javascript к вашей скрипке вместе с текстом и диаграммой Highchart.

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

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

Приведенный выше код помещен в скрипку отформатирует DIV с идентификатором '' PrintMe в формате PDF для скачивания. Этот div включает вашу диаграмму и некоторый текст.

http://www.cloudformatter.com/CSS2Pdf.APIDoc.Usage содержит инструкции по использованию и содержит больше образцов диаграмм в формате SVG, отформатированных в PDF, либо самостоятельно, либо как часть страниц в сочетании с текстом, таблицами и т. Д.

0

@Rajesh Надеюсь, вы уже нашли решение своей проблемы. Если нет (или у кого есть проблемы с летающими тарелками, батиками и svg-тегами), то вы можете подумать об этом - удаляя все clip-path="url(#highcharts-xxxxxxx-xx)" из <g> тегов сделал трюк для меня.

Смежные вопросы