我們有一個具有相同情況的應用程序。 SVG是在我們的Java應用程序的框架中構建和操作的。但所有的SVG操作都發生在JavaScript中。我們打印的內容是通過svg標籤進行循環,然後構建一個只有svg文件的文件,該文件將在瀏覽器中打開。將文件命名爲FileName.svg並將其提供給瀏覽器。然後你可以使用瀏覽器進行打印。
這是要創建的文件的格式。
<?xml version="1.0" encoding="utf-8"?>
<svg
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1">
svg elements go here
</svg>
下面是一些代碼片段的幫助。
// function to export as image, document, or print (SVG)
function exportSVGas(exFormat, frName) {
var exHeight = window.parent.document.getElementById('canvasMainFrame' + frName).offsetHeight;
var exWidth = window.parent.document.getElementById('canvasMainFrame' + frName).offsetWidth;
var exSvg = '<svg xmlns=\"' + svgNS + '\" xmlns:xlink=\"' + xlkNS + '\" xmlns:ifp=\"' + ifpNS + '\" version=\"1.1\" ';
exSvg = exSvg + 'height=\"' + exHeight + 'px\" width=\"' + exWidth + 'px\" >';
if (exFormat.toLowerCase() == 'SVG'.toLowerCase()) {
exSvg = exSvg + '<script type=\"text/javascript\">if(window.addEventListener){window.addEventListener(\"load\",function(){setTimeout(\"window.print()\",500);},false);}else if(window.attachEvent){window.attachEvent("onload", function(){setTimeout(\"window.print()\",500);},false);}</script>';
}
// serialize by group
var groups = getChildren(document.getElementsByTagName('svg')[0], 'g');
for (var i = 0; i < groups.length; i++) {
exSvg = exSvg + serializeXmlNode(groups[i]);
}
exSvg = exSvg + '</svg>';
// remove hidden groups or elements
var exXml = $.parseXML(exSvg);
$exXml = $(exXml);
var exGroups = document.getElementById('layersgroup').getElementsByTagName('g');
for (var i = 0; i < exGroups.length; i++) {
var exGroup = exGroups[i];
var exId = exGroup.getAttribute('id');
var exVisible = exGroup.getAttribute('visibility');
if (exVisible == 'hidden') {
$exXml.find('#' + exId).remove();
}
}
$exXml.find('#transform-buttons').removeAttr('transform');
exSvg = serializeXmlNode($exXml[0]);
//needs url of svg from javascript to provide context to "url()" function in export
window.parent.notify('exportSVG', exFormat, exSvg, document.URL);
}
// helper function
function serializeXmlNode(xmlNode) {
if (typeof window.XMLSerializer != "undefined") {
return (new window.XMLSerializer()).serializeToString(xmlNode);
} else if (typeof xmlNode.xml != "undefined") {
return xmlNode.xml;
}
return "";
}
如果您發現它需要較大的打印量,您會希望將它放在一個組中,然後對該組進行縮放變換。這樣你就可以做到2 3或4倍。像這樣的東西。
<svg>
<g transform="scale(2)">
<g>
</svg>
但作爲對我們來說,顯示8" ×8" ,在瀏覽器將打印精細到C尺寸紙張。我認爲這是SVG的本質。但正如您所提到的,您也可以嘗試PDF路由,因爲PDF將SVG視爲可擴展的。我們的應用程序是Java,因此我們使用Apache Batik進行PDF導出。祝你好運。
如果您將大小應用於所需大小的SVG,並使用此代碼http://www.cloudformatter.com/CSS2Pdf,則可以從瀏覽器執行此操作。當你調用API時,你設置頁面大小,它會把你的SVG放在這個大小的div中併發送給PDF引擎。如果你想離線使用,那麼XSL FO產品應該沒有問題渲染一個幾乎任何大小的SVG。 –