在单独的页面上打印大型 SVG 图表

发布于 2024-11-27 05:07:40 字数 116 浏览 0 评论 0原文

我正在尝试从浏览器打印大型 SVG 图表,SVG 图表嵌入到 HTML 中。图表的宽度/高度设置为绝对。打印仅打印 SVG 图表的一部分(无论一页能容纳多少内容),并剪掉其余部分。有没有办法将图表拆分为单独的页面打印?

I am trying to print a large SVG chart from a browser, the SVG chart is embedded into the HTML. The width / height of the chart is set to absolute. The print only prints a part of the SVG chart, however much will fit on 1 page, and cuts the rest off. Is there a way to split up the chart to print into separate pages?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

呆橘 2024-12-04 05:07:40

这完全取决于您使用什么浏览器来查看 SVG。要么尝试不同的浏览器... Safari 具有出色的打印功能(至少在 Mac 上).. 要么...“隔离”SVG.. 要么查看源代码并找出嵌入的 SVG 的相对 URL,然后输入将其粘贴到 URL 栏中。

<td><object id="object" type="image/svg+xml" data="**smiley.svg**">Please use a modern browser!</object></td>
<td><iframe id="iframe" src="**smiley.svg**">Please use a modern browser!</iframe></td>
<td><embed id="embed" src="**smiley.svg**" type="image/svg+xml" /></td>
<td><img id="img" alt="smiley face" src="**smiley.svg**" /></td>

或者从内联源中复制并粘贴实际的 SVG 代码,并将其粘贴到扩展名为 .svg 的纯文本文档中...

<svg xmlns="http://www.w3.org/2000/svg" version="1.1"
viewBox="0 0 100 100" preserveAspectRatio="xMidYMid slice"
style="width:100%; height:100%; position:absolute; top:0; left:0; z-index:-1;">
<linearGradient id="gradient">
<stop class="begin" offset="0%"/>
<stop class="end" offset="100%"/>
</linearGradient>
<rect x="0" y="0" width="100" height="100" style="fill:url(#gradient)" />
<circle cx="50" cy="50" r="30" style="fill:url(#gradient)" />
</svg>

然后您可以使用多种应用程序,从 Illustrator 到免费的<一href="http://inkscape.org/" rel="nofollow">Inkscape,或者很多很多其他的可以根据你的喜好操作(或打印)它。

This totally depends on what browser you are using to view the SVG. Either try a different browser... Safari has GREAT printing capabilities (on the Mac at least).. or... "isolate" the SVG.. Either look at the source and figure out the relative URL to the embedded SVG and enter it into the URL bar..

<td><object id="object" type="image/svg+xml" data="**smiley.svg**">Please use a modern browser!</object></td>
<td><iframe id="iframe" src="**smiley.svg**">Please use a modern browser!</iframe></td>
<td><embed id="embed" src="**smiley.svg**" type="image/svg+xml" /></td>
<td><img id="img" alt="smiley face" src="**smiley.svg**" /></td>

or Copy and paste the actual SVG code from the inline source and paste it into a plain text document with the .svg extension...

<svg xmlns="http://www.w3.org/2000/svg" version="1.1"
viewBox="0 0 100 100" preserveAspectRatio="xMidYMid slice"
style="width:100%; height:100%; position:absolute; top:0; left:0; z-index:-1;">
<linearGradient id="gradient">
<stop class="begin" offset="0%"/>
<stop class="end" offset="100%"/>
</linearGradient>
<rect x="0" y="0" width="100" height="100" style="fill:url(#gradient)" />
<circle cx="50" cy="50" r="30" style="fill:url(#gradient)" />
</svg>

Then you can use a multitude of applications, from Illustrator, to the free Inkscape, or MANY, many others to manipulate (or print) it to your hearts content.

疯了 2024-12-04 05:07:40

使用 phantomjs.org 项目在服务器上生成图表图像。
它允许通过 URL 将任何 HTML 页面加载到无头 WebKit 机器中并将其渲染为 PNG。
另外,您可以获得页面的最终尺寸,然后通过循环定义剪辑区域将其切成和平片。

例如,下一个示例将页面中的多个图表导出到文件系统中的单独 PNG 图像中。之后,您可以组装新网页或将其打包为 PDF 并向您的用户提供下载链接。这将是最可靠、最稳定的网络应用打印解决方案。

var page = require('webpage').create();
page.viewportSize = { width: 1280, height : 1024 };
page.open('http://chart.html', function () {
    page.clipRect = page.evaluate(function () {
        var chart = jQuery("#chart1");
        return { top: chart.offset().top, left: chart.offset().left, width: chart.outerWidth(), height: chart.outerHeight() };  
    });
    page.render('chart1.png');
    page.clipRect = page.evaluate(function () {
        var chart = jQuery("#chart2");
        return { top: chart.offset().top, left: chart.offset().left, width: chart.outerWidth(), height: chart.outerHeight() };  
    });
    page.render('chart2.png');    
    page.clipRect = page.evaluate(function () {
        var chart = jQuery("#chart3");
        return { top: chart.offset().top, left: chart.offset().left, width: chart.outerWidth(), height: chart.outerHeight() };  
    });
    page.render('chart3.png');        
    phantom.exit();
});

Use phantomjs.org project to generate your chart images at server.
It allows to load any HTML page by URL into headless WebKit machine and render it into PNG.
Plus, you can get final size of your page and then cut it into peaces via defining Clip Region in cycle.

For example next sample exports several charts from the page into separate PNG images in file system. After that you can assemble your new web page or pack them into PDF and provide download link to your user. This would be the most reliable and stable printing solution for web application.

var page = require('webpage').create();
page.viewportSize = { width: 1280, height : 1024 };
page.open('http://chart.html', function () {
    page.clipRect = page.evaluate(function () {
        var chart = jQuery("#chart1");
        return { top: chart.offset().top, left: chart.offset().left, width: chart.outerWidth(), height: chart.outerHeight() };  
    });
    page.render('chart1.png');
    page.clipRect = page.evaluate(function () {
        var chart = jQuery("#chart2");
        return { top: chart.offset().top, left: chart.offset().left, width: chart.outerWidth(), height: chart.outerHeight() };  
    });
    page.render('chart2.png');    
    page.clipRect = page.evaluate(function () {
        var chart = jQuery("#chart3");
        return { top: chart.offset().top, left: chart.offset().left, width: chart.outerWidth(), height: chart.outerHeight() };  
    });
    page.render('chart3.png');        
    phantom.exit();
});
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文