- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在使用 jspdf 将 html 转换为 pdf。我正在使用 addHTML 方法将 html 页面转换为 pdf
var htmlSource = $('#body')[0];
function crate (){
var pdf = new jsPDF('p','px');
pdf.addHTML(
htmlSource,10, 10, {pagesplit: true, margin: {top: 10, right: 10,bottom: 10, left: 10, useFor: 'page'}},
function(dispose){
pdf.save('datapdf.pdf');
}
);
我想在所有页面上添加页眉和页脚,或者为页眉和页脚留出空白。但是使用选项我只能在pdf的第一页留下标题空间。
最佳答案
一种方法可能是在客户端浏览器中重新填充 html 页面呈现,以便完全按照您希望在 pdf 中打印的方式显示它(然后只需使用您刚刚在上面创建的函数),因此以组合格式显示通过一系列垂直元素,如 h、p1、f、h、p2、f、h、p3、f 等(其中 h=页眉,p1 ... pn 是页面,f=页脚)而不是一系列包含只是 h, p1, p2, p3, ... , pn, f(现在是这样)。
这意味着您可以访问 html 页面的源代码(因此它不仅仅是从互联网上获取的页面),因为如果它是外部资源,则页眉和页脚的尺寸可能是以编程方式构建的还填充与页面其他元素相关的空间(我认为这里的 flex/垂直应用/或呈现网页的网格技术)。
另一方面,如果要执行此方法,可能内容拆分并不总是可行的(我在这里不考虑销毁表格或其他仅在使用滚动时可见的多页元素),但是渲染也可能会考虑页面的垂直显示(与桌面中的横向模式相反),以便重新绘制页面中的元素。有时这会使页脚和页眉变大,所以我不确定您为什么要通过这样做来花费最终打印页面的部分宝贵 Assets 。 (解决方案可能是打开一个新窗口,从而以新格式重新呈现页面,甚至可能在现有页面后面,然后在关闭相应页面之前启动打印确认/或下载文件。)
另一种方法是更改函数以便使用页面的虚拟渲染(无显示页面)- 通过对您的函数进行更改而不是渲染本身。
但是,第二种方法也存在一些挑战。最初,在声明变量 'var pdf' 时,它被创建为一个唯一的数据存储容器,然后将构造函数分配给它( var pdf = new jsPDF('p','px'); )。但是,在下一步中,您将向其添加一个 HTML 内容 (pdf.addHTML),它是单个元素,而不是多个实体。您应该更改函数以使其打印一个数组,您首先根据呈现的页面尺寸计算元素。
也许代码会变成这样:
var fullpage, onepage, headd, foott, edges, contentt, he, fo, c, pages;
fullpage = document.body.scrollHeight; // height of all html page (not just the visible content)
onepage = 1200; // height of each single page printed in pdf - in pixels
headd = document.getElementById("header");
he = headd.offsetHeight;
foott = document.getElementById("footer");
fo = foott.offsetHeight;
edges = he + fo;
contentt = onepage - edges; // height of content of each page printed
pages = [0]; // start to work with first page which obviously is there
fullpage -= onepage; // remove height of first printed page (containg both header and footer)
pdf.addHTML( // create first page of pdf file
htmlSource, 10, 10, {pagesplit: true, margin: {top: 10, right:
10, bottom: 10, left: 10, useFor: 'page'}},
function(dispose){
pdf.save('datapdf.pdf');
}); // this is your code
var i = 0; // start the counter
while(fullpage > 0) { // start adding header + footer to remaining pages
fullpage += edges; // if there is still a page 2...n we add edges, etc.
i++;
pages[i] = content(onepage) { // here you must insert the code for harvesting the n-st page content from your source code
return htmlSource;
}
function addPages(i) {
var eachpdf = "datapdf" + i + ".pdf";
// <= here goes again your code, with a small change
// pagesplit: false - instead of true, in order to speed the process, and also
// pdf.save(eachpdf); - instead of pdf.save('datapdf.pdf');
}
}
你试图实现的是创建一个系列 he, p1, fo, he, p2, fo, he, p3, fo, etc(其中 he=header, p1 ... pn 是上面的页面/命名为 datapdfi/和 fo=footer) 而不是仅包含 h、p1、p2、p3、...、pn、f 的系列。
这意味着您必须构建一个包含单独的 pdf 页面的数组,如上面的代码所述。
我还没有为您创建用于分隔每个页面内容的代码(它可能会返回 htmlSource),但是这严格依赖于您的页面呈现方式。
关于javascript - 如何使用 addHTML 方法在 jsPDF 中的所有 PDF 页面上添加页眉和页脚,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49854127/
我创建了一个用户可以添加测试的字段。这一切运行顺利我只希望当用户点击(添加另一个测试)然后上一个(添加另一个测试)删除并且这个显示在新字段中。 所有运行良好的唯一问题是点击(添加另一个字段)之前添加另
String[] option = {"Adlawan", "Angeles", "Arreza", "Benenoso", "Bermas", "Brebant
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a softwar
我正在努力将 jQuery 滚动功能添加到 nav-tab (Bootstrap 3)。我希望用户能够选择他们想要的选项卡,并在选项卡内容中有一个可以平滑滚动到 anchor 的链接。这是我的代码,可
我正在尝试在用户登录后再添加 2 个 ui 选项卡。首先,我尝试做一个之后。 $('#slideshow').tabs('remove', '4'); $("#slideshow ul li:last
我有一个包含选择元素的表单,我想通过选择添加和删除其中一些元素。这是html代码(这里也有jsfiddle http://jsfiddle.net/txhajy2w/):
正在写这个: view.backgroundColor = UIColor.white.withAlphaComponent(0.9) 等同于: view.backgroundColor = UICo
好的,如果其中有任何信息,我想将这些列添加到一起。所以说我有 账户 1 2 3 . 有 4 个帐户空间,但只有 3 个帐户。我如何创建 java 脚本来添加它。 最佳答案 Live Example H
我想知道是否有一种有效的预制算法来确定一组数字的和/差是否可以等于不同的数字。示例: 5、8、10、2,使用 + 或 - 等于 9。5 - 8 = -3 + 10 = 7 + 2 = 9 如果有一个预
我似乎有一个卡住的 git repo。它卡在所有基本的添加、提交命令上,git push 返回所有内容为最新的。 从其他帖子我已经完成了 git gc 和 git fsck/ 我认为基本的调试步骤是
我的 Oracle SQL 查询如下- Q1- select hca.account_number, hca.attribute3, SUM(rcl.extended_amou
我正在阅读 http://developer.apple.com/iphone/library/documentation/iPhone/Conceptual/iPhoneOSProgrammingG
我正在尝试添加一个“加载更多”按钮并限制下面的结果,这样投资组合页面中就不会同时加载 1000 个内容,如下所示:http://typesetdesign.com/portfolio/ 我对 PHP
我遇到这个问题,我添加了 8 个文本框,它工作正常,但是当我添加更多文本框(如 16 个文本框)时,它不会添加最后一个文本框。有人遇到过这个问题吗?提前致谢。 Live Link: JAVASCRIP
add/remove clone first row default not delete 添加/删除克隆第一行默认不删除&并获取正确的SrNo(例如:添加3行并在看到问题后删除SrNo.2)
我编码this ,但删除按钮不起作用。我在控制台中没有任何错误.. var counter = 0; var dataList = document.getElementById('materi
我有一个类似数组的对象: [1:数组[10]、2:数组[2]、3:数组[2]、4:数组[2]、5:数组[3]、6:数组[1]] 我正在尝试删除前两个元素,执行一些操作,然后将它们再次插入到同一位置。
使用的 Delphi 版本:2007 你好, 我有一个 Tecord 数组 TInfo = Record Name : String; Price : Integer; end; var Info
我使用了基本的 gridster 代码,然后我声明了通过按钮添加和删除小部件的函数它工作正常但是当我将调整大小功能添加到上面的代码中时,它都不起作用(我的意思是调整大小,添加和删除小部件) 我的js代
title 323 323 323 title 323 323 323 title 323 323 323 JS $(document).keydown(function(e){
我是一名优秀的程序员,十分优秀!