2017-10-18 101 views
0

我想輸出一個PDF格式的SVG文件。我嘗試了一些方法,但我一直遇到問題。SVG爲PDF。如何?

我用這個源作爲參考: Convert SVG to PDF 和嘗試以下操作:

// Save this SVG into a file (required by SVG -> PDF transformation process) 
File svgFile = File.createTempFile("graphic-", ".svg"); 
Transformer transformer = TransformerFactory.newInstance().newTransformer(); 
DOMSource source2 = new DOMSource(svgXmlDoc); 
FileOutputStream fOut = new FileOutputStream(svgFile); 
try { transformer.transform(source2, new StreamResult(fOut)); } 
finally { fOut.close(); } 

// Convert the SVG into PDF 
File outputFile = File.createTempFile("result-", ".pdf"); 
SVGConverter converter = new SVGConverter(); 
converter.setDestinationType(DestinationType.PDF); 
converter.setSources(new String[] { svgFile.toString() }); 
converter.setDst(outputFile); 
converter.execute(); 

我碰到了幾個ClassNotFoundExceptions,大多與batik.DOM,這真的很奇怪,因爲我可以看到它上市在外部庫中。

接下來,我嘗試使用iTextG。我遵循SvgToPdf中的代碼:https://developers.itextpdf.com/examples/itext-action-second-edition/chapter-15

但是後來我卡住了,因爲iTextG沒有PdfGraphics2D,並且該方法需要它。

任何想法,我該如何去做這件事?

回答

0

這是我最終選擇的解決方案,它依賴任何庫。

WebKit引擎可以渲染SVG,這樣你就可以在SVG加載到的WebView:

webView.loadUrl(Uri.fromFile(svgFile).toString()); 

的WebView還具有打印的功能,這樣,那麼你可以繼續:

// Get a PrintManager instance 
PrintManager printManager = (PrintManager) getActivity() 
     .getSystemService(Context.PRINT_SERVICE); 

// Get a print adapter instance 
PrintDocumentAdapter printAdapter = webView.createPrintDocumentAdapter(); 

// Create a print job with name and adapter instance 
String jobName = getString(R.string.app_name) + " Document"; 
PrintJob printJob = printManager.print(jobName, printAdapter, 
     new PrintAttributes.Builder().build());