精华内容
下载资源
问答
  •  pdfbox作为Apache开源的PDF操作工具,允许创建新的PDF文档,操作现有文档,以及从文档中提取内容的能力。Apache PDFBox还包括一些命令行实用工具。本文楼主主要介绍其中的PDF转图片的功能,有其他功能需求的同学,...

    一、背景


     

      pdfbox作为Apache开源的PDF操作工具,允许创建新的PDF文档,操作现有文档,以及从文档中提取内容的能力。Apache PDFBox还包括一些命令行实用工具。本文楼主主要介绍其中的PDF转图片的功能,有其他功能需求的同学,可以去官网读读文档,https://pdfbox.apache.org/

    二、准备工作


     

      只需两个jar,pdfbox-2.0.7.jar,font-box-2.0.7.jar,当然用maven或gradle的同学,只需引入pdfbox就行了,依赖添加,楼主给大家准备在下面,直接取就OK。

      gradle添加依赖:

    1 //添加pdfbox的依赖
    2 compile('org.apache.pdfbox:pdfbox:2.0.7')

      maven添加依赖:

    1 <dependency>
    2   <groupId>org.apache.pdfbox</groupId>
    3   <artifactId>pdfbox</artifactId>
    4   <version>2.0.7</version>
    5 </dependency>

      其次,就是准备pdf文档一份,用来解析。

    三、代码实现


     

      代码不是很多,不超过100行,楼主给出了很全面的注释:

     1 package cn.apache.poi.pdf;
     2 
     3 import org.apache.pdfbox.io.RandomAccessBuffer;
     4 import org.apache.pdfbox.pdfparser.PDFParser;
     5 import org.apache.pdfbox.pdmodel.PDDocument;
     6 import org.apache.pdfbox.pdmodel.PDPage;
     7 import org.apache.pdfbox.rendering.PDFRenderer;
     8 
     9 import javax.imageio.IIOImage;
    10 import javax.imageio.ImageIO;
    11 import javax.imageio.ImageWriter;
    12 import javax.imageio.stream.ImageOutputStream;
    13 import java.awt.image.BufferedImage;
    14 import java.io.*;
    15 import java.util.Iterator;
    16 
    17 /**
    18  * Created by Jon_China on 2017/7/30.
    19  */
    20 public class Pdf2Image {
    21     public final  static String  IMG_TYPE_JPG = "jpg";
    22     public final  static String  IMG_TYPE_PNG = "png";
    23     public static void main( String[] args ) throws IOException{
    24         Pdf2Image pdf2Image = new Pdf2Image();
    25         pdf2Image.pdf2img("E:\\java测试\\java测试\\程序1\\待转换文件\\待转换pdf.pdf", "D:",IMG_TYPE_PNG);
    26     }
    27 
    28 
    29     /**
    30      * PDF转图片
    31      * @param pdfPath pdf文件的路径
    32      * @param savePath 图片保存的地址
    33      * @param imgType 图片保存方式
    34      */
    35     public void pdf2img(String pdfPath,String savePath,String imgType){
    36         String fileName = pdfPath.substring(pdfPath.lastIndexOf("\\")+1, pdfPath.length());
    37         fileName = fileName.substring(0,fileName.lastIndexOf("."));
    38         InputStream is = null;
    39         PDDocument pdDocument = null;
    40         try {
    41             is = new BufferedInputStream(new FileInputStream(pdfPath));
    42             //创建pdf文件解析器
    43             PDFParser parser = new PDFParser(new RandomAccessBuffer(is));
    44             parser.parse();
    45             //获取解析后的pdf文档
    46             pdDocument = parser.getPDDocument();
    47             //获取pdf渲染器,主要用来后面获取BufferedImage
    48             PDFRenderer renderer = new PDFRenderer(pdDocument);
    49             //获取pdf文件总页数
    50             int pageCount = pdDocument.getNumberOfPages();
    51             for (int i = 0; i < pageCount; i++) {
    52                 //构造保存文件名称格式
    53                 String saveFileName = savePath+"\\"+fileName+"-"+i+"."+imgType;
    54                 //获取当前页对象
    55                 PDPage page =  pdDocument.getPage(i);
    56                 //图片转换
    57                 pdfPage2Img(page,saveFileName,imgType,renderer,i);
    58             }
    59         } catch (Exception e) {
    60             e.printStackTrace();
    61         }finally{
    62             if(pdDocument != null){
    63                 try {
    64                     pdDocument.close();
    65                 } catch (IOException e) {
    66                     e.printStackTrace();
    67                 }
    68             }
    69         }
    70     }
    71 
    72     /**
    73      * 将pdf单页转换为图片
    74      * @param page 当页对象
    75      * @param saveFileName 保存的图片名称
    76      * @param imgType 保存的图片类型
    77      * @param renderer 用于获取BufferedImage
    78      * @param index 页索引
    79      * @throws IOException
    80      */
    81     public void pdfPage2Img(PDPage page,String saveFileName,String imgType,PDFRenderer renderer,int index) throws IOException{
    82         //构造图片
    83         BufferedImage img_temp  = renderer.renderImage(index);
    84         //设置图片格式
    85         Iterator<ImageWriter> it = ImageIO.getImageWritersBySuffix(imgType);
    86         //将文件写出
    87         ImageWriter writer = (ImageWriter) it.next();
    88         ImageOutputStream imageout = ImageIO.createImageOutputStream(new FileOutputStream(saveFileName));
    89         writer.setOutput(imageout);
    90         writer.write(new IIOImage(img_temp, null, null));
    91     }
    92 }

      就是这么简单,源码地址,请戳https://github.com/LJunChina/MineKnowContainer/tree/master/pdf

    转载于:https://www.cnblogs.com/qq503665965/p/7260069.html

    展开全文
  • Java IText PDF分页模板制作 输出

    万次阅读 2011-09-14 11:49:00
    相信很多朋友在项目中或多或少会遇到报表打印的需求,然而精确套打的实现更是一份苦差呀。近日在网上找到一份chm文档,虽然这是某家公司产品开发文档(大家不要误会,我可不是想在这做广告哦,这个产品要是免费就更...

      相信很多朋友在项目中或多或少会遇到报表打印的需求,然而精确套打的实现更是一份苦差呀。近日在网上找到一份chm文档,虽然这是某家公司产品开发文档(大家不要误会,我可不是想在这做广告哦,这个产品要是免费就更好了,呵呵),但是对PDF模板制作有很详细的讲解,而且里面还有视频。。。相信大家一看就会了!

           通过iText可以调用PDF模板,对模板中的字段动态赋值,从而实现套打(也就是说,我们可以不依赖这份文档中提到的产品),当我们报表的样式或位置需要调整时,我们之需修改模板即可。下一篇Blog我会给大家一个示例,等不急的话大家可以到网上找找,这方面的资料还是蛮多的。

           好了,不多说了,大家快行动吧。

      

    下面这个servlet代码填充模板(见附件中testEx.pdf文件)中的字段,代码如下:

    java 代码
    1. import javax.servlet.*;   
    2. import javax.servlet.http.*;   
    3. import java.io.*;   
    4.   
    5. import com.lowagie.text.*;   
    6. import com.lowagie.text.pdf.*;   
    7.   
    8. public class GenPdfServlet extends HttpServlet {   
    9.   
    10.     protected void doGet(HttpServletRequest request,   
    11.             HttpServletResponse response) throws ServletException,   
    12.             java.io.IOException {   
    13.         response.reset();   
    14.         ByteArrayOutputStream ba = new ByteArrayOutputStream();   
    15.         try {   
    16.             /* 打开已经定义好字段以后的pdf模板 */  
    17.             String TemplatePDF = getServletContext().getRealPath(".")   
    18.                     + "testEx.pdf";   
    19.             PdfReader reader = new PdfReader(TemplatePDF);   
    20.   
    21.             /* 将要生成的目标PDF文件名称 */  
    22.             PdfStamper stamp = new PdfStamper(reader, ba);   
    23.   
    24.             PdfContentByte under = stamp.getUnderContent(1);   
    25.   
    26.             /* 使用中文字体 */  
    27.             BaseFont bf = BaseFont.createFont("STSong-Light""UniGB-UCS2-H",   
    28.                     BaseFont.NOT_EMBEDDED);   
    29.             Font FontChinese = new Font(bf, 12, Font.NORMAL);   
    30.   
    31.             /* 取出报表模板中的所有字段 */  
    32.             AcroFields form = stamp.getAcroFields();   
    33.   
    34.             /* 为字段赋值,注意字段名称是区分大小写的 */  
    35.             form.setField("name""lixy");   
    36.             form.setField("age""26");   
    37.   
    38.             stamp.setFormFlattening(true);   
    39.             /* 必须要调用这个,否则文档不会生成的 */  
    40.             stamp.close();   
    41.         } catch (DocumentException de) {   
    42.             de.printStackTrace();   
    43.             System.err.println("A Document error:" + de.getMessage());   
    44.         }   
    45.         response.setContentType("application/pdf");   
    46.         /* 如果想出来让IE提示你是打开还是保存的对话框,加上下面这句就可以了 */  
    47.         // response.setHeader("Content-disposition","attachment; filename="  
    48.         // +"report.pdf" );   
    49.         response.setContentLength(ba.size());   
    50.         try {   
    51.             ServletOutputStream out = response.getOutputStream();   
    52.             ba.writeTo(out);   
    53.             out.flush();   
    54.             out.close();   
    55.             ba.close();   
    56.         } catch (IOException e) {   
    57.             e.printStackTrace();   
    58.             System.err.println("A Document error:" + e.getMessage());   
    59.         }   
    60.     }   
    61. }  

    展开全文
  • 为了一劳永逸(更好的偷懒),做了一个简历修改的页面,将简历信息保存到数据库同时使用html2canvas 和 jspdf导出PDF,但是在导出PDF时却发现文本内容在分页部分被直接截断,经过查阅资料没找到匹配的结果,于是就...

    一、前言

    个人网站上线了,欢迎大家访问 苏浩的个人博客

    使用的第三方:html2canvasjspdf

    为了一劳永逸(更好的偷懒),做了一个简历修改的页面,将简历信息保存到数据库同时使用html2canvasjspdf导出PDF,但是在导出PDF时却发现文本内容在分页部分被直接截断,经过查阅资料没找到匹配的结果,于是就自己想办法解决吧。

    二、正文

    首先是导出PDF的工具方法,直接修改Vue的原型方便调用

    Vue.prototype.getPdf = function(id, title) {
    	html2Canvas(document.querySelector(`#${id}`), {
    		useCORS: true //看情况选用上面还是下面的,
    	}).then(function(canvas) {
    		let contentWidth = canvas.width
    		let contentHeight = canvas.height
    		let pageHeight = contentWidth / 592.28 * 841.89
    		let leftHeight = contentHeight
    		let position = 0
    		let imgWidth = 595.28
    		let imgHeight = 592.28 / contentWidth * contentHeight
    		let pageData = canvas.toDataURL('image/jpeg', 1.0)
    		let PDF = new JsPDF('', 'pt', 'a4')
    		if (leftHeight < pageHeight) {
    			PDF.addImage(pageData, 'JPEG', 0, 0, imgWidth, imgHeight)
    		} else {
    			while (leftHeight > 0) {
    				PDF.addImage(pageData, 'JPEG', 0, position, imgWidth, imgHeight)
    				leftHeight -= pageHeight
    				position -= 841.89
    				if (leftHeight > 0) {
    					PDF.addPage()
    				}
    			}
    		}
    		PDF.save(title + '.pdf')
    	})
    }
    
    

    需要打印的结构是这样的,多个子组件

    <div id="preview">
    		<!-- 头 -->
    		<resume-header id="resume-header"></resume-header>
    		<!-- 基本信息 -->
    		<basic-info :userInfo="resume.userInfo" class="p40" id="resume-info" style="padding-top:40px;"></basic-info>
    		<!-- 教育背景 -->
    		<education class="p40" id="education"></education>
    		<!-- 项目经历 -->
    		<project :project="resume.project" class="p40" id="project"></project>
    		<!-- 实习经历 -->
    		<practice :practice="resume.practice" class="p40" id="practice"></practice>
    		<!-- 工作经历 -->
    		<work :work="resume.work" class="p40" id="work"></work>
    		<!-- 技能 -->
    		<skill :skill="resume.skill" class="p40" id="skill"></skill>
    		<!-- 自我评价 -->
    		<self-introduction :selfIntroduction="resume.selfIntroduction" class="p40" id="self"
    			style="padding-bottom:40px;"></self-introduction>
    	</div>
    

    1. 最初思路

    思路:定义一个DOM容器,遍历所有需要打印的节点,并逐个添加到这个DOM容器内,每次添加之前先判断这个添加进去后是否会超出一页的高度,如果没超出,则添加进去,否则证明快到一页的结尾了,则当前页剩余部分填充一个空白div。

    这个思路比较简单,贴一段伪代码吧

    function printPDF() {
        let children = document.getElementById("你需要打印的dom节点").children;
        let box = document.createElement("div"); // 存放dom的容器
        const pageHeight = 1500; // 一页的高度
        let height = 0; // box中已经添加节点的总高度
        for(let i=0; i<children.length; i++) {
            let node = children[i];
            if(node.offsetHeight + height < pageHeight) {
                // 添加这个节点仍不会超出一页高度
                height += node.offsetHeight;
                box.appendChild(node.cloneNode(true)); // 这里使用cloneNode时为了防止将原有dom移除
            } else {
                // 加入这个节点后高度超出一页,这页剩余部分填充一个空白div
                let empty = document.createElement("div");
                empty.style.height = pageHeight - height; // 这页剩余高度
                box.appendChild(empty);
                height = 0; // 填充了空白后,这页就结束了,因此重置height
            }
        }
        // 调用导出pdf方法,这里省略
    }
    

    2. 改进思路

    经过尝试,确实会准确分页,也不会裁断,但是发现个问题,如果有个dom节点很高,几乎占据了一页,哪怕第一页只有少量内容,也会填充一大片空白,看起来很不友好。

    原因很简单,因为在循环时,这个节点加进去后会超出一页高度,所以剩余部分默认填充了空白div,也就是上面代码循环中else部分。

    改进方法,在else分支中判断剩余节点,看看剩余节点中是否有节点可以放置到当前页中,如果有,则添加到当前页中,如果没有,只能填充空白了(或者将子节点拆分成多个更小的节点也可以)

    思路:

    第一步:维护一个数组printOrderArr,保存需要往dom容器中追加节点的顺序(包括填充),遍历思路和上面一样,不过改进了超出当前页的判断,如果超出当前页,先在剩余节点中查找是否有其余节点可以添加进来,如果实在没有在填充空白。

    第二步:遍历printOrderArr,如果当前遍历对象不是空白填充,则在子节点children中查找对应节点添加到容器中,否则填充空白。

    第三步:打印容器中的内容

    function exportPDF() {
    	let dom = document.getElementById("preview");
    	// 获取所有子节点
    	let children = dom.children[0].children;
    	// 维护一个数组,保存每个子节点的id和高度,代替children进行增删改查操作
        // 由于dom节点数组不是数组,因此通过call进行遍历
    	let data = Array.prototype.map.call(children, item => {
    		return {
    			id: item.id,
    			height: item.offsetHeight
    		}
    	})
    	let domHeight = 0;
    	// 预计算,根据每个节点的高度生成一个数组,遍历数组将对应dom保存到待打印dom中
    	let printOrderArr = [];
    	// 头部、个人信息、教育背景优先打印
    	for (let i = 0; i < 3; i++) {
    		printOrderArr.push({
    			id: data[i].id,
    			isEmpty: false
    		})
    		domHeight += data[i].height
    	}
    	data.splice(0, 3);
    	// 遍历所有子节点
    	while (data.length) {
    		// 每一次处理第一个节点
    		const nodeHeight = data[0].height;
    		// 判断当前节点是否能加入到数组中
    		if ((domHeight + nodeHeight) < this.pageHeight) {
    			printOrderArr.push({
    				id: data[0].id,
    				isEmpty: false
    			})
    			domHeight += nodeHeight;
    			// 删除当前元素
    			data.splice(0, 1);
    		} else {
    			// 当前页剩余空白高度
    			const lastHeight = this.pageHeight - domHeight;
    			// 保存可以填充空白的板块
    			let node;
    			for (let j = 0; j < data.length; j++) {
    				if (data[j].height < lastHeight) {
    					node = data[j];
    					data.splice(j, 1);
    				}
    			}
    			// 如果有其他模块可以填充剩余空白部分
    			if (node) {
    				printOrderArr.push({
    					id: node.id,
    					isEmpty: false
    				});
    				domHeight += node.height;
    			} else {
    				// 剩余所有模块都无法填充剩余的那块空白
    				printOrderArr.push({
    					height: lastHeight,
    					isEmpty: true
    				})
                     // 当前页已经填充了空白,重置domHeight,开始下一页
    				domHeight = 0;
    			}
    		}
    	}
        // dom节点的容器
    	let pdfDom = document.createElement("div");
    	pdfDom.id = "pdf";
        // 循环加入到容器中
    	for (let i = 0; i < printOrderArr.length; i++) {
    		let node = printOrderArr[i];
            // 判断是否是填充的空白div
    		if (!node.isEmpty) {
                // 通过id获取到子节点中对应节点,通过遍历查找也是可以的
    			let dom = Array.prototype.filter.call(children, item => item.id == node.id)[0];
    			pdfDom.appendChild(dom.cloneNode(true));
    		} else {
    			let empty = document.createElement("div");
    			empty.className = "empty";
    			empty.style.height = node.height + 'px';
    			pdfDom.appendChild(empty);
    		}
    	}
    	let container = document.getElementsByClassName("resume-container")[0];
    	container.appendChild(pdfDom);
    	this.getPdf("pdf", "测试打印");
    	container.removeChild(pdfDom)
    },
    

    经过改进后,打印出来的效果好多了,至少不会出现大片的空白了,因为我的节点都是整体存在,才会出现这个情况,如果子节点不是整体,则第一种方法也可以

    三、总结

    做完这个功能突然意识到这个解决思路好像和leetcode中的一道题很像,逐渐明白算法并不是离我们很远。

    程序 = 算法+ 数据结构绝不是书本空谈,这个需求中printOrderArr就是数据结构的体现,思路就是算法,合在一起就是一个程序。前辈们将业务抽离出去,只保留算法,就是为了让我们学明白算法再来更好的写程序,然而往往很多人不愿意了解算法,我亦如此。

    展开全文
  • 前端开发的朋友们可能会遇到这个需求:将您负责开发的网页的全部内容,包括文字和图片,一起保存成一个PDF文件。如果采用屏幕截图的话,默认Windows操作系统的截图按钮无法完整截取超过一屏幕的屏幕内容。 我在网上...

    前端开发的朋友们可能会遇到这个需求:将您负责开发的网页的全部内容,包括文字和图片,一起保存成一个PDF文件。如果采用屏幕截图的话,默认Windows操作系统的截图按钮无法完整截取超过一屏幕的屏幕内容。

    我在网上找了一段时间,搜集到了一些解决方案,在这里分享给广大程序员。

    这个解决方案包含了两个步骤,将前端页面转化为PDF:

    1. 遍历当前网页的DOM结构,收集所有DOM树上每个节点的元素信息及相应样式,渲染出canvas图像。这个遍历和渲染操作封装在脚本文件html2canvas.js里。

    2. 利用一个开源的JavaScript库,jsPDF,在浏览器端用JavaScript生成PDF文件。PDF的生成逻辑封装在脚本文件jsPdf.debug.js里。

    看看如何在您的前端网页里使用这两个JavaScript文件。

    下面是网页内容:

    在这里放一段很长很长的文件,能观察到最后生成的PDF会自动分页。。。。

    在您的前端页面里画一个按钮,用于触发将当前网页保存成PDF文件的事件。

    保存整个网页成PDF

    HTML转PDF的代码如下:

    如果想下载可以复制粘贴的代码文本,可以到这个链接下载。https://github.com/linwalker/render-html-to-pdf

    下面可以看看这个解决方案的效果。

    点这个按钮:

    这是用JavaScript生成的PDF文件在本地打开的效果:

    可以看到PDF中的翻页没有任何问题。

    大家如果想自己体验一下通过JavaScript进行HTML转PDF的效果,可以试试我的demo:http://i042416.github.io/FioriODataTestTool2014/WebContent/092_html2pdf.html

    这个解决方案最初是一位叫linwalker的程序员设计的,下面是他的github链接:

    https://github.com/linwalker/render-html-to-pdf

    要获取更多Jerry的原创技术文章,请关注公众号”汪子熙”或者扫描下面二维码:

    展开全文
  • 前端导出多页pdf 带目录 页眉 页脚及页码

    千次阅读 热门讨论 2018-08-23 10:05:05
    前段时间公司发布新需求,要求用户点击按钮可以导出pdf或者html到本地,pdf中要包含可点击跳转的目录,要分页记录页码,还有页眉和页脚,和后台的小哥哥配合试了好多方法,最终完成的效果还不错,在这里做个记录。...
  • 针对POI3.9jar包中的相关工具类HSSF,XSSF,SXSSF的理解,以及PDF实现循环写入及分页的实现 需求如下: 根据接口传递的相关数据,导出一定样式(合并行列,上色,加粗,循环写入)的表格,行数视数据量多少而定 ...
  • 前面一篇文章用Python抓取某大V的公众号文章由于做的时间比较仓促还留下了几个问题:分页的时候出现了数据重复,什么时候爬取完了数据,根本不知道那些文章是原创,那些文章非原创还没有标记把公众号文章转存到本地....
  • JS 实现web页面下载为pdf文件,无需和后台交互,解决下载清晰度...这次开发项目时,甲方服务器没有打印机,要求加的功能,自己费了很多时间收集资料研究,最后集成的代码;方便以后使用。希望对有需要的小伙伴有帮助。
  • 在这里我主要讲述实现思路及方法,原理大家可以自行百度,写此文章主要是网上的很多实现方案都不能很好的支持高清放大及分页。首先:引入三个js插件,请自行上网百度下载,注意html2canvas.js版本太高会出现Promise...
  • 在过去合并PDF页面内容是比较麻烦的事情,通常需要使用Word合并...Windows版万兴PDF是专门为PDF开发的一款PDF编辑器,对于PDF文件的用户来说,用万兴PDF不仅可以大大提高日常的工作效率,而且它可以帮助用户解决很多.
  • 公众号文章转存到本地的效果图友情提示: 所有的抓包操作,请用自己的微信小号来操作,我不知道官方会不会有封号操作,反正小心使得成年船!分页的时候数据出现了重复我发现这里返回...
  • 想要将PDF文件进行拆分其实也算比较简单的一件事,但是如果我们没有一个好的工具的话,再简单的是我们也操作不好,想要将PDF文件进行页面的拆分一般都是利用比较专业的PDF编辑器去对它进行操作,小编一般的候想要对...
  • html页面导出为pdf(jsPDF、iText、wkhtmltopdf)

    万次阅读 多人点赞 2018-03-29 23:38:17
    html页面导出pdf,本来是一件简单的事情,在浏览器直接打印(Mac快捷键为⌘+p;Windows快捷键为ctrl+p),就可以把页面另存为pdf文件,但对于要经常把页面导出为pdf的用户来说并不友好。 调研了几种html导出pdf的...
  • 很多实用PDF文件的人都会对PDF页面拆分感到很烦恼,也就是因为PDF文件不可以直接进行编辑,其实想要进行PDF文件页面拆分就可以使用到迅捷PDF编辑器,下面小编就为大家操作一下PDF编辑器如何拆分PDF页面。 操作软件...
  • 前端html导出为pdf文档,且图表不被分页分割

    千次阅读 热门讨论 2019-09-17 15:25:21
    由于项目需要前端导出文档,一开始是准备导出word,后来发现导出word比较麻烦,并且前端基本都是由echarts和dataTable组成的,不好导出,最后改为导出为pdf,采用的是jsPDF和html2canvas 一、先引入html2canvas和...
  • 如何将在线电子书保存pdf格式

    千次阅读 2018-08-09 22:39:00
    网上有很多免费的在线电子书籍,没有pdf格式,不方便离线阅读,也不方便做记录,所以找了几个将在线内容制作成pdf文件的方法。 一、如果网站上的书籍内容没有分页,所有内容都直接显示出来了,最简单,直接将打印机...
  • 相较Word文档,PDF格式更稳定,占用空间小,所以将Word转成PDF是一种比较好的文档保存处理方式,而且操作也非常简单。但有时转换后的PDF出现一些空白是什么原因呢?原因一:Word文档本身有空白如果Word文档中...
  • web打印自动分页,生成PDF。内容满了,自动换页。bookjs-eazy 转自:https://www.zhouwuxue.com 预览案例 eazy-2.html 另一个小说案例 除了自动分页,打印页码。还可以生成目录 使用方式: 配置页面参数...
  • PDF文件怎么拆分页面

    2019-05-24 14:32:44
    一个文件有很多页面,一个页面有很多的内容,重要的内容很少是整个文件整个页面,所以我们有时候文件的其中一部分内容,页面的一部分内容的时候我们需要拆分文件或页面,那么具体的操作是什么样呢?今天就以PDF文件...
  • Word转出来的PDF为什么有空白

    千次阅读 2020-03-12 15:12:47
    相较Word文档,PDF格式更稳定,占用空间小,所以将Word转成PDF是一种比较好的文档保存处理方式,而且操作也非常简单。但有时转换后的PDF出现一些空白是什么原因呢? 原因一:Word文档本身有空白 如果Word文档中...
  • Hi,大家好,我是麦洛,最近项目中遇到了将html页面导出为pdf文件,现在将相关内容...对比两种方式,明显第一种方式优越性更好。即方便实现,又避免了由于页面的变动而需要改动导出功能代码的尴尬 方案调研 查阅了一些.
  • 利用TCPDF将html页面转换为PDF格式

    万次阅读 2017-06-29 20:57:49
    官网提供了几十个示例以及说明文档,下载解压后一定要注意文件路径,如何使用TCPDF,可以从以下5个步骤完成: ...3、设置PDF文档的格式,包括文档信息、页眉、页尾、字体、外间距、图片边框、分页等; 4、导
  • 因为项目需要,找了一个不错的打印页面导出为PDF或者Word的jQuery插件 使用起来也简单 这里我使用到的jQuery版本为:jquery-1.4.4.min.js 插件版本:jquery.jqprint-0.3.js 这里我用一个简单的列子来实现打印一个...
  • ↑点击上方 “凹凸数据”关注 + 星标~每天更新,大概率是晚9点大家好,我是黄同学发现很多读者对python自动化办公(python操作Excel、Word、PDF)的文章都...
  • javascript将html下载并保存pdf文件

    千次阅读 2018-08-17 23:12:48
    简介 ...但这并不是真的截图,而是通过遍历页面DOM结构,收集所有元素信息及相应样式,渲染出canvas image。...但它不需要服务器参与,整个图片都由客户端浏览器生成,使用方便。 使用使用的API...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 6,095
精华内容 2,438
关键字:

很多页的pdf分页保存