当前位置:  开发笔记 > 编程语言 > 正文

裁剪.pdf文件的页面

如何解决《裁剪.pdf文件的页面》经验,为你挑选了2个好方法。

我想知道是否有人有任何编程与.pdf文件工作的经验.我有一个.pdf文件,我需要将每个页面裁剪到一定的大小.

快速搜索谷歌后,我找到了python的pyPdf库,但我的实验失败了.当我更改页面对象上的cropBox和trimBox属性时,结果不是我预期的,并且看起来非常随机.

有没有人有这方面的经验?代码示例将非常受欢迎,最好是在python中.



1> danio..:

pypdf做了我在这方面的期望.使用以下脚本:

#!/usr/bin/python
#

from pyPdf import PdfFileWriter, PdfFileReader

with open("in.pdf", "rb") as in_f:
    input1 = PdfFileReader(in_f)
    output = PdfFileWriter()

    numPages = input1.getNumPages()
    print "document has %s pages." % numPages

    for i in range(numPages):
        page = input1.getPage(i)
        print page.mediaBox.getUpperRight_x(), page.mediaBox.getUpperRight_y()
        page.trimBox.lowerLeft = (25, 25)
        page.trimBox.upperRight = (225, 225)
        page.cropBox.lowerLeft = (50, 50)
        page.cropBox.upperRight = (200, 200)
        output.addPage(page)

    with open("out.pdf", "wb") as out_f:
        output.write(out_f)

生成的文档有一个200x200点的修剪框,从媒体框内的25,25点开始.裁剪框内有25个点.

以下是使用上述代码处理后,我的示例文档在acrobat professional中的外观: 裁剪页面截图

在Acrobat Reader中加载时,此文档将显示为空白.


为什么原始页面文本(在trimBox之外)"跟随"裁剪的PDF?如果我执行上述操作并尝试将裁剪包含在另一个PDF中(例如,通过LaTex),并缩小裁剪,原始文本仍然存在,可选,尽管不可见.修改`page.mediaBox`似乎没有帮助.有关如何将PDF实际剪切到trimBox大小的任何建议?谢谢.
@danio没问题.我所追求的是PDF区域和文本的破坏性作物.最后,我设法使用`ghostscript`轻松完成.
至少在使用更新(兼容API的)PyPDF2的情况下,另一个可能导致空页面的罪魁祸首是在调用write()之前关闭支持PdfFileReader的输入文件。 `PdfFileWriter`; 这些页面似乎没有缓存到内存,而是根据需要从磁盘读取(这很聪明),因此,如果在写入输出文件之前关闭输入文件,则找不到内容-而是报告一个错误,它会默默地创建空白页(似乎不太聪明)。

2> 小智..:

用它来获取pdf的尺寸

from PyPDF2 import PdfFileWriter,PdfFileReader,PdfFileMerger

pdf_file = PdfFileReader(open("/Users/user.name/Downloads/sample.pdf","rb"))
page = pdf_file.getPage(0)
print(page.cropBox.getLowerLeft())
print(page.cropBox.getLowerRight())
print(page.cropBox.getUpperLeft())
print(page.cropBox.getUpperRight())

获得页面参考之后,然后应用裁剪命令

page.mediaBox.lowerRight = (lower_right_new_x_coordinate, lower_right_new_y_coordinate)
page.mediaBox.lowerLeft = (lower_left_new_x_coordinate, lower_left_new_y_coordinate)
page.mediaBox.upperRight = (upper_right_new_x_coordinate, upper_right_new_y_coordinate)
page.mediaBox.upperLeft = (upper_left_new_x_coordinate, upper_left_new_y_coordinate)

#for example :- my custom coordinates 
#page.mediaBox.lowerRight = (611, 500)
#page.mediaBox.lowerLeft = (0, 500)
#page.mediaBox.upperRight = (611, 700)
#page.mediaBox.upperLeft = (0, 700)

推荐阅读
oDavid_仔o_880
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有