首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将pdf文件中的两页合并为一页

如何将pdf文件中的两页合并为一页
EN

Stack Overflow用户
提问于 2019-07-10 12:22:07
回答 3查看 5.2K关注 0票数 3

我有一个pdf,其中共有6页的图片,我想合并第1页和第2页为一个单一的pdf等3至6页。

我把所有6页pdf分割成单独的pdf。

从PyPDF2 import PdfFileReader,PdfFileWriter导入os

def pdf_splitter(路径):fname =os.path.splitext(os.path.basename(路径))

代码语言:javascript
运行
复制
pdf = PdfFileReader(path)
for page in range(pdf.getNumPages()):
    pdf_writer = PdfFileWriter()
    pdf_writer.addPage(pdf.getPage(page))

    output_filename = '{}_page_{}.pdf'.format(
        fname, page+1)

    with open(output_filename, 'wb') as out:
        pdf_writer.write(out)

    print('Created: {}'.format(output_filename))

如果名称为 == 'main':path = 'D:\Tasks\Samples\fw9.pdf‘pdf_splitter(路径)

我想知道如何将fw9的第1页和第2页合并为单一的pdf文件,其中只有1页作为fw9 pdf文件的第1页,另一半作为fw9 pdf的第2页。我必须将所有6页合并为1页和1页,3-4页作为另一页,其中只有1页,在同一页上只有1页,因此,如果有人对如何做到这一点有任何想法的话,on.Kindly会提供帮助。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-07-10 12:37:30

库pyPDF2也有一个PdfFileMerger对象,它应该做您想做的事情。

从示例这里中可以创建一个PdfFileMerger,读取两个页面并将它们放入一个文件中。

我稍微修改了您的脚本,以创建带有0-1、2-3、4-5 ecc的文件。(当然,页0是第一页,但是python编号从0开始)

代码语言:javascript
运行
复制
import os
from PyPDF2 import PdfFileReader, PdfFileWriter, PdfFileMerger

def pdf_splitter(path): 

    fname = os.path.splitext(os.path.basename(path))[0]

    pdf = PdfFileReader(path)
    input_paths = []
    for page in range(pdf.getNumPages()):
        pdf_writer = PdfFileWriter()
        pdf_writer.addPage(pdf.getPage(page))
        output_filename = '{}_page_{}.pdf'.format(fname, page+1)
        input_paths.append(output_filename)
        with open(output_filename, 'wb') as out:
            pdf_writer.write(out)

        print('Created: {}'.format(output_filename))

        # every 2 pages! 
        # Change the two if you need every other number of pages!
        if page % 2 == 1:
            pdf_merger = PdfFileMerger() #create pdfilemerger
            for path in input_paths: 
                pdf_merger.append(path) #read the single pages

            # we call it pages_N-1_N, so first would be pages_0_1!
            output_path = '{}_pages_{}_{}.pdf'.format(fname, page-1, page)
            with open(output_path, 'wb') as fileobj:
                pdf_merger.write(fileobj) # write the two pages pdf!

            input_paths = []

if __name__ == '__main__': 

    path = 'D:\Tasks\Samples\fw9.pdf' 
    pdf_splitter(path)

这就是你想要的吗?

这将首先为每个页面创建单个pdf,然后将它们组合到2到2。创建单个pdf也可以被跳过,但是我不确定您是否想要它。

票数 1
EN

Stack Overflow用户

发布于 2022-06-25 13:27:22

代码语言:javascript
运行
复制
from PyPDF2 import PdfFileReader, PdfFileWriter
from PyPDF2 import PageObject

#Open the files that have to be merged
pdf1File = open('document.pdf', 'rb')

#Read the files that you have opened
pdf1Reader = PdfFileReader(pdf1File)

#Make a list of all pages
pages = []
for pageNum in range(pdf1Reader.numPages):
    pageObj = pdf1Reader.getPage(pageNum)
    pages.append(pageObj)

#Calculate width and height for final output page
width = pages[0].mediaBox.getWidth() * 6
height = pages[0].mediaBox.getHeight() + 100

#Create blank page to merge all pages in one page
merged_page = PageObject.createBlankPage(None, width, height)

#Loop through all pages and merge / add them to blank page
x = 0
for page in pages:
    merged_page.mergeScaledTranslatedPage(page, 1, x, 10)
    x = float(x) + float(page.mediaBox.getWidth())

#Create final file with one page
writer = PdfFileWriter()
writer.addPage(merged_page)

with open('out.pdf', 'wb') as f:
    writer.write(f)

我想合并6个文件/页,所以我使用6作为页面宽度的乘数。

票数 0
EN

Stack Overflow用户

发布于 2022-11-10 16:47:09

这是如何以垂直方式将两页合并为一页的答案。

代码语言:javascript
运行
复制
from PyPDF2 import PdfFileReader, PdfFileWriter
from PyPDF2 import PageObject

#Open the files that have to be merged
pdf1File = open('1.pdf', 'rb')

#Read the files that you have opened
pdf1Reader = PdfFileReader(pdf1File)

#Make a list of all pages
pages = []
for pageNum in range(pdf1Reader.numPages):
    pageObj = pdf1Reader.getPage(pageNum)
    pages.append(pageObj)

#Calculate width and height for final output page
width = pages[1].mediaBox.getWidth() * 2
height = pages[1].mediaBox.getHeight() 

#Create blank page to merge all pages in one page
merged_page = PageObject.createBlankPage(None, width, height)
writer = PdfFileWriter()
#Loop through all pages and merge / add them to blank page
y =0
merged_page = PageObject.createBlankPage(None, width, height)
for page in range(len(pages)):
    y+=1
    if y%2!=0:
        merged_page.mergePage(pages[page])
        x=float(pages[page+1].mediaBox.getWidth())
        merged_page.mergeScaledTranslatedPage(pages[page+1], 1,x, 0)
    if y%2==0:
        writer.addPage(merged_page)
        merged_page = PageObject.createBlankPage(None, width, height)
        y=0
    
    

#Create final file with one page



with open('out.pdf', 'wb') as f:
    writer.write(f)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56970605

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档