我正在使用Treant.js javascript 库创建组织结构图,并使用 jsPDF(连同 html2pdf.js 和 canvg.js)将图表转换为 PDF。将 SVG 元素(连接框的线)和 HTML 内容(框)转换为 PDF,我使用以下代码:
var useWidth = $( '#orgchart' ).prop( 'scrollWidth' );
var useHeight = $( '#orgchart' ).prop( 'scrollHeight' );
var pdf;
if ( useHeight > useWidth ) {
pdf = new jsPDF( 'p', 'px', [
useWidth, useHeight
] );
} else if ( useHeight <= useWidth ) {
pdf = new jsPDF( 'l', 'px', [
useHeight, useWidth
] );
}
var c = pdf.canvas;
var svgTags = document.querySelectorAll( '#orgchart svg' );
for ( var i = 0; i < svgTags.length; i++ ) {
var svgTag = svgTags[ i ];
if ( useHeight > useWidth ) {
canvg( c, svgTag.outerHTML, {
scaleWidth : useWidth,
scaleHeight : useHeight,
offsetX : 0,
offsetY : 0,
ignoreMouse : true,
ignoreAnimation : true,
ignoreClear : true,
ignoreDimensions : true
} );
} else if ( useHeight <= useWidth ) {
canvg( c, svgTag.outerHTML, {
scaleWidth : useHeight,
scaleHeight : useWidth,
offsetX : 0,
offsetY : 0,
ignoreMouse : true,
ignoreAnimation : true,
ignoreClear : true,
ignoreDimensions : true
} );
}
}
html2pdf( window.document.getElementById( "orgchart" ), useWidth, useHeight, pdf, function ( pdf ) {
pdf.output( 'dataurlnewwindow' );
} );
如您所见,我使用 html2pdf.js 将 html 转换为 pdf,并使用 canvg.js 将 svg 转换为画布。下面是我得到的输出:
这方面的问题是:
- SVG 未与 HTML 对齐。
- pdf 中的字体小于其 HTML 对应字体。
- PDF中奇怪的字间距。
我希望 SVG 与 HTML 保持一致。我希望字体能够正确呈现(我忽略了字体样式,因为我在我的 html 中使用了谷歌字体并且它在 PDF 中不受支持)。
是否有任何可用的修复程序可以正确地将 SVG + HTML 渲染为 PDF?