如何更改pdf背景颜色?

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

我想更改PDF文件的背景。 我必须每月对一些 PDF 文件进行此更改。 我希望您能协助实现此自动化。 我愿意接受使用其他库的解决方案

import fitz  # PyMuPDF
from reportlab.lib.pagesizes import A4 #letter
from reportlab.pdfgen import canvas

input_pdf_path = "input_pdf_path.pdf"
output_pdf_path = "output.pdf"

background_color = (185, 231, 186)

c = canvas.Canvas(input_pdf_path, pagesize=A4)
c.setFillColorRGB(*[x / 255 for x in background_color])
c.rect(0, 0, A4[0], A4[1], fill=True)
c.setTitle("Background")
c.showPage()
c.save()

input_pdf = fitz.open(input_pdf_path)
output_pdf = fitz.open(output_pdf_path)

# I'm stuck here

output_pdf.save(output_pdf_path)
output_pdf.close()

print("Background color changed and saved to", output_pdf_path)
python pdf reportlab pymupdf
3个回答
0
投票

你可以使用

add_colored_background
功能,然后你必须定义自己的RGB颜色,你可以从这个链接找到那些,然后你可以提到你的输入和输出pdfs

from PyPDF2 import PdfReader, PdfWriter
from reportlab.lib.pagesizes import letter
from reportlab.pdfgen import canvas
import io

def add_colored_background(input_pdf_path, output_pdf_path, background_color=(255, 165, 0)):
    # RGB color values for orange
    r, g, b = background_color
    r /= 255.0
    g /= 255.0
    b /= 255.0

    input_pdf = PdfReader(open(input_pdf_path, 'rb'))
    output_pdf = PdfWriter()

    for page_num in range(len(input_pdf.pages)):
        page = input_pdf.pages[page_num]
        packet = io.BytesIO()
        can = canvas.Canvas(packet, pagesize=letter)
        can.setFillColorRGB(r, g, b)
        can.rect(0, 0, letter[0], letter[1], fill=True, stroke=False)
        can.save()

        packet.seek(0)
        new_pdf = PdfReader(packet)
        page.merge_page(new_pdf.pages[0])
        output_pdf.add_page(page)

    with open(output_pdf_path, 'wb') as output_file:
        output_pdf.write(output_file)

if __name__ == "__main__":
    input_pdf_path =  "input.pdf"  # Replace with your input PDF file path
    output_pdf_path = "output.pdf"  # Replace with the desired output PDF file path

    add_colored_background(input_pdf_path, output_pdf_path)

0
投票

这在 PyMuPDF 中超级简单、简短且快速:

import fitz  # PyMuPDF

input_pdf_path = "input_pdf_path.pdf"
output_pdf_path = "output.pdf"
background_color = (185/255, 231/255, 186/255)

doc = fitz.open(input_pdf_path)
for page in doc:
    page.draw_rect(page.rect, color=None, fill=background_color, overlay=False)

doc.ez_save(output_pdf_path)
doc.close()
print("Background color changed and saved to", output_pdf_path)

此外,您不需要任何其他库。


0
投票

您可以查看以下使用 Spire.Pdf for Python 的示例(pip install Spire.Pdf):

from spire.pdf.common import *
from spire.pdf import *

# Create a PdfDocument object
doc = PdfDocument()

# Load a PDF file
doc.LoadFromFile("C:\\Users\\Administrator\\Desktop\\input.pdf")

# Loop through each page in the document
for i in range(doc.Pages.Count):        
    page = doc.Pages[i]    
    # Set a background color for the page
    page.BackgroundColor = Color.get_LightYellow()

# Save the document to a different file
doc.SaveToFile("output/SetBackgroundColor.pdf")
doc.Close()

更多详细信息可以在本文中找到:Python:为 PDF 设置背景颜色或图像

免责声明:我为开发该库的公司工作。

© www.soinside.com 2019 - 2024. All rights reserved.