PyPDF2 将pdf的两个页面拼接成一个页面

from PyPDF2.generic import RectangleObject
from PyPDF2 import PdfReader, PdfWriter, Transformation
# PyPDF2已不更新,库名改为 pypdf
# 1.拼接在右方

def merge_pdf_right():
    reader = PdfReader("1.pdf")
    page1 = reader.pages[0]
    print('page1.cropbox:', page1.cropbox)
    reader2 = PdfReader("2.pdf")
    page2 = reader2.pages[0]

    offset = page1.cropbox.right
    print('offset:', offset)

    op = Transformation().translate(tx=offset, ty=0) # 拼接在右侧
    page2.add_transformation(op)
    cb = page2.cropbox

    page2.mediabox = RectangleObject((cb.left + offset, cb.bottom, cb.right + offset, cb.top))
    page2.cropbox = RectangleObject((cb.left + offset, cb.bottom, cb.right + offset, cb.top))
    page2.trimbox = RectangleObject((cb.left + offset, cb.bottom, cb.right + offset, cb.top))
    page2.bleedbox = RectangleObject((cb.left + offset, cb.bottom, cb.right + offset, cb.top))
    page2.artbox = RectangleObject((cb.left + offset, cb.bottom, cb.right + offset, cb.top))

    page1.merge_page(page2, expand=True)
    mb = page1.mediabox
    print('mb:', mb)
    page1.mediabox = RectangleObject((mb.left, mb.bottom, mb.right, mb.top))
    page1.cropbox = RectangleObject((mb.left, mb.bottom, mb.right, mb.top))
    page1.trimbox = RectangleObject((mb.left, mb.bottom, mb.right, mb.top))
    page1.bleedbox = RectangleObject((mb.left, mb.bottom, mb.right, mb.top))
    page1.artbox = RectangleObject((mb.left, mb.bottom, mb.right, mb.top))
    print('page1.mediabox:', page1.mediabox)

    writer = PdfWriter()
    writer.add_page(page1)
    with open("output.pdf", "wb") as fp:
        writer.write(fp)


# 2.拼接在下方

def merge_pdf_bottom():
    reader = PdfReader("1.pdf")
    page1 = reader.pages[0]
    print('page1.cropbox:', page1.cropbox)
    reader2 = PdfReader("2.pdf")
    page2 = reader2.pages[0]

    height = page1.cropbox.height
    print('height:', height)

    op = Transformation().translate(tx=0, ty=height)  # 拼接在下方
    page2.add_transformation(op)
    cb = page2.cropbox

    page2.mediabox = RectangleObject((cb.left, cb.bottom+height, cb.right, cb.top+height))
    page2.cropbox = RectangleObject((cb.left, cb.bottom+height, cb.right, cb.top+height))
    page2.trimbox = RectangleObject((cb.left, cb.bottom+height, cb.right, cb.top+height))
    page2.bleedbox = RectangleObject((cb.left, cb.bottom+height, cb.right, cb.top+height))
    page2.artbox = RectangleObject((cb.left, cb.bottom+height, cb.right, cb.top+height))

    page1.merge_page(page2, expand=True)
    mb = page1.mediabox
    print('mb:', mb)
    page1.mediabox = RectangleObject((mb.left, mb.bottom, mb.right, mb.top))
    page1.cropbox = RectangleObject((mb.left, mb.bottom, mb.right, mb.top))
    page1.trimbox = RectangleObject((mb.left, mb.bottom, mb.right, mb.top))
    page1.bleedbox = RectangleObject((mb.left, mb.bottom, mb.right, mb.top))
    page1.artbox = RectangleObject((mb.left, mb.bottom, mb.right, mb.top))
    print('page1.mediabox:', page1.mediabox)

    writer = PdfWriter()
    writer.add_page(page1)
    with open("output.pdf", "wb") as fp:
        writer.write(fp)

# 3. 自己将内容写入空白pdf,再进行拼接
import fitz
import qrcode
doc = fitz.open()
page_new = doc.new_page(width=45, height=30)
text = 'product_nameproduct_nameproduct'
page_new.insert_text(fitz.Point(0, 20), text, fontname="helv", fontsize=8)
qrcode_str = 'https://www.bing.com'
pdf_bytes = qrcode.make(qrcode_str)
rect = fitz.Rect(0, 2, 18, 18)
page.insert_image(rect, pixmap=pdf_bytes.get_image().toqpixmap(), overlay=True)
doc.save('lw.pdf')

  • 7
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您可以使用以下几种方法将多个 HTML 页面拼接一个页面: 1. 使用 iframe 标签:您可以在一个主 HTML 页面中使用多个 iframe 标签,每个 iframe 标签指向一个独立的 HTML 页面。这样,您就可以将多个页面嵌入到主页面中。 示例代码: ```html <!DOCTYPE html> <html> <head> <title>拼接页面</title> </head> <body> <iframe src="page1.html"></iframe> <iframe src="page2.html"></iframe> <iframe src="page3.html"></iframe> </body> </html> ``` 2. 使用 Ajax 请求加载内容:您可以使用 JavaScript 的 Ajax 技术来异步加载其他 HTML 页面的内容,并将其插入到主页面的特定位置。 示例代码: ```html <!DOCTYPE html> <html> <head> <title>拼接页面</title> <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script> <script> $(document).ready(function() { $.ajax({ url: 'page1.html', success: function(data) { $('#content').append(data); } }); $.ajax({ url: 'page2.html', success: function(data) { $('#content').append(data); } }); $.ajax({ url: 'page3.html', success: function(data) { $('#content').append(data); } }); }); </script> </head> <body> <div id="content"></div> </body> </html> ``` 这样,页面加载时,Ajax 请求将分别加载 page1.html、page2.html 和 page3.html 的内容,并将其追加到 id 为 "content" 的 div 元素中。 3. 使用服务器端技术:如果您使用的是服务器端技术(如 PHP、Node.js 等),您可以在服务器端将多个 HTML 页面合并一个页面,并将其发送给客户端。 示例代码(使用 Node.js 和 Express 框架): ```javascript const express = require('express'); const app = express(); app.get('/', function(req, res) { const page1 = fs.readFileSync('page1.html', 'utf8'); const page2 = fs.readFileSync('page2.html', 'utf8'); const page3 = fs.readFileSync('page3.html', 'utf8'); const mergedPage = page1 + page2 + page3; res.send(mergedPage); }); app.listen(3000, function() { console.log('Server is running on port 3000'); }); ``` 这样,当客户端请求根路径时,服务器将读取并合并 page1.html、page2.html 和 page3.html 的内容,并将合并后的页面发送给客户端。 这些方法可以帮助您将多个 HTML 页面拼接一个页面。您可以根据具体需求选择适合您的方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值