仅在 PDF 中更改横向页面的方向

问题描述 投票:0回答:2

我有一个从 LibreOffice Writer 导出的 PDF 文件。这是一个示例。有些页面是纵向的,有些页面是横向的。我使用的是 Linux,当我在 evince 或 Foxit Reader 中查看文件时,它显示正确,即所有文本行都是水平的。它也可以在我的打印机上正确打印在 A4 纸上:横向页面逆时针旋转 90 度,以便文本行变为垂直。

问题是:该文档将在另一台设备(出版商)上打印,并且我被告知所有页面必须为纵向。我不确定情况是否已经如此,证据只是显示横向页面顺时针旋转。例如,

pdfinfo file.pdf
打印
Page rot: 0
。如果是这样,那么一切都很好。但是,如果 PDF 文件有一个命令指示下一页为横向模式,则需要将其旋转 90 度并声明为纵向。

那么是否可以从命令行旋转横向页面?我知道我可以使用 pdftk 来做到这一点,但随后我需要手动指定页码。我有很多文档,手动指定横向页码很困难。有自动的方法吗?

pdf printing landscape portrait pdftk
2个回答
2
投票

可以使用 Python 和 PyPDF2 模块。 请参阅示例代码:

import PyPDF2

pdf_in = open('test.pdf', 'rb')
pdf_reader = PyPDF2.PdfFileReader(pdf_in)
pdf_writer = PyPDF2.PdfFileWriter()

numofpages = pdf_reader.numPages

numrotated = 0 
for pagenum in range(numofpages):
    page = pdf_reader.getPage(pagenum)
    mb = page.mediaBox
    if (mb.upperRight[0] > mb.upperRight[1]) and (page.get('/Rotate') is None):
        page.rotateCounterClockwise(90)
        numrotated = numrotated + 1
    pdf_writer.addPage(page)

print str(numrotated) + " of " + str(numofpages) + " pages were rotated"
pdf_out = open('test_rotated.pdf', 'wb')
pdf_writer.write(pdf_out)
pdf_out.close()

pdf_in.close()

在 Red Hat Enterprise Linux 6、Python 2.7.12、PyPDF2 1.26.0 上测试。 也适用于 Windows。


0
投票

这是上面的答案,但转换成python3


pdf_in = open('test.pdf', 'rb')
pdf_reader = PyPDF2.PdfReader(pdf_in)
pdf_writer = PyPDF2.PdfWriter()

numofpages = len(pdf_reader.pages)

numrotated = 0
for pagenum in range(numofpages):
    page = pdf_reader.pages[pagenum]
    mb = page.mediabox
    if (mb.upper_right[0] > mb.upper_right[1]) and (page.get('/Rotate') is None):
        page.rotate(90)
        numrotated = numrotated + 1
    pdf_writer.add_page(page)

print (str(numrotated) + " of " + str(numofpages) + " pages were rotated")
pdf_out = open('test_rotated.pdf', 'wb')
pdf_writer.write(pdf_out)
pdf_out.close()

pdf_in.close()
© www.soinside.com 2019 - 2024. All rights reserved.