精华内容
下载资源
问答
  • 批量导出pdf导出图片

    千次阅读 2019-09-19 16:25:41
    1. 基于已经制作好的pdf和上传到服务器上后,前端只需要传递pdf链接 ... * 批量导出pdf * @access public * @param id 分类编号 cat_name分类名称 * @return array */ public function actionExportpdf(){ ...

    1.

    基于已经制作好的pdf和上传到服务器上后,前端只需要传递pdf链接 数组的形式

    /**
         *  批量导出pdf
         * @access  public
         * @param   id     分类编号  cat_name分类名称
         * @return  array
         */
        public function actionExportpdf(){
            $ids = Yii::$app->request->post('id');
            $dcat_id = Yii::$app->request->post('dcat_id');
            if (!$ids) {
                return ['code' => -2, 'msg' => '参数错误'];
            }
            //商品文件属性
            $dataFlie = new \backend\models\MmcDataFile();
            $goodsDataFiles = $dataFlie->getGoodsDataFile($ids);
            $goodsDataFiles= array_filter($goodsDataFiles,function ($v)use($dcat_id){
                if($v['dcat_id']==$dcat_id){
                    return TRUE;
                }
            });
            foreach ($goodsDataFiles as $val){
                $url = $val['file_url'];
            }
            ob_end_clean();
            ob_start();
            $file = file_get_contents($url);
            header("Content-type:application/octet-stream");
            $filename = pathinfo($url,PATHINFO_BASENAME);
            header("Content-Disposition:attachment;filename=" . $filename);
            header("Accept-ranges:bytes");
            ob_end_flush();
            exit($file);
        }
    
    //导出图片    基于前端传递图片二维数组链接   把属于二维数组中的一维数组多个图片合并后并下载
        public function actionExportimg()
        {
            $ids = Yii::$app->request->post('id');
            $goodsThumb= Yii::$app->request->post('goods_thumb');
            if (!$ids || !$goodsThumb) {
                return ['code' => -2, 'msg' => '参数错误'];
            }
            if(is_array($goodsThumb)){
                $root =  $_SERVER['DOCUMENT_ROOT'];
                $num = strrpos($root,'/');
                $rootdir = substr($root,0,$num);
                $num = strrpos($rootdir,'/');
                $rootdir = substr($root,0,$num);
                if(count($goodsThumb)<=0){return json_encode(['code'=>-101,'message'=>'未接收到图片','data'=>'']);}
                $editor = Grafika::createEditor();
                $imageBack = Grafika::createBlankImage(1200, count($goodsThumb)*1200);//创建一个750*750的空白图像
                $backurl =$rootdir . '/backend/web/';
                foreach ($goodsThumb as $k=>$pic_path) {
                    $dir_name =$backurl . $pic_path;
                    $editor->open($image,$dir_name );//打开1.jpeg并且存放到$image1
                    $editor->resizeFill($image, '1200','1200');//居中剪裁。就是把较短的变缩放到200px,然后将长边的大于200px的部分居中剪裁掉,图片不会变形
                    $editor->blend($imageBack, $image, 'normal', 1, 'top-center',0,$k*1200);//将两个图像合成在一起,第一个图像作为基础,第二个图像在顶部。支持多种混合模式
                    $num = strrpos($dir_name,'/');
                    $savedir = substr($dir_name,0,$num);
                    $savedir = $savedir . '/all_'.$ids.'.jpg';
                    $file = $editor->save($imageBack, $savedir );//imageBack保存为all.jpg
                }
        //        var_dump($savedir);die;
                if($file){
        //        $shorturl = str_replace($backurl,"",$savedir);
                $httpurl = $savedir;
                // var_dump($httpurl);die;
                $files = file_get_contents($httpurl);
                header("Content-type:application/octet-stream");
                $filename = pathinfo($httpurl, PATHINFO_BASENAME);
                header("Content-Disposition:attachment;filename=" . $filename);
                header("Accept-ranges:bytes");
                exit($files);
            }else{
                    $file = file_get_contents($goodsThumb);
                    header("Content-type:application/octet-stream");
                    $filename = pathinfo($goodsThumb, PATHINFO_BASENAME);
                    header("Content-Disposition:attachment;filename=" . $filename);
                    header("Accept-ranges:bytes");
                    exit($file);
                }
            }
    
    展开全文
  • echarts导出成pdf

    2020-12-14 14:38:27
    2.把图片变成pdf, 3.下载PDF 编码为: 应引入 import echarts from ‘echarts’ import jsPDF from ‘jspdf’ 其中echarts的id是echartsId convertCanvasToImage() { //下载为pdf var myChart = echarts....

    1.先导出图片
    2.把图片变成pdf,
    3.下载PDF
    编码为:
    应引入
    import echarts from ‘echarts’
    import jsPDF from ‘jspdf’
    其中echarts的id是echartsId

    
    convertCanvasToImage() {
            //下载为pdf
            var myChart = echarts.getInstanceByDom(
              document.getElementById('echartsId')
            )
            var url = myChart.getConnectedDataURL({
              pixelRatio: 2, //导出的图片分辨率比率,默认是1
              backgroundColor: '#fff', //图表背景色
              excludeComponents: [
                //保存图表时忽略的工具组件,默认忽略工具栏
                'toolbox',
              ],
              type: 'png', //图片类型支持png和jpeg
            })
            this.createPDFObject(url)
          },
          createPDFObject(imgData) {
            console.log(imgData)
            var doc = new jsPDF('p', 'pt')
            doc.addImage(imgData, 5, 5, 600, 300, 'img')
            doc.save('line' + '.pdf')//名字
          },
    
    展开全文
  • 导出图片: only_pic.html 2. 导出图片到word: word_pic.html 3. 导出图片和内容到word: word_content_pic.html 直接导出 4.direct_pic.html 多图导出 5.word_content_pic.html
  • c#将pdf导出图片

    千次阅读 2013-04-27 11:29:44
    今天做个小功能,要把pdf的第一页生成微缩图,上网查了一圈,有各种各样的方法,后来我选择了使用PDFLibNet来实现(当然,我个人觉得使用acrobat接口肯定是兼容性最高的)   具体步骤: 1、首先到...

    今天做个小功能,要把pdf的第一页生成微缩图,上网查了一圈,有各种各样的方法,后来我选择了使用PDFLibNet来实现(当然,我个人觉得使用acrobat接口肯定是兼容性最高的)

     

    具体步骤:

    1、首先到http://code.google.com/p/pdfviewernet/下载pdfviewer,压缩包里有PDFLibNet.dll

    2、引用到项目中

    3、以下为代码  

    PDFWrapper pdfWrapper = new PDFWrapper();
                pdfWrapper.LoadPDF(@"D:\糖尿病学\糖尿病文库files\201303\1型糖尿病发病机制.pdf");
                pdfWrapper.ExportJpg(@"c:\output.jpg", 1, 1, 150, 90);
    
                //此处循环是等待jpg导出完成
                while (pdfWrapper.IsJpgBusy == true)
                {
                    Thread.Sleep(100);
                }
                pdfWrapper.Dispose();

     

    展开全文
  • vue 将echarts的图片导出成pdf文件

    千次阅读 2020-01-09 11:14:28
    需求: 将页面的echarts 图和页面的列表导出成pdf文件。 思路:echarts可以直接保存为图片,将经过base64编码后直接传给后台即可,table 表格只需要表格中的数据传给后台即可,pdf导出利用itextpdf 即可。 ...

    需求: 将页面的echarts 图和页面的列表导出成pdf文件。

    思路:echarts可以直接保存为图片,将经过base64编码后直接传给后台即可,table 表格只需要表格中的数据传给后台即可,pdf的导出利用itextpdf 即可。

    具体实现

    1 导出按钮

     <Button type="success"  @click="exportPdf()"><Icon type="md-arrow-down" />Report</Button>

    2 导出方法

      

           // 生成报表功能
                exportPdf(){
                    if(this.dataCount === 0){
                             this.$message({
                              type: "warning",
                              message: "暂无数据"
                             });
                             return;
                        }
                    var picBase64Info = this.echartsObj.getDataURL();//获取echarts图的base64编码,为png格式。
                    var form = new FormData();
                     var nian= this.formLine.dataTime.getFullYear()
                     var yue= this.formLine.dataTime.getMonth()+1
                     var lastDay = new Date(nian,yue,0).getDate()//最后一天
                    var tableData = JSON.stringify(this.data1).toString()
                     let fname = 'DNS QPS Monthly Report('+nian+'-'+yue+'-1 ~ '+nian+'-'+yue+'-'+lastDay+').pdf'; //下载文件的名字
                    form.append("base64Info", picBase64Info);
                    form.append("tableData", tableData);
                    let dataTime = nian+"-"+yue
                    form.append("dataTime", dataTime);
    
                    this.$api.exportPdf(form).then((res) => {
                    if (res != null) {
                        let blob = new Blob([res], {
                            type: 'application/pdf' //word文档为msword,pdf文档为pdf
                          });
                  if ('download' in document.createElement('a')) { // 非IE下载
                  let objectUrl = URL.createObjectURL(blob);
                  let link = document.createElement("a");
                 
                  link.href = objectUrl;
                  link.setAttribute("download", fname);
                  document.body.appendChild(link);
                  link.click();
                  document.body.removeChild(link); //下载完成移除元素
                URL.revokeObjectURL(objectUrl); //释放掉blob对象 
                 }else{//ie浏览器
                     navigator.msSaveBlob(blob, fname);
                 }
                 
                        
                    }
                }).catch(error => {
                  
            
            });
                    
     
                },

    echartsObj 是自己定义的一个变量,用来保存echarts 对象。

     var dnsCharts = echarts.init(document.getElementById('NetworkPerformance'))
    
         ...
      this.echartsObj = dnsCharts;

     具体生成echarts的过程就不写了,echarts 生成后,将值赋给echartsObj 即可。

    data1 的数据就是生成table表格所用到的数据。

    this.$api.exportPdf(form)只是对fetch做了简单的封装

    const exportPdf = params => {
      return fetch({
        url:  '/NetworkPerformance/exportPdf',
        method: 'post',
        responseType: 'arraybuffer',
        data: params
      })
    }
    

    后端代码

    1 引入itext 需要的依赖

       <!-- 生成pdf文件 -->
            <dependency>
                <groupId>com.itextpdf</groupId>
                <artifactId>itextpdf</artifactId>
                <version>5.4.2</version>
            </dependency>
            <dependency>
                <groupId>com.itextpdf</groupId>
                <artifactId>itext-asian</artifactId>
                <version>5.2.0</version>
            </dependency>

    2 controller 层中的代码

    
    	@ResponseBody
        @Timed
        @ApiOperation(value = "DNS月报--查询最大值,最小值平均值", notes = "DNS月报--查询最大值,最小值平均值")
        @RequestMapping(value = "/exportPdf", method = RequestMethod.POST)
    	 @ApiImplicitParams({
             @ApiImplicitParam(name = "base64Info", value = "获取echarts图的base64编码,为png格式", required = true, paramType = "query", dataType = "String"),
             @ApiImplicitParam(name = "tableData",paramType = "body", allowMultiple = true, dataType = "NetworkPerformanceDto"),
             @ApiImplicitParam(name = "dataTime", value = "查询时间(年月如2018-11)", required = true, paramType = "query", dataType = "String")
     })
        public void exportPdf(String base64Info,String tableData,String dataTime,HttpServletRequest request, HttpServletResponse response) {
            logger.debug("DNS月报--生成报表");
            String savePath;
            String pdfFilePath;
            try {
            	JSONArray jsonArray = JSONArray.parseArray(tableData);//并将DS内容取出转为json数组 
                base64Info = base64Info.split("base64,")[1];//去掉无用信息data:image/png;base64,
                File directory = new File("");//参数为空
    		    String filePath = directory.getCanonicalPath()+File.separator+"temp";  
                String imgName = UUID.randomUUID() + ".png";
                savePath = filePath+File.separator+imgName;
                //图片保存到 本地
                FileUtils.Base64ToImage(base64Info, savePath);
            	String tmpname=UUID.randomUUID().toString();
            	pdfFilePath = filePath+File.separator+"pdf"+File.separator+tmpname+".pdf";
            	File file = DnsReportPdfUtils.createPdf(jsonArray, savePath, dataTime, filePath+File.separator+"pdf", tmpname);
            	if (file.exists()) {
            		FileUtils.downloadFile(response,filePath+File.separator+"pdf",tmpname+".pdf"); 
            		//下载完成,删除临时pdf文件
            		FileUtils.delete(pdfFilePath);
            	}
            } catch (Exception e) {
                e.printStackTrace();
                logger.error(e.getMessage(), e);
            }
           
        }

    FileUtils 类中的相关函数

     /**
        * 
            * @discription 删除文件夹及文件夹下面的文件
            * @author lijunjie            
            * @created 2019年7月3日 下午2:31:02     
            * @param fileName
            * @return
        */
    	public static boolean delete (String fileName){
    	    try{
    	        File sourceFile = new File(fileName);
    	        if(sourceFile.isDirectory()){
    	            for (File listFile : sourceFile.listFiles()) {
    	                delete(listFile.getAbsolutePath());
    	            }
    	        }
    	        return sourceFile.delete();
    	    }catch(Exception e){
    	        e.printStackTrace();
    	    }
    	    return false;
    	}
    	
    	/**
    	 * 
    	     * @discription base64位字符串保存为本地图片
    	     * @author lijunjie            
    	     * @created 2019年12月20日 上午10:22:41     
    	     * @param imgStr  图片的base64 字符串
    	     * @param imgFilePath 图片保存的路径
    	     * @return
    	 */
    	public static boolean Base64ToImage(String imgStr,String imgFilePath) {
    		// 图像数据为空
    		if (StringUtils.isEmpty(imgStr)){
                return false;
             }
    		try {
    			Decoder decoder = Base64.getDecoder();
    			byte[] b = decoder.decode(imgStr);
    			for (int i = 0; i < b.length; ++i) {
    				if (b[i] < 0) {// 调整异常数据
    					b[i] += 256;
    				}
    			}
    			OutputStream out = new FileOutputStream(imgFilePath);
    			out.write(b);
                out.flush();
                out.close();
                return true;
    		} catch (Exception e) {
    			e.printStackTrace();
    			return false;
    		}
    	}
       
    	
    	   /**
    	    * 
    	        * @discription 下载指定目录下的文件,返回二进制流数据
    	        * @author lijunjie            
    	        * @created 2019年12月26日 下午3:59:12     
    	        * @param response
    	        * @param filePath 文件所在目录
    	        * @param fileName  文件名称
    	        * @return
    	    */
    		public static String downloadFile(HttpServletResponse response, String filePath,String fileName) {
    			File path = null;
    			response.setHeader("content-type", "application/octet-stream");
    //			response.setContentType("application/octet-stream");
    			try {
    				response.setHeader("Content-Disposition", "attachment;filename=" + java.net.URLEncoder.encode(fileName, "UTF-8"));
    			} catch (UnsupportedEncodingException e2) {
    				e2.printStackTrace();
    			}
    			byte[] buff = new byte[1024];
    			BufferedInputStream bis = null;
    			OutputStream os = null;		
    			try {
    				path = new File(filePath+"/"+fileName);
    				os = response.getOutputStream();
    				bis = new BufferedInputStream(new FileInputStream(path));
    				int i = bis.read(buff);
    				while (i != -1) {
    					os.write(buff, 0, buff.length);
    					os.flush();
    					i = bis.read(buff);
    				}
    			} catch (FileNotFoundException e1) {
    				//e1.getMessage()+"系统找不到指定的文件";
    				return "系统找不到指定的文件";
    			}catch (IOException e) {
    				e.printStackTrace();
    			} finally {
    				if (bis != null) {
    					try {
    						bis.close();
    					} catch (IOException e) {
    						e.printStackTrace();
    					}
    				}
    			}
    			return "success";
    		}
    
    

    DnsReportPdfUtils  生成pdf 的核心代码

    
    
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.IOException;
    
    import com.alibaba.fastjson.JSONArray;
    import com.alibaba.fastjson.JSONObject;
    import com.itextpdf.text.Document;
    import com.itextpdf.text.DocumentException;
    import com.itextpdf.text.Element;
    import com.itextpdf.text.Font;
    import com.itextpdf.text.Image;
    import com.itextpdf.text.PageSize;
    import com.itextpdf.text.Paragraph;
    import com.itextpdf.text.Phrase;
    import com.itextpdf.text.pdf.BaseFont;
    import com.itextpdf.text.pdf.PdfPCell;
    import com.itextpdf.text.pdf.PdfPTable;
    import com.itextpdf.text.pdf.PdfWriter;
    
    public class DnsReportPdfUtils {
    
    	private static final Font FontChinese12 = getChineseFont(12);
    	private static final Font FontChinese8 = getChineseFont(8);
    	private static final Font FontChinese6 = getChineseFont(6);
    	
    	public static File createPdf(JSONArray jsonArray,String imgPath,String dataTime,String rootPath,String tmpname) {
    		//生成pdf
    		// 1、建立com.itextpdf.text.Document对象的实例。
    		Document document = new Document(PageSize.A4);
    		File dir=new File(rootPath);
    		if(!dir.exists()){
    			dir.mkdirs();
    		}
    		File pdffile = new File(rootPath + File.separator + tmpname + ".pdf");
    		FileOutputStream fos;
    		try {
    			fos = new FileOutputStream(pdffile);
    			//2、建立一个书写器(Writer)与document对象关联,通过书写器(Writer)可以将文档写入到输出流中。
    			PdfWriter writer = PdfWriter.getInstance(document, fos);
    			// 添加页码
    			PdfReportM1HeaderFooter footer = new PdfReportM1HeaderFooter();
    			writer.setPageEvent(footer);
    			//3、打开文档。
    			document.open();
    			String lastDay = DateUtil.getLastDayOfMonth(Integer.parseInt(dataTime.substring(0,4)),Integer.parseInt(dataTime.substring(5)));
    			//Paragraph header = new Paragraph("DNS QPS Monthly Report("+dataTime+"-1 ~ "+dataTime+"-"+lastDay+")", getChineseFont(16));
    			Paragraph header = new Paragraph("DNS QPS Monthly Report("+dataTime+")", getChineseFont(18));
    			header.setAlignment(Element.ALIGN_CENTER);
    			//空行
    			Paragraph blankRow = new Paragraph(40f, " ", getChineseFont(15));
    	     
    	        PdfPTable tableAvaiImg = new PdfPTable(1);
    	        tableAvaiImg.setHorizontalAlignment(Element.ALIGN_CENTER);
    	        tableAvaiImg.setSpacingBefore(10f);
    	        tableAvaiImg.addCell(createImageCell(imgPath));
    	        //设置table的标题
    	        Font tableTitle = getChineseFont(14);
    	        //tableTitle.setColor(17,150,238);
    	        tableTitle.setStyle(Font.BOLD);
    	        Paragraph title = new Paragraph(dataTime+" DNS qps(query per second)",tableTitle );
    	        title.setAlignment(Element.ALIGN_CENTER);
    	        title.setSpacingBefore(40f);
    	        //dns 最大值最小值平均值的表格
    	        PdfPTable dnsTable = new PdfPTable(10);
    	        //表格宽度
    	        int dnsTableWidthInfo[] = {20,20,20,20,20,20,20,20,20,20};
    	        // 设置表格上面空白宽度
    	        dnsTable.setSpacingBefore(10f);
    	        dnsTable.setWidths(dnsTableWidthInfo);
    	        //设置表头
    	        PdfPCell cell0;
                
                //name
                cell0 = new PdfPCell(new Phrase("Name", FontChinese8));
                cell0.setHorizontalAlignment(Element.ALIGN_CENTER); //设置水平居中
                cell0.setVerticalAlignment(Element.ALIGN_MIDDLE);  // 设置垂直居中
                cell0.setFixedHeight(40f);//设置固定高度
                cell0.setRowspan(2);
                dnsTable.addCell(cell0);
                
                //QPS
                cell0 = new PdfPCell(new Phrase("QPS", FontChinese8));
                cell0.setHorizontalAlignment(Element.ALIGN_CENTER); //设置水平居中
                cell0.setVerticalAlignment(Element.ALIGN_MIDDLE);  // 设置垂直居中
                cell0.setFixedHeight(20f);//设置固定高度
                cell0.setColspan(3);
                dnsTable.addCell(cell0);
                
                //CPU avg(%)
                cell0 = new PdfPCell(new Phrase("CPU avg(%)", FontChinese8));
                cell0.setHorizontalAlignment(Element.ALIGN_CENTER); //设置水平居中
                cell0.setVerticalAlignment(Element.ALIGN_MIDDLE);  // 设置垂直居中
                cell0.setRowspan(2);
                cell0.setFixedHeight(40f);//设置固定高度
                dnsTable.addCell(cell0);
                
                //MEM avg(%)
                cell0 = new PdfPCell(new Phrase("MEM avg(%)", FontChinese8));
                cell0.setHorizontalAlignment(Element.ALIGN_CENTER); //设置水平居中
                cell0.setVerticalAlignment(Element.ALIGN_MIDDLE);  // 设置垂直居中
                cell0.setRowspan(2);
                cell0.setFixedHeight(40f);//设置固定高度
                dnsTable.addCell(cell0);
                
                //Package In
                cell0 = new PdfPCell(new Phrase("Package In", FontChinese8));
                cell0.setHorizontalAlignment(Element.ALIGN_CENTER); //设置水平居中
                cell0.setVerticalAlignment(Element.ALIGN_MIDDLE);  // 设置垂直居中
                cell0.setRowspan(2);
                cell0.setFixedHeight(40f);//设置固定高度
                dnsTable.addCell(cell0);
                
                 //Package Out
                cell0 = new PdfPCell(new Phrase("Package Out", FontChinese8));
                cell0.setHorizontalAlignment(Element.ALIGN_CENTER); //设置水平居中
                cell0.setVerticalAlignment(Element.ALIGN_MIDDLE);  // 设置垂直居中
                cell0.setRowspan(2);
                cell0.setFixedHeight(40f);//设置固定高度
                dnsTable.addCell(cell0);
                
                //Flow In(Mbits)
                cell0 = new PdfPCell(new Phrase("Flow In(Mbits)", FontChinese8));
                cell0.setHorizontalAlignment(Element.ALIGN_CENTER); //设置水平居中
                cell0.setVerticalAlignment(Element.ALIGN_MIDDLE);  // 设置垂直居中
                cell0.setRowspan(2);
                cell0.setFixedHeight(40f);//设置固定高度
                dnsTable.addCell(cell0);
                
                //Flow Out(Mbits)
                cell0 = new PdfPCell(new Phrase("Flow Out(Mbits)", FontChinese8));
                cell0.setHorizontalAlignment(Element.ALIGN_CENTER); //设置水平居中
                cell0.setVerticalAlignment(Element.ALIGN_MIDDLE);  // 设置垂直居中
                cell0.setRowspan(2);
                cell0.setFixedHeight(40f);//设置固定高度
                dnsTable.addCell(cell0);
    	        
                //Max
                cell0 = new PdfPCell(new Phrase("Max", FontChinese8));
                cell0.setHorizontalAlignment(Element.ALIGN_CENTER); //设置水平居中
                cell0.setVerticalAlignment(Element.ALIGN_MIDDLE);  // 设置垂直居中
                cell0.setFixedHeight(20f);//设置固定高度
                dnsTable.addCell(cell0);
                
                //Min
                cell0 = new PdfPCell(new Phrase("Min", FontChinese8));
                cell0.setHorizontalAlignment(Element.ALIGN_CENTER); //设置水平居中
                cell0.setVerticalAlignment(Element.ALIGN_MIDDLE);  // 设置垂直居中
                cell0.setFixedHeight(20f);//设置固定高度
                dnsTable.addCell(cell0);
                
                //Average
                cell0 = new PdfPCell(new Phrase("Average", FontChinese8));
                cell0.setHorizontalAlignment(Element.ALIGN_CENTER); //设置水平居中
                cell0.setVerticalAlignment(Element.ALIGN_MIDDLE);  // 设置垂直居中
                cell0.setFixedHeight(20f);//设置固定高度
                dnsTable.addCell(cell0);
                
                //想table中添加数据
                for(int i=0;i< jsonArray.size();i++) {
                	JSONObject json= (JSONObject) jsonArray.get(i);
                	dnsTable.addCell(getCell(json.getString("deviceName")));
                	dnsTable.addCell(getCell(json.getString("max")));
                	dnsTable.addCell(getCell(json.getString("min")));
                	dnsTable.addCell(getCell(json.getString("avg")));
                	dnsTable.addCell(getCell(json.getString("cpuAvg")));
                	dnsTable.addCell(getCell(json.getString("menAvg")));
                	dnsTable.addCell(getCell(json.getString("pkgIn")));
                	dnsTable.addCell(getCell(json.getString("pkgOut")));
                	dnsTable.addCell(getCell(json.getString("flowIn")));
                	dnsTable.addCell(getCell(json.getString("flowOut")));
                }
    	        //4、向文档中添加内容。
    	        document.add(header);
    	        document.add(blankRow);//空行
    	        document.add(tableAvaiImg);
    //	        document.add(blankRow);//空行
    	        document.add(title);//添加标题
    	        document.add(dnsTable);
    	        //5、关闭文档
    	        document.close();
    	        
    		} catch (Exception e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    		return pdffile;
    	}
    	 
    	 private static PdfPCell createImageCell(String path) throws DocumentException, IOException {
    	        Image img = Image.getInstance(path);
    	        PdfPCell cell = new PdfPCell(img, true);
    	        cell.setBorder(PdfPCell.NO_BORDER);
    	        return cell;
    	    }
    	 /**
         * 字体
         * @param size
         * @return
         */
        private static Font getChineseFont(float size) {
            Font FontChinese = null;
            try {
                BaseFont bfChinese = BaseFont.createFont();
                FontChinese = new Font(bfChinese, size, Font.NORMAL);
               
            } catch (DocumentException de) {
                System.err.println(de.getMessage());
            } catch (IOException ioe) {
                System.err.println(ioe.getMessage());
            }
            return FontChinese;
        }
        
        private static PdfPCell getCell(String cellValue) {
            PdfPCell cell = new PdfPCell();
            try {
                cell = new PdfPCell(new Phrase(cellValue, FontChinese6));
                cell.setHorizontalAlignment(Element.ALIGN_CENTER); //设置水平居中
                cell.setVerticalAlignment(Element.ALIGN_MIDDLE);  // 设置垂直居中
                cell.setFixedHeight(20f);
            } catch (Exception e) {
                e.printStackTrace();
            }
            return cell;
        }
    }
    
    

    PdfReportM1HeaderFooter 页面基本设置类

    
    
    import java.io.IOException;
    
    import com.itextpdf.text.Document;
    import com.itextpdf.text.DocumentException;
    import com.itextpdf.text.Element;
    import com.itextpdf.text.Font;
    import com.itextpdf.text.PageSize;
    import com.itextpdf.text.Phrase;
    import com.itextpdf.text.Rectangle;
    import com.itextpdf.text.pdf.BaseFont;
    import com.itextpdf.text.pdf.ColumnText;
    import com.itextpdf.text.pdf.PdfContentByte;
    import com.itextpdf.text.pdf.PdfPageEventHelper;
    import com.itextpdf.text.pdf.PdfTemplate;
    import com.itextpdf.text.pdf.PdfWriter;
    
    public class PdfReportM1HeaderFooter extends PdfPageEventHelper {
        /**
         * 页眉
         */
        public String header = "";
    
        /**
         * 文档字体大小,页脚页眉最好和文本大小一致
         */
        public int presentFontSize = 12;
    
        /**
         * 文档页面大小,最好前面传入,否则默认为A4纸张
         */
        public Rectangle pageSize = PageSize.A4;
    
        // 模板
        public PdfTemplate total;
    
        // 基础字体对象
        public BaseFont bf = null;
    
        // 利用基础字体生成的字体对象,一般用于生成中文文字
        public Font fontDetail = null;
    
        /**
         *
         * Creates a new instance of PdfReportM1HeaderFooter 无参构造方法.
         *
         */
        public PdfReportM1HeaderFooter() {
    
        }
    
        /**
         *
         * Creates a new instance of PdfReportM1HeaderFooter 构造方法.
         *
         * @param yeMei
         *            页眉字符串
         * @param presentFontSize
         *            数据体字体大小
         * @param pageSize
         *            页面文档大小,A4,A5,A6横转翻转等Rectangle对象
         */
        public PdfReportM1HeaderFooter(String yeMei, int presentFontSize, Rectangle pageSize) {
            this.header = yeMei;
            this.presentFontSize = presentFontSize;
            this.pageSize = pageSize;
        }
    
        public void setHeader(String header) {
            this.header = header;
        }
    
        public void setPresentFontSize(int presentFontSize) {
            this.presentFontSize = presentFontSize;
        }
    
        /**
         *
         * TODO 文档打开时创建模板
         *
         * @see com.itextpdf.text.pdf.PdfPageEventHelper#onOpenDocument(com.itextpdf.text.pdf.PdfWriter, com.itextpdf.text.Document)
         */
        public void onOpenDocument(PdfWriter writer, Document document) {
            total = writer.getDirectContent().createTemplate(50, 50);// 共 页 的矩形的长宽高
        }
    
        /**
         *
         * TODO 关闭每页的时候,写入页眉,写入'第几页共'这几个字。
         *
         * @see com.itextpdf.text.pdf.PdfPageEventHelper#onEndPage(com.itextpdf.text.pdf.PdfWriter, com.itextpdf.text.Document)
         */
        public void onEndPage(PdfWriter writer, Document document) {
    
            try {
                if (bf == null) {
                    bf = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", false);
                }
                if (fontDetail == null) {
                    fontDetail = new Font(bf, presentFontSize, Font.NORMAL);// 数据体字体
                }
            } catch (DocumentException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
    
            // 1.写入页眉
            ColumnText.showTextAligned(writer.getDirectContent(), Element.ALIGN_LEFT, new Phrase(header, fontDetail), document.left(), document.top() + 20, 0);
    
            // 2.写入前半部分的 第 X页/共
            int pageS = writer.getPageNumber();
            String foot1 = "第 " + pageS + " 页 /共";
            Phrase footer = new Phrase(foot1, fontDetail);
    
            // 3.计算前半部分的foot1的长度,后面好定位最后一部分的'Y页'这俩字的x轴坐标,字体长度也要计算进去 = len
            float len = bf.getWidthPoint(foot1, presentFontSize);
    
            // 4.拿到当前的PdfContentByte
            PdfContentByte cb = writer.getDirectContent();
    
            // 5.写入页脚1,x轴就是(右margin+左margin + right() -left()- len)/2.0F 再给偏移20F适合人类视觉感受,否则肉眼看上去就太偏左了 ,y轴就是底边界-20,否则就贴边重叠到数据体里了就不是页脚了;注意Y轴是从下往上累加的,最上方的Top值是大于Bottom好几百开外的。
            ColumnText.showTextAligned(cb, Element.ALIGN_CENTER, footer, (document.rightMargin() + document.right() + document.leftMargin() - document.left() - len) / 2.0F + 20F, document.bottom() - 20, 0);
    
            // 6.写入页脚2的模板(就是页脚的Y页这俩字)添加到文档中,计算模板的和Y轴,X=(右边界-左边界 - 前半部分的len值)/2.0F + len , y 轴和之前的保持一致,底边界-20
            cb.addTemplate(total, (document.rightMargin() + document.right() + document.leftMargin() - document.left()) / 2.0F + 20F, document.bottom() - 20); // 调节模版显示的位置
    
        }
    
        /**
         *
         * TODO 关闭文档时,替换模板,完成整个页眉页脚组件
         *
         * @see com.itextpdf.text.pdf.PdfPageEventHelper#onCloseDocument(com.itextpdf.text.pdf.PdfWriter, com.itextpdf.text.Document)
         */
        public void onCloseDocument(PdfWriter writer, Document document) {
            // 7.最后一步了,就是关闭文档的时候,将模板替换成实际的 Y 值,至此,page x of y 制作完毕,完美兼容各种文档size。
            total.beginText();
            total.setFontAndSize(bf, presentFontSize);// 生成的模版的字体、颜色
            String foot2 = " " + (writer.getPageNumber() - 1) + " 页";
            total.showText(foot2);// 模版显示的内容
            total.endText();
            total.closePath();
        }
    }
    

    最终效果:

     

    展开全文
  • PDF导出图片

    千次阅读 2013-05-11 13:41:48
    今天朋友给我了个pdf让我导出word,我就在百度上输入PDF转换word,出现的第一个工具,我就用了,结果是导出来了,其实PDF里面就一张图片,朋友想做word的背景,导是导出来了,但是图片有些失真了,我想ps下,...
  • VUE中将页面导出图片或者PDF

    千次阅读 2018-12-19 11:01:50
    VUE中将页面导出为图片或者PDF导出图片导出为PDF 导出为图片 将页面html转换成图片 npm install --save html2canvas 在需要导出的页面引入 import html2Canvas from 'html2canvas' 在 methods 中添加方法 ...
  • Vue 导出PDF文件终极解决方案 关于 Vue 导出 Echarts 统计图为 pdf 格式,网上许多作者给出了解决方案,但是都不能解决一些根本问题,
  • 安装 npm install html2canvas --save npm install jspdf --save 导入 ... import JsPDF from 'jspdf' 导出图片 将要导出的部分限制一下,后面附带一个a标签 <div class="..." ref="imageDom" id="image...
  • pdf原始文件中: 导出后的效果只有上面的图片部分,没有下面文字部分,达到预期的效果。 若有需求,请联系qq:728297725
  • 加密Pdf如何导出图片 要使用到的工具:pdf-xchange viewer,自行百度下载 用pdfxviewer打开加密pdf文件 带加密的pdf,会显示[安全]两个字 点击【文件】–》【打印】弹出界面: 注意选择和勾选项,看下面图示: ...
  • java itextPdf导出pdf

    千次阅读 2018-02-07 15:59:21
    //导出pdf的名称 File fileName = new File(savePhotoPath + newName); //导出pdf的位置 FileOutputStream fos2 = new FileOutputStream(fileName); //文件输出流 ByteArrayOutputStream ba = new Byt...
  • PDF文件中的图片导出

    千次阅读 2018-01-16 19:27:45
    最近要做一个PDF盖章程序,研究了一下PDF,也在网上找了不少关于PDF的工具,发现都是使用已有的iSharepText或者PDFCreater做PDF处理,于是研究了一下PDF的格式文档,其实如果只导出PDF图片还是比较简单的。...
  • 导出pdf文件时加图片水印

    千次阅读 2018-06-22 16:18:45
    前言:本人探讨的是在导出PDF文件之前先水印加好,导出后的pdf文件已经加好了水印。
  • Matlab导出适合图片大小的pdf格式图片

    千次阅读 多人点赞 2019-04-12 15:03:09
    在利用Latex写文章的时候需要使用pdf格式图片,利用Matlab print命令直接导出pdf是页面大小的size,没法直接使用,需要使用如下命令进行导出: 这个是经过验证有效的方法。 % 导出pdf set(gcf,'Units','Inches'...
  • 使用我们前面写的程序,确实是可以导出图片,如果针对于类似简历的需求,图片填充单元格,会满足效果,如下图所示: 但在实际的很多需求中,可能需要的是小图标,此时我们就需要去控制图片的大小了。 使用...
  • Python-在线网页导出图片pdf

    千次阅读 2020-04-08 17:55:12
    图片是由一堆二进制数据组成的,我们该如何将网页上显示的内容导出为我们想要的图片或者pdf呢?博主闲极无聊逛遍github,发现了一个有趣的库pyppeteer,它实现了我所需要导出需求。接下来我们来看看它是怎么操作的...
  • 获得高清图片一般用别的软件导出图片可以调节格式分辨率,采用矢量图或者分辨率高的位图就可以,然而从网上获取的图片就没办法了。这时候你需要一款经久不衰的神器,PhotoZoom。他界面是这样的, 可以方便的
  • 在工作中常常需要将PDF转换为图片,好多免费但是图片有水印和功能不全的问题。 还有市面上很多软件知识完成了部分的工作,比如只能单个文件转PDF,那么遇到多文件的就只能挨个转么? 还有转换的格式支持的非常有限...
  • Confluence PDF导出不显示中文,导出Word图片及代码显示 Confluence是非常强大的wiki平台,有针对个人的免费企业版,虽然只支持最多三个用户,对于个人博客和知识管理已经足够了! 昨天安装了Confluence...
  • 图片保存在AX数据库中,报表浏览可正常显示,但是导出PDF图片不能正常显示。如下图 试了很多方法未解决,其中包括,把图片尺寸变小,...并且发现png格式的图片导出pdf后也不能正常显示,方法也是把图片另存为jpg。
  • 前段时间,为了解析PDF,花了不少时间去学习PDFbox和itext,这两个都是处理PDF的开源库,有java和C#的。作为一个刚开始学习这两个开源库的,感觉百度上的资源还是太少了。我做的是一个关于PDF的处理,在百度上找了...
  • Word导出PDF图片模糊、失真 解决办法

    千次阅读 2020-03-25 13:15:55
    Word导出PDF图片模糊、失真 解决办法。
  • Java实现word导出与pdf导出

    千次阅读 2019-03-04 08:58:06
    实现PDF 导出 大部分都是用itext来实现,这次word导出我是用freemarker来实现,麻烦点,需要将其文档改成xml然后在改成ftl文件。如果不懂ftl文件语法请去看freemarker语法。这里就不再说了。程序用的是maven ,导入...
  • 经验:从ppt复制到word中的图片导出成PDF后出现黑框怎么解决 更新历史 20190602: 首次发布 在使用ppt和word的过程中,发现一个现象:将ppt中的图片复制到word中时,图片是没问题的,但是将word导出成PDF后,...
  • 利用IText导出PDF: 使用.ftl模板引入图片不显示,不报错,但是它找不到图片, .separator { margin: 15px; height: 16px; text-align: center;...这样直接导出PDF图片是显示不出来...
  • VScode+MarkDown导出PDF图片显示问题

    千次阅读 2020-05-08 20:15:44
    Windows10下使用VScode写MarkDown导出PDF图片不显示的问题,两种插件的比较。
  • 解决OneNote导出PDF图片模糊的问题

    千次阅读 2020-09-30 18:41:20
    OneNote本身自带导出PDF功能,当文档只有文字时一切OK,但是一旦含有图片,那么PDF中的清晰度就很尴尬。 OneNote本身自带导出PDF功能示意图: OneNote中的清晰度: PDF中的清晰度: 这个清晰度显然...
  • python批量将PPT导出成图片

    千次阅读 2019-03-26 10:07:43
    公司电脑使用comtypes完美导出图片,系统win10 回家后使用自己的电脑就报错,系统也是win10,最后没办法放弃comtypes采用win32com,最终成功 源代码 """ 该工具函数的功能:批量将PPT导出图片...
  • springboot整合itextpdf导出pdf

    千次阅读 2020-06-17 17:30:30
    springboot整合itextpdf导出pdf 1.pom依赖 如果使用别的版本有可能会报错,建议使用这2个版本 <dependency> <groupId>com.itextpdf</groupId> <artifactId>itextpdf</artifactId> &...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 22,997
精华内容 9,198
关键字:

怎么把pdf导出成图片