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

仅在PDF中更改横向页面的方向,pdf,printing,landscape,portrait,pdftk,Pdf,Printing,Landscape,Portrait,Pdftk,我有一个从LibreOffice Writer导出的PDF文件。这是一个例子。有些页面是纵向的,有些页面是横向的。我使用的是Linux,当我在evince或Foxit Reader中查看文件时,它会正确显示,即所有文本行都是水平的。它也正确地打印在我的打印机上的A4纸上:横向页面逆时针旋转90度,使文本行变得垂直 问题是:文档将在另一台设备(出版商)上打印,我被告知所有页面都必须具有纵向。我不确定这是否已经是事实,evince只是显示顺时针旋转的横向页面。例如,pdfinfo file.pdf打

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

问题是:文档将在另一台设备(出版商)上打印,我被告知所有页面都必须具有纵向。我不确定这是否已经是事实,evince只是显示顺时针旋转的横向页面。例如,
pdfinfo file.pdf
打印
Page rot:0
。如果是这样,那么一切都很好。但是,如果PDF文件中有一个命令指示下一页处于横向模式,则需要将其旋转90度并声明为纵向


因此,是否可以从命令行仅旋转横向页面?我知道我可以用pdftk来完成,但是我需要手动指定页码。我有很多文档,手动指定横向页码很难。是否有一种自动方式?

可以使用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