公司内部应业务需求,需要将html生成pdf并能打印,前后台都各有方式,这里综合比较选择用java去生成,避免了前端生成带来的诸多问题,后台用的框架是 iTextPdf
但是在做的同时发现用iText实现的pdf生成和公司的业务需要生成的pdf有些差距,在这里遇到的问题是生成的目录、目录页码及点击目录超链接到对应的内容页
有三个问题需要解决

1、生成目录

这里是java循环生成的,这里没什么可记录的

2、目录页码

java同学在这里遇到的问题是没法去生成目录,可能后台插件不到位或者写法有问题,话不多说,上干货
有几个重点需要了解的css
@page,counter(page),target-counter

2.1 @PAGE 规则
@page规则允许你指定页面盒子的许多方面。例如,你想要指定页面尺寸。下面这条规则指定默认页面尺寸是5.5*8.5英尺

@page {size: 5.5in 8.5in;
}

除了可以用长度值声明尺寸,你还可以使用纸质尺寸关键字,例如"A4"或““legal”。

@page {size: A4;
}

你也可以使用关键字来指定页面方向 - ““portrait””或“landscape”。

@page {size: A4 landscape;
}

2.2 页面模块

2.2.1页面左边距和右边距
页面模块的另一方面是它定义了伪类选择器来选择文档的偶数或奇数页。

@page :left {margin-left: 3cm;
}
@page :right {margin-left: 4cm;
}

规则还定义了两个伪类选择器。:first选择器选中是文档的第一页。

@page :first {}

:blank伪类选择器选中任何“故意左侧留白”的页面。要添加这样的文字,我们可以使用目标是边距盒顶部中心的生成内容。

@page :blank {@top-center { content: "This page is intentionally left blank." }
}

生成内容和页面媒体

@page:right{ @bottom-left {margin: 10pt 0 30pt 0;border-top: .25pt solid #666;content: "My book";font-size: 9pt;color: #333;}
}

2.2.1分页符
要强制标题总是处于页面开头,把page-break-before设置为always。

h1 {page-break-before: always;
}

为了避免标题后立即断页,使用page-break-after。

h1, h2, h3, h4, h5 {page-break-after: avoid;
}

为了避免断开图像和表格,使用page-break-inside属性

table, figure {page-break-inside: avoid;
}

2.2.3计数器

@page:right{@bottom-right {content: counter(page);}
}
@page:left{@bottom-left {content: counter(page);}
}

我们还创建了一个叫做pages的计数器。这个计数器的值总是文档总页数

@page:left{@bottom-left {content: "Page " counter(page) " of " counter(pages);}
}

你可以创建自己命名的计数器和增量并且按需要重置它们

body {counter-reset: chapternum;
}
h1.chapter:before {counter-increment: chapternum;content: counter(chapternum) ". ";
}

通常给图像计数的方法是使用chapternum.figurenum。所以“Figure 3-2”代表第三章第二幅图。在h1里,我们可以重置figurenum让它每章都从1开始。

body {counter-reset: chapternum figurenum;
}
h1 {counter-reset: figurenum;
}
h1.title:before {counter-increment: chapternum;content: counter(chapternum) ". ";
}
figcaption:before {counter-increment: figurenum;content: counter(chapternum) "-" counter(figurenum) ". ";
}

2.2.4设置字符
我们在想要获取内容的选择器中使用string-set属性来实现,这将成为h1。string-set的值是你想给这段内容取得名字然后使用content()。随后你可以用string()作为生成内容输出。

h1 { string-set: doctitle content();
}
@page :right {@top-right {content: string(doctitle);margin: 30pt 0 10pt 0;font-size: 8pt;}
}

当你的页面媒体生成后,每当出现h1,内容被写入doctitle然后输出到右侧页的右上边距盒中,只有当另一个h1出现才发生改变。

2.2.5target-counter
target-counter,添加这些数字。在文档中创建链接时,赋予它们href,值为你想要标记的文档中的元素的ID。此外,增加一个类来识别它们是交叉引用,而不是一个外部链接;我用xref

<a class="xref" href="#ch1" title="Chapter 1">Chapter 1</a>
a.xref:after {content: " (page " target-counter(attr(href, url), page) ")";
}

3、自测打印

可以安装price:https://www.princexml.com/doc/installing/#installing-a-license-file-on-windows
安装完成之后可以到price的执行exe,prince xxx.html即可

参考链接:https://blog.csdn.net/weixin_33851604/article/details/93645760

css3对页面打印设置的一些特殊属性,如@page,target-counter等相关推荐

  1. Java操作Excel之POI:java读写excel文件以及打印设置

    Java操作Excel之POI:java读写excel文件以及打印设置 POI的jar包下载地址:http://poi.apache.org/download.html 注意:项目中导入poi 4.0 ...

  2. 网页打印问题,打印设置,打印预览,打印分页,纵打,横打及页面的边距

    1.控制"纵打". 横打"和"页面的边距 (1) <object  id="factory"  style="display ...

  3. 自动化办公之excel教程(8):单变量求解,规划求解,页面布局,打印设置

    一.单变量求解 原始表格,我们的任务就是根据想要的利润,反推销售额 第一步:单击利润单元格,数据选项卡,单变量求解 注意事项,目标单元格必须有公式来啦.单变量求解,相当于自动帮我们根据公式计算各值.本 ...

  4. jq jqprint 设置页脚_jQuery 插件 jqprint 实现浏览器页面打印和设置页眉页脚

    使用 jqprint 插件实现浏览器页面打印,需要用到两个js文件,jquery.js 和 jqprint.js,本文使用 jquery-1.4.4.min.js,jquery.jqprint-0.3 ...

  5. jsp 页面打印 纵向横向设置

    jsp页面打印-JS打印设置 技术 2010-04-07 13:14:11 阅读139 评论0 字号:大中小订阅 重点: <OBJECT id=WebBrowser classid=CLSID: ...

  6. 【五】页面和打印设置

    一.前言 前文对布局视图和布局视图工具做了相关介绍,当我们需要进行出图需要由数据视图切换到布局视图,那么前文介绍的两种视图切换方式,其实还有一种方式进行切换. 同样可以切换布局和数据视图. 本节课程主 ...

  7. php设置加载动画,如何用CSS3制作页面圆圈加载动画(附代码)

    打开页面时,经常会遇到页面正在加载的情况,作为一个前端工程师,你知道如何用CSS3实现页面加载动画效果吗?这篇文章就和大家分享一个炫酷的圆圈加载动画效果的代码,有一定的参考价值,感兴趣的朋友可以看看. ...

  8. HTML页面打印功能js代码,JavaScript_js实现页面打印功能实例代码(附去页眉页脚功能代码),复制代码 代码如下: html - phpStudy...

    js实现页面打印功能实例代码(附去页眉页脚功能代码) 复制代码 代码如下: @media print{ .print {display:block;} .notPrint {display:none; ...

  9. CSS3与页面布局学习笔记(四)——页面布局大全(负边距、双飞翼、多栏、弹性、流式、瀑布流、响应式布局)

    一.负边距与浮动布局 1.1.负边距 所谓的负边距就是margin取负值的情况,如margin:-100px,margin:-100%.当一个元素与另一个元素margin取负值时将拉近距离.常见的功能 ...

最新文章

  1. qt命令行程序启动外部进程_QT之程序打包发布
  2. Composer 安装(一)
  3. Int 10 中断功能 详解
  4. TCP和UDP是否可以绑定同一端口进行通信
  5. perf之sched
  6. a标签href不跳转_[网页编程]-06 HTML5 超链接标签
  7. 安装完kali应该做的基本配置
  8. nginx负载均衡的5种策略(转载)
  9. 教你100%成功安装Mathcad15
  10. Class文件 反编译成 Java文件
  11. CentOs解压缩命令
  12. STM32物联网套件基础版03-控制继电器
  13. Go语言核心之美 2.3-复数
  14. 玩家交互体验—剑网3聊天系统
  15. 程序员薪酬高达 462 万元:是怎么回事?
  16. 你知道怎么在solidworks工程图中插入表格吗?
  17. Windows PowerShell 实战指南-附录(复习实验)-实验回顾1
  18. Apache Spark 3.0 结构化Streaming流编程指南
  19. 任意多边形的面积公式
  20. el-dialog对话框重新打开后数据遗留问题

热门文章

  1. 广播风暴原因可能及排除方法
  2. PKI技术原理(收集 整理 归纳)
  3. Widget原理分析
  4. 联想服务器报错“传感器ME Status已从不太严重状态转换至紧急状态”
  5. python pyecharts用法_pyecharts的简单使用
  6. pku1036Gangsters Dp
  7. 2018-11-16学习笔记 读论文Advantages of high quality SWIR bands for ocean colour processing: Examples from
  8. k8s部署-39-pod有哪几种部署方式呢?能不能回滚版本呢?带你了解。
  9. php 万能仿站--孙琪峥
  10. sap销售发货的流程_外向交货发起的销售流程