请教一个关于"HTML 转 pdf"的问题

2020-05-16 19:22:13 +08:00
 allele

最近我们遇到一个项目是:用随机不同的样式去打印 csv 里十几万条少数民族语。 我们的想法是:

  1. .csv中的每一条语句转成.html中的一个<p>
  2. 打印这个.html,得到一个.pdf

现在遇到的问题是:我们需要得到.csv里的每一条item对应的.pdf页数。

举个例子,.csv里的第 1000 条句子,最终打印出来在.pdf的第五十页,那么我们就需要得到一个(1000,50)

现在的困惑是:.html打印成.pdf的过程似乎是一个黑盒。没有办法深入到底层去得知某一个<p>最终会落在哪张页面上。

希望有了解 HTML 打印的同学可以帮忙指个路。

亦或者大家有什么更好的思路来实现这个需求。

————————————————————————————————————————

之所以不去用 python 中的reportlab是因为reportlab对 RTL (从右到左排版)的支持并不好。

3125 次点击
所在节点    程序员
16 条回复
myd
2020-05-16 19:28:17 +08:00
手动控制分页
exip
2020-05-16 19:31:24 +08:00
html 上在哪页 pdf 上不就是在哪页吗?
allele
2020-05-16 19:40:01 +08:00
@myd 手动控制分页的问题在于”你不知道应该隔多少个<p>换一次页“。我们现在的想法就是每隔 20 行强制换页,同时保证字体不要太大。就是想知道有没有我们遗漏的更好的办法。
allele
2020-05-16 19:40:57 +08:00
@exip html 页面是什么意思? html 不是一个很长很长的东西吗?
TimePPT
2020-05-16 19:51:09 +08:00
其实你的需求是纸质打印一本书,带目录索引?
allele
2020-05-16 19:54:14 +08:00
@TimePPT 欸?这个思路很好欸?好像就是要把每一句话都收录到目录里。
dallaslu
2020-05-16 19:54:21 +08:00
做一堆撑满一页的高度的块元素,然后均匀地把内容放进去?
redtea
2020-05-16 19:59:07 +08:00
openhtmltopdf 可以实现,但是用的是 Java 。
allele
2020-05-16 20:04:02 +08:00
@redtea 哇哦~我去看看
967182
2020-05-16 20:12:17 +08:00
html 当然能控制让它分页啊
<div style="page-break-before: always">
<div id=page2 style='position:relative;width:760px;height:1070px;'>
967182
2020-05-16 20:17:13 +08:00
html 转换可以试试 https://wkhtmltopdf.org/index.html 这个工具,效果还不错。
allele
2020-05-16 20:25:09 +08:00
@967182 嗯嗯。能换页我知道,包括我们现在的做法就是每隔 28 个<p>插入一个换页。但是这样的做法终究不美观。
967182
2020-05-16 20:33:27 +08:00
@allele 其实你要做的不就是 PDF 加载到程序中,然后一页一页的循环看有没有符合你条件的数据。
ccraohng
2020-05-16 23:42:48 +08:00
手动分页数据兼容性不好吧。我们用的是 wkhtml 。可以读取 pdf 内容,再匹配查找
xiaoming1992
2020-05-17 00:36:00 +08:00
canvas 有个方法叫 measureText,可以以此来精确地控制文字的换行,并算出 csv 每一项的高度,据此手动控制何时分页,效率可能会有些差,但才十几万条,应该不碍事。只是不知道对少数民族语的支持如何。
no1xsyzy
2020-05-17 13:23:08 +08:00
1. 考虑 xelatex
2. 考虑生成后再重新去解析 PDF (脏

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://tanronggui.xyz/t/672404

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX