Echarts水印操作、多表联动

水印操作:

 

完整代码:

<!DOCTYPE html>
<html>
 
<head>
    <meta charset="utf-8">
    <!--引入ECharts脚本-->
    <script src="js/echarts.js"></script>
</head>
 
<body>
    <!---为ECharts准备一个具备大小(宽高)的DOM-->
    <div id="main1" style="width: 800px; height: 350px"></div>
    <div id="main2" style="width: 800px; height: 350px"></div>
    <script type="text/javascript">
        //基于准备好的DOM,初始化ECharts图表
        var myChart1 = echarts.init(document.getElementById("main1"));
        //指定图表的配置项和数据
        var waterMarkText = '小辣条'; // 设置水印的字符
		var canvas = document.createElement('canvas');
		var ctx = canvas.getContext('2d');
		canvas.width = canvas.height = 100;
		ctx.textAlign = 'center';
		ctx.textBaseline = 'middle';
		ctx.globalAlpha = 0.2;
		ctx.font = '30px Microsoft Yahei'; // 设置水印文字的字体
		ctx.translate(50, 50); // 设置水印文字的偏转值
		ctx.rotate(-Math.PI / 4); // 设置水印旋转的角度
		ctx.fillText(waterMarkText, 0, 0); // 设置填充水印
        var option1 = {
            backgroundColor:{type:'patten',image:canvas,repeat:'repeat'},
            title: {
                text: '王者荣耀英雄数值',
            },
            legend: {
                data: ['生命','物理', '法强','物抗','法抗','移速'],
                type:'scroll',               
                width:'20%'
            },
            //鼠标移动到指定位置显示数据
            tooltip: {
                confine:true,
                enterable:true,
            },
            toolbox: {
                show: true,
                feature: {
                    mark: { show: true },
                    dataView: { show: true, readOnly: false },
                    magicType: { show: true, type: ['line', 'bar'] },
                    restore: { show: true },
                    saveAsImage: { show: true },
                },
            },
            calculable: true,
        	radar:{        
        			indicator:[
        				{name:'法力值',max:370},
        				{name:'物理',max:370},
        				{name:'法强',max:370},
        				{name:'物抗',max:370},
        				{name:'法抗',max:370},
                        {name:'移速',max:370},
        			],
        		},
        	
            series: [
                {
                    center:['10%,55%'],
               		name:'radarpanel',
               		type:'radar',
               		//鼠标移动到指定位置显该组数据高亮显示
               		itemStyle:{
               			normal:{lineStyle:{width:1},opacity:0.2},
               			emphasis:{lineStyle:{width:5},opacity:1}
               		},
               		data:[
            	   		{
            	   		name:'伽罗',
            	   		value:[30,170,166,85,50,370], 
            	   		label:{
            	   			show:true
            	   		}
               		},
                       {
            	   		name:'鲁班大师',
            	   		value:[90,166,80,95,50,380], 
            	   		label:{
            	   			show:true
            	   		}
               		},
                       {
            	   		name:'上官婉儿',
            	   		value:[50,150,100,101,50,390], 
            	   		label:{
            	   			show:true
            	   		}
               		},
               
               ]
                }               
            
            ]
        };
 
        //使用刚指定的配置项和数据显示图表
        myChart1.setOption(option1);
        var myChart2 = echarts.init(document.getElementById("main2"));
        var option2 = {
            backgroundColor:{type:'patten',image:canvas,repeat:'repeat'},
            legend: {
                data: ['生命','物理', '法强','物抗','法抗','出场率'],
                type:'scroll',               
                width:'20%'
            },
            //鼠标移动到指定位置显示数据
            tooltip: {
                confine:true,
                enterable:true,
            },
            toolbox: {
                show: true,
                feature: {
                    mark: { show: true },
                    dataView: { show: true, readOnly: false },
                    magicType: { show: true, type: ['line', 'bar'] },
                    restore: { show: true },
                    saveAsImage: { show: true },
                },
            },
            calculable: true,
            
            xAxis: [{
            		type: 'category',
 
                	data: ['生命','物理', '法强','物抗','法抗','移速']
 
            		},
 				],
            	yAxis: [{
                	type: 'value'
 
            	},
 					],
            	series: [
                  
            		{          
 					name:'伽罗',
 					type:'bar',
 					
                	data: [30,170,166,85,50,370]
            		},
            		{
            		name:'鲁班大师',
            		type:'bar',
            		
            		data:[90,166,80,95,50,380]
            		},
                    {          
 					name:'上官婉儿 ',
 					type:'bar',
 					
                	data: [50,150,100,101,50,390]
            		},
                    
            	]
        }
        myChart2.setOption(option2);
        // myChart1.group='group1';
        // myChart2.group='group2';
        // echarts.connect('group1');
        echarts.connect([myChart1,myChart2]);
    </script>
</body>
 
</html>

效果展示: 

 

 

  • 8
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您好!要在PDF中使用PDFBox库进行多线程添加水印,您可以按照以下步骤进行操作: 1. 确保您已经将PDFBox库添加到您的项目中,并导入相关的类。 2. 创建一个实现Runnable接口的类,用于处理添加水印的任务。例如,可以创建一个名为"AddWatermarkTask"的类。 3. 在该类中,实现run()方法来执行具体的添加水印操作。您可以使用PDFBox提供的方法来加载PDF文件、添加水印并保存新的PDF文件。 4. 在主程序中,创建一个线程池来管理多个线程,并提交多个"AddWatermarkTask"任务。 5. 使用线程池的submit()方法来提交任务,并等待所有任务完成。 6. 最后,关闭线程池。 请注意,使用多线程处理PDF文件可能会涉及到共享资源的并发访问问题,因此您需要注意线程安全性和同步机制的实现。 下面是一个简单的示例代码,演示了如何使用PDFBox库进行多线程添加水印: ```java import org.apache.pdfbox.pdmodel.PDDocument; import org.apache.pdfbox.pdmodel.PDPage; import org.apache.pdfbox.pdmodel.PDPageContentStream; import java.io.File; import java.io.IOException; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class AddWatermarkTask implements Runnable { private String inputFile; private String outputFile; private String watermarkText; public AddWatermarkTask(String inputFile, String outputFile, String watermarkText) { this.inputFile = inputFile; this.outputFile = outputFile; this.watermarkText = watermarkText; } @Override public void run() { try { PDDocument document = PDDocument.load(new File(inputFile)); PDPageContentStream contentStream = null; for (PDPage page : document.getPages()) { contentStream = new PDPageContentStream(document, page, PDPageContentStream.AppendMode.APPEND, true, true); contentStream.beginText(); contentStream.setFont(PDType1Font.HELVETICA_BOLD, 48); contentStream.setLeading(40); contentStream.newLineAtOffset(100, 400); contentStream.showText(watermarkText); contentStream.endText(); contentStream.close(); } document.save(outputFile); document.close(); } catch (IOException e) { e.printStackTrace(); } } public static void main(String[] args) { String inputFile = "input.pdf"; String outputFile = "output.pdf"; String watermarkText = "Confidential"; ExecutorService executor = Executors.newFixedThreadPool(5); // 提交多个任务到线程池 for (int i = 0; i < 5; i++) { executor.submit(new AddWatermarkTask(inputFile, outputFile + i, watermarkText)); } executor.shutdown(); } } ``` 在这个示例中,我们创建了一个名为"AddWatermarkTask"的任务类来添加水印。在主程序中,我们创建了一个大小为5的线程池,提交了5个添加水印的任务。 请根据您的实际需求修改输入和输出文件的路径、水印文本等参数。 希望这些信息能够对您有所帮助!如有任何疑问,请随时向我提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值