微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用适合页面的文本创建一页 PDF

如何解决使用适合页面的文本创建一页 PDF

我正在寻找一种方法来从任意长度的文本生成单页 PDF 文件自动适应页面字体大小,具有合理的边距,居中 H/W。

command --text="Text of arbitrary length" --output=one-page-file.pdf

也就是说,我要重新创建

magick -gravity center -background white -fill black -size 1728x972 -font /Users/marekkowalczyk/Library/Fonts/RobotoMono-Medium.ttf caption:"Lorem ipsum dolor sit amet,consectetur adipisicing elit,sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat." -background white -extent 1920x1080 long.pdf

其中输出文件是“真正的”PDF,而不是嵌入在 PDF 中的图像文件——显然是用生成 PDF 的工具(PostScript?TeX?)替换 ImageMagick。

Sample output

解决方法

当然可以编写一个 PostScript 文件,将所需的内容(文本)缩放到给定的页面大小,但问题是:

  • 哪种字体可供 PostScript 解释器访问或 蒸馏器?首先有必要找出哪种字体 解释器在计算机上可以访问的名称。 (的清单 可访问的字体可以在反向通道上输出 resourceforall 运算符。)
  • 文本应如何格式化?你会 想要手动将您的文本放在 PostScript 文件的末尾 您想要的换行符,然后将文件提炼为 PDF 文件?要么 PostScript 文件是否应在冒号处输入换行符,只需在 下一个空间等等?
  • 如何定义边距?作为绝对 值(英寸、磅、厘米、...)或作为页面大小的百分比?
  • 如何实现水平缩放?字体大小应该是 大到填充从左边距到右边最长的一行 保证金?
  • 如何进行水平缩放?应该行 间距保持字体的默认 1x 间距,并且 字体大小要大到从上边距填充到下边距? 或者字体大小应从水平缩放和 行距要调整吗?
  • 可以将行距设置为低于 1x 以 实现垂直间距?
  • 如果不是,水平缩放可能会更小 比从左到右边缘?
  • 是否允许更改纵横比,即在 x 或 y 方向拉伸字体的字形?
,

我想出了以下技巧。

  1. 创建一个 SVG 矢量图像。
convert\
    -gravity\
        center\
    -background\
        white\
    -fill\
        black\
    -size\
        1728x972\
    -extent\
        1920x1080\
    -font ~/Library/Fonts/RobotoMono-Medium.ttf\
    caption:"Lorem ipsum"\
    lorem.svg
  1. 将其转换为向量 PDF。请注意,直接使用 PDF 生成 convert 不起作用,因为该文件只是嵌入的位图图像。

svg2pdf lorem.svg lorem.pdf

  1. 使用 ocrmypdf 添加文本层。这一步是必要的,因为上一步中的 PDF 只是字母形状的矢量图像,与 PDF 等渲染的 LaTeX 不同。
ocrmypdf -l pol+eng --output-type pdfa --clean lorem.pdf lorem-ocr.pdf

Hacky 是他妈的,但完成了工作。

正确的解决方案是以某种方式访问​​ ImageMagick 内部布局引擎并在将其转换为位图之前捕获其输出。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。