根据精确的说明和细致的规格创建复杂的PDF文件



[抱歉我的英语不好]

我们正在开发一个管理公共交通信息的应用程序。该应用程序应生成公交车站标牌的海报。

海报应符合详细和严格的监管规则,在每一个细节。字体、颜色、表格、线条、符号、嵌入图像等等。

我们需要将海报制作成PDF文件,然后发送打印。

我们的问题是:如何以可靠和有效的方式生成这个文件?

我们应该先创建一个HTML+CSS文件,然后使用一个库将HTML转换为PDF吗?我们能信任库完全准确地转换HTML吗?

或者我们应该使用像iText那样直接生成PDF的库。他们是否支持根据确切的规范创建复杂的PDF ?

最适合的环境是什么?我们的首要任务是dotnet core,但如果没有选择,我们也会考虑使用python或node.

最后一个问题,这属于哪个知识领域?完成这项任务需要什么技能?我们想为这项任务发布招标,但不知道该要求什么。

免责声明:我是borb的作者,这个答案中使用的库

一般来说,有两种PDF库。

  • 高级库:这些库允许您轻松添加内容(图像,文本,表格,列表等),而无需指定太多。这对你(用户)来说更容易,但你放弃了精确的控制。
  • 低级库:这些库将您(用户)带入PDF的细节级别。您可以操纵内容并将其放置在准确的位置。你可以定义一个色彩空间(确保颜色可以被校准),等等。这也意味着你放弃了舒适。你不能(很容易地)分割文本,自动流动内容块等

borb允许您同时执行这两项操作。你可以把内容放在精确的坐标,你可以指定你自己的字体,你可以设置颜色使用RGB, HSV等

你也可以使用PageLayout,它将接管大部分的内容放置。

这是一个使用绝对定位的例子:
from borb.pdf import Document
from borb.pdf import Page
from borb.pdf import Paragraph
from borb.pdf import PDF
from borb.pdf.canvas.geometry.rectangle import Rectangle
from decimal import Decimal

def main():
# create Document
doc: Document = Document()
# create Page
page: Page = Page()
# add Page to Document
doc.add_page(page)
# define layout rectangle
# fmt: off
r: Rectangle = Rectangle(
Decimal(59),                # x: 0 + page_margin
Decimal(848 - 84 - 100),    # y: page_height - page_margin - height_of_textbox
Decimal(595 - 59 * 2),      # width: page_width - 2 * page_margin
Decimal(100),               # height
)
# fmt: on
# the next line of code uses absolute positioning
Paragraph("Hello World!").paint(page, r)
# store
with open("output.pdf", "wb") as pdf_file_handle:
PDF.dumps(pdf_file_handle, doc)

if __name__ == "__main__":
main()

这是使用PageLayout

的相同示例
from borb.pdf import Document
from borb.pdf import Page
from borb.pdf import PageLayout
from borb.pdf import SingleColumnLayout
from borb.pdf import Paragraph
from borb.pdf import PDF

def main():
# create Document
doc: Document = Document()
# create Page
page: Page = Page()
# add Page to Document
doc.add_page(page)
# set a PageLayout
layout: PageLayout = SingleColumnLayout(page)
# add a Paragraph
layout.add(Paragraph("Hello World!"))
# store
with open("output.pdf", "wb") as pdf_file_handle:
PDF.dumps(pdf_file_handle, doc)

if __name__ == "__main__":
main()

相关内容

  • 没有找到相关文章