首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何将HTML表格转换成精美的PDF

从右到左查看,第一个使用原生浏览器打印功能,第二个使用名为jsPDF开源库,第三个使用另一个名为pdfmake开源库,最后,第四个使用名为DocRaptor付费服务。...这是没有帮助,因为当你忘记任何给定包含什么数据时,你需要返回到第一页。第一页表格底部也有点被切断,因为浏览器试图创建下一页之前尽可能多地挤进内容。...使用pdfmake导出PDF 不是太寒酸!我们可以为表包含样式,这样我们仍然可以复制蓝色标题和条纹表行背景。我们还得到了重复表列标题,以便于跟踪我们每个页面的每个中看到数据。...总体看来,pdfmake 最大优势在于从头开始构建 PDF。例如,如果你想根据某些订单数据生成发票,而你实际并没有 web 应用程序页面上显示发票,那么 pdfmake 将是一个很好选择。...我们可以保留我们漂亮表格样式。表格头和表脚每一页都是重复,表格行数不会被切掉,而且页面四面都有适当大小边距,每个页面的页眉也是重复,每个页面底部页码也是重复

6.8K20
您找到你想要的搜索结果了吗?
是的
没有找到

C#报错——(Winform) 某个线程创建控件不能成为另一个线程创建控件父级

”基于本机 Win32 窗口,而 Win32 窗口从本质而言是单元线程。...STA 模型意味着可以在任何线程创建窗口,但窗口一旦创建后就不能切换线程,并且对它所有函数调用都必须在其创建线程发生。...除了 Windows 窗体之外,.NET Framework 中类使用自由线程模型。有关 .NET Framework 中线程信息,请参见线程处理。...STA 模型要求需从控件非创建线程调用控件任何方法必须被封送到(在其执行)该控件创建线程。...如果您在控件中为大量占用资源任务使用多线程,则用户界面可以背景线程执行一个大量占用资源计算同时保持可响应。 用人话描述为:控件是属于主线程(UI线程),不可以跨线程修改其父级。

3.2K41

合并列,【转换】和【添加】菜单中功能竟有本质差别!

有很多功能,同时【转换】和【添加】两个菜单中都存在,而且,通常来说,它们得到结果是一样,只是【转换】菜单中功能会将原有直接“转换”为新,原有消失;而在【添加】菜单中功能,则是保留原有基础...,“添加”一个新。...但是,最近竟然发现,“合并列”功能,虽然大多数情况下,两种操作得到结果一致,但是他们却是有本质差别的,而且一旦存在空值(null)情况,得到结果将有很大差别。...比如下面这份数据: 将“产品1~产品4”合并到一起,通过添加方式实现: 结果如下,其中空值直接被忽略掉了: 而通过转换合并列方式: 结果如下,空内容并没有被忽略,所以中间看到很多个连续分号存在...我们看一下生成步骤公式就清楚了! 原来,添加里使用内容合并函数是:Text.Combine,而转换里使用内容合并函数是:Combiner.CombineTextByDelimiter。

2.6K30

STL容器分类「建议收藏」

关联容器可以视为关联数组、映射或字典推广,它们保存都是值对偶,给定了其中一个被称为键(key)值,就可以快速访问与其对偶另一个被称为映射值(mapped value)值。...为了改进搜索时间,有些编译器(包括VC2005)增加了4种对应(hash)关联容器类型: n hash_set(散集)(对应于hash_set类,定义(散映射)(对应于hash_map类,定义头文件中) n hash_multimap(散多映射)(对应于hash_multimap...除了内置数组外,STL中似容器有3种: n string(串)—— 是实例化模版类basic_string类型定义typedef(另一个常用wstring类,则是实例化模版类...(对应于valarray类,定义头文件中); n bitset(位集)—— 是标志位字段扩展,它通过提供在N个二进制位集合(下标0~N-1)各种操作,

70410

深入在线文档系统 MarkDownWordPDF 导出能力设计

_rels: 通常会存在.rels文件,用以保存各个Part之间关系,用来描述不同文件之间关联,例如某文本与图片存在关联。...,常用库有pdfkit、pdf-lib、pdfmake等等。...关于pdfmake类型控制是非常松散,我们可以轻松地实现符合要求格式嵌套,当然不合法格式嵌套还是运行时校验,我们可以做是尽可能地将这部分校验提升到类型定义时,例如ContentText实际是不能直接以...ContentImage作为子元素,但是类型定义是允许,我们可以更加严格地定义类似的嵌套关系。...pdfmake是不支持直接生成Outline,所以我们需要借助其他库来实现这个功能,调研了很长时间之后我发现了pdf-lib这个库,可以用来处理已有的pdf文件并且生成Outline。

14210

Note

弱弱看大佬们文章下面激烈讨论。 ? 看来这哥们对关系型数据库有很大怨念啊,像我这样弱鸡,让用哪个就用哪个,反正都不会用。 ?...1) 1–1 如果有另一个名为product_details表,并连接具有一对一关系产品,如图所示,该怎么办? ?...要实现1-n关系,只要确保不超过ROW与同一产品关系,技术就与1-1关系相同。...创建一个外健 要将产品子表supplierID外键添加到供应商父表: product表中添加INT类型supplierID 设置现有记录所有supplierID 将supplierID...大概了解了关于表之间关联,不过对于数据库啥缓存什么,还是暗中观察吧,明天把剩下sql看完,又可以看其他了,嘎嘎,真是啥都不会,回家洗洗睡咯。 ■ ■■■■ Basic 基础 数组函数 ?

72820

《学习JavaScript数据结构与算法》-- 5.字典和散列表(笔记)

字典也称作映射、符号表或关联数组计算机科学中,字典经常用来保存对象引用地址。...使用散函数,就知道值具体位置,因此能够快速检索到该值。散函数作用是给定一个键值,然后返回值表中地址。 散列表有一些计算机科学中应用例子。因为它是字典一种实现,所以可以用作关联数组。...有时候,一些键会有相同值,不同散列表中对应相同位置时候,我们称其为冲突。...另一个可以实现比lose lose更好函数是djb2: djb2HashCode(key) { const tableKey = this.toStrFn(key); let hash...另一个区别是:我们实现size方法返回字典中存储值得个数,而ES6Map类则有一个size属性。

77300

2015.5 技术雷达 | 工具篇

我们软件开发领域,盲目地假设网络总是可靠,服务器总是能够快速并正确响应导致了许多失败案例。...它可以帮助我们更优雅测试我们软件处理异常时反应。...Pdfmake是一个可以浏览器里直接生成和打印PDF文档JavaScript库。...使用pdfmake,你可以创建一个支持表、和富样式等结构元素文档,再通过辅助方法创建并打印或者下载为不包含客户端JavaScriptPDF文件 我们经验中,相比其他办法而言,通过一开始创建大量详尽设计图表来开发软件系统...SoundCloud解决生产环境中使用Graphite所遇到困难过程中,开发了Prometheus,它工作方式和Graphite不同,主要体现在其对基于HTTP拉模型支持(尽管它也支持和Graphite

1.2K50

Java漫谈-容器

除了优先级队列,Queue将准确地按照元素被置于Queue中顺序产生它们。 Map 映射表(也称为关联数组基本思想:它维护是键-值(对)关联,因此可以用键来查找值。...使用散目的在于:想要使用一个对象来查找另一个对象。 正确equals()方法必须满足5个条件 1.自反性。对任意x,x.equals(x)一定返回true. 2.对称性。...存储一组元素最快数据结构是数组,所以用它来保存键信息(而不是键本身)。 因为数组不能调整容量,而我们希望Map中保存数量不确定值,如何保证键数量不被数组容量限制?...而是通过键对象生成一个数字,将其作为数组下标,这个数字就是散码,由定义Objcet中、且可能由你覆盖hashCode()方法(计算机科学术语中成为散函数)生成。...如果经常在表中插入或删除元素,LinkedList比较合适(LinkedList还有建立AbstractSequencetialList基础其他功能),否则应该使用速度更快ArrayList。

1.5K10

PHP7数组底层实现示例

PHP 数组具有的特性 PHP 数组是一种非常强大灵活数据类型,讲它底层实现之前,先看一下 PHP 数组都具有哪些特性。...那么这些特性底层是如何实现呢? 这就得从数据结构说起了。 数据结构 PHP 中数组实际是一个有序映射。映射是一种把 values 关联到 keys 类型。...比较 } Bucket; 到这里有个问题出现了:存储散列表里元素是无序,PHP 数组如何做到按顺序读取呢?...对于散冲突有以下 4 种常用方法: 1.将散值放到相邻最近地址里 2.换个散函数重新计算散值 3.将冲突值统一放到另一个地方 4.冲突位置构造一个单向链表,将散值相同元素放到相同槽位对应链表中...此时我们将该元素 key 和要访问键名相比较,发现两者并不相等,则该元素并非我们所想访问元素,而元素 zval.u2.next 保存值正是另一个具有相同散元素对应 arData 数组下标

1.6K20

HashMap你真的了解吗?

这个条目是一个简单键值对,有两个额外数据: 对另一个条目的引用,以便 HashMap 可以存储单链表等条目 表示键哈希值哈希值。...然后,该函数遍历列表以查找具有相同键条目(使用键 equals() 函数)。 get() 情况下,该函数返回与条目关联值(如果条目存在)。...它重新散哈希码以防止来自键错误散函数将所有数据放在内部数组同一索引(存储桶)中 它采用重新散哈希码并使用数组长度(减 1)对其进行位掩码。此操作确保索引不能大于数组大小。...核心 i5-2500k @ 3.6Ghz ,使用 java 8u40 需要超过 45 分钟(我 45 分钟后停止了该过程)。...第 11 个 put() 将非常快,但第 12 个 (160.75) 将重新创建一个新内部数组(及其关联链表/树),新容量为 32。

2.2K30

Linux 查看进程命令 ps 及输出风格参数

例如可用-ef 参数组合,如下图所示:   在上面的列表中,输出信息包括:UID是指启动这些进程用户。PID是指进程ID。...PPID是指:父进程ID(该进程是由另一个进程启动)。 C是指进程生命周期中CUP利用率。 STIME是指进程启动时系统时间。TTY是指进程启动时终端设备。...PRT是指进程优先级(越大数字表越低优先级)。 NT是指谦让度值,用来参与决定优先级。 ADDR是指进程内存地址。 SZ是指假如进程被换出,所需交换空间大致大小。...显示与当前终端关联所有进程 a 显示与任意终端关联所有进程 g 显示所有的进程,包括控制进程 l 采用长模式   ...STAT:代表当前进程状态双字符状态码。 STAT双字符状态码中,第一个字符与UnixS值一样。

3.2K20

.NET中泛型集合

SortedList SortedList是另一个支持排序关联性集合。但是不同地方在于,SortedList实际是将数据存存储在数组。...非关联性泛型集合类 非关联性集合就是不用key操作一些集合类,通常我们可以用元素本身或者下标来操作。FCL主要为我们提供了以下几种非关联泛型集合类。...与字典类似,键集合中必须是唯一——试图添加具有相同键另一个项将失败并抛出异常。...这是衡量散函数生成散值快慢尺度。理论,散函数非常快。但是也应当注意到,散函数并不总是保持 O(1) 时间复杂度。 那么如何来实现散函数呢?基本上有以下两大方法论: 加法和乘法。...关键字得到哈希地址已经有记录,那么就称之为冲突。 2.处理冲突:就是为该关键字记录扎到另一个“空”哈希地址。

16620

Java8编程思想精粹(十)-容器持有对象(下)

TreeSet 将元素存储红-黑树数据结构中,而 HashSet 使用散函数。 LinkedHashSet也使用了散,使用了链表来维护元素插入顺序。...队列并发编程中尤为重要,因为它们可以安全地将对象从一个任务传输到另一个任务。...小结 Java 提供了许多保存对象方法: 数组将数字索引与对象相关联。它保存类型明确对象,因此查找对象时不必对结果做类型转换。它可以是多维,可以保存基本类型数据。...虽然可以在运行时创建数组,但是一旦创建数组,就无法更改数组大小 Collection 保存单一元素,而 Map 包含相关联键值对。...集合不能保存基本类型,但自动装箱机制会负责执行基本类型和集合中保存包装类型之间双向转换 像数组一样, List 也将数字索引与对象相关联,因此,数组和 List 都是有序集合 如果要执行大量随机访问

75410
领券