【问题标题】:deleting and moving elements in pikepdf删除和移动 pikepdf 中的元素
【发布时间】:2022-10-23 22:04:01
【问题描述】:

我正在尝试使用 pikepdf 为 pdf 创建一种分页功能。

给定一些垂直位置(图像中的灰色虚线),我想将页面分成两页。我想保持页面大小并将行下的元素移动到下一页的顶部。

我基本上需要做3件事:

  • 在页面上列出元素
  • 查找给定元素的位置
  • 在页面周围移动元素

我正在努力在 pikepdf 文档页面上找到相关文档。有人能指出我正确的方向吗?

【问题讨论】:

  • qpdf 不是为此类模块设计的,因此您需要编写每个操作的脚本,添加空白页面(使用 qpdf 不容易,它需要一个虚拟页面github.com/qpdf/qpdf/issues/753#top),因此您需要知道页面前后的大小。好吧,如果乱七八糟也可以,现在第 1 页的内容需要在第 2 页上复制,参见 overstamp understamp,现在对于困难的部分,编辑第 1 页的下部以删除所有不需要的部分,并同样删除第 2 页的顶部,现在对于棘手的一点,将第 2 页向下移动,以便内容位于顶部。
  • @KJ 我想了很多。我的想法是只复制页面(插入列表非常简单),删除不同的部分并移动元素。既然我已经熟悉了 pdf 上的一些细节,那么您将页面本身向下移动而不是内容向上移动的想法似乎是一个更好的解决方案。还有其他图书馆更适合这种工作吗?
  • 嗯,liftNshift 的问题是所有库中的一个常见问题,因为一旦将铅类型转换为 XY,重复页面上的两次铅类型最容易解决,因为将较轻的纸张移动到一张纸上(如上)。尝试为每个字母调整第二张纸的 Y 值,最简单的意思是库需要重写每个文本行、矢量等。这与将文本从第 1 页的低 Y 重排到第 2 页顶部的高 Y 一样困难,PDF 不是旨在使用现代 HTML 重排。所以替代方案是 UNpage 进入 htm 并重新拆分(不推荐)

标签: python pdf pikepdf


【解决方案1】:

您应该可以在 cpdf(或其 Python 库版本 pycpdflib)中执行此操作。从命令行,您可以执行(未经测试):

cpdf in.pdf 1-3,3,4-end -o out.pdf

(将第三页复制为新的第四页)

cpdf -trimbox "x y w h" out.pdf 3 AND -trimbox "x2 y2 w2 h2" -range 4 -o out2.pdf

(裁剪重复页面以获得合适的 x y w h 值)

cpdf -hard-box /TrimBox out2.pdf 3,4 -o out3.pdf

(实际上将页面内容修剪到新的修剪框,烘烤它)

cpdf -remove-trim out3.pdf 3,4 -o out4.pdf

(移除裁切框,恢复原始页面尺寸,但保留硬框)

cpdf -shift "dx dy" out4.pdf 4 -o out5.pdf

(将下部向上移动到页面顶部以获得一些 dx dy)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-10
    • 1970-01-01
    相关资源
    最近更新 更多