跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 请教一个关于”HTML 转 pdf”的问题
未分類
19 5 月 2020

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

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

資深大佬 : allele 0

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

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

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

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

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

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

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

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

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

大佬有話說 (16)

  • 資深大佬 : myd

    手动控制分页

  • 資深大佬 : exip

    html 上在哪页 pdf 上不就是在哪页吗?

  • 主 資深大佬 : allele

    @myd 手动控制分页的问题在于”你不知道应该隔多少个<p>换一次页“。我们现在的想法就是每隔 20 行强制换页,同时保证字体不要太大。就是想知道有没有我们遗漏的更好的办法。

  • 主 資深大佬 : allele

    @exip html 页面是什么意思? html 不是一个很长很长的东西吗?

  • 資深大佬 : TimePPT

    其实你的需求是纸质打印一本书,带目录索引?

  • 主 資深大佬 : allele

    @TimePPT 欸?这个思路很好欸?好像就是要把每一句话都收录到目录里。

  • 資深大佬 : dallaslu

    做一堆撑满一页的高度的块元素,然后均匀地把内容放进去?

  • 資深大佬 : redtea

    openhtmltopdf 可以实现,但是用的是 Java 。

  • 主 資深大佬 : allele

    @redtea 哇哦~我去看看

  • 資深大佬 : 967182

    html 当然能控制让它分页啊
    <div style=”page-break-before: always”>
    <div id=page2 style=’position:relative;width:760px;height:1070px;’>

  • 資深大佬 : 967182

    html 转换可以试试 https://wkhtmltopdf.org/index.html 这个工具,效果还不错。

  • 主 資深大佬 : allele

    @967182 嗯嗯。能换页我知道,包括我们现在的做法就是每隔 28 个<p>插入一个换页。但是这样的做法终究不美观。

  • 資深大佬 : 967182

    @allele 其实你要做的不就是 PDF 加载到程序中,然后一页一页的循环看有没有符合你条件的数据。

  • 資深大佬 : ccraohng

    手动分页数据兼容性不好吧。我们用的是 wkhtml 。可以读取 pdf 内容,再匹配查找

  • 資深大佬 : xiaoming1992

    canvas 有个方法叫 measureText,可以以此来精确地控制文字的换行,并算出 csv 每一项的高度,据此手动控制何时分页,效率可能会有些差,但才十几万条,应该不碍事。只是不知道对少数民族语的支持如何。

  • 資深大佬 : no1xsyzy

    1. 考虑 xelatex
    2. 考虑生成后再重新去解析 PDF (脏

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具