Python 如何将水印添加到pdf文件?
如何将水印添加到由该代码生成的pdf文件中Python 如何将水印添加到pdf文件?,python,django,Python,Django,如何将水印添加到由该代码生成的pdf文件中 import xhtml2pdf from xhtml2pdf import pisa def delivery_cancel(request, did): d_instance = get_object_or_404(Delivery, pk=did, user=request.user) users = request.user.get_profile() user = request.user contents
import xhtml2pdf
from xhtml2pdf import pisa
def delivery_cancel(request, did):
d_instance = get_object_or_404(Delivery, pk=did, user=request.user)
users = request.user.get_profile()
user = request.user
contents = render_to_string('delivery_cancel.html', {'delivery':d_instance,'users':users,'user':user})
response = HttpResponse(mimetype='application/pdf')
response['Content-Disposition'] = 'inline; filename=mypdf.pdf'
result = StringIO.StringIO()
pdf = pisa.pisaDocument(StringIO.StringIO(contents.encode('utf-8')), result, show_error_as_pdf=True, encoding='UTF-8')
response.write(result.getvalue())
result.close()
return response
我尝试使用reportlab,但失败了,因此我请求另一种解决方案。xhtml2pdf的输入是XHTML,因此您可能希望在其中指定水印。文件
或者,您可以创建一个只包含水印的单页PDF,并在事后使用类似的方法将其应用于生成的文件。我的方法比较长,但应该可以解决所面临的大多数问题。 使用此脚本,您将能够从xlsx工作表中添加水印电子邮件地址列表,并将与水印相同的电子邮件地址添加到您输入的pdf的所有页面
# Importing all required packages
import xlrd
from reportlab.pdfgen import canvas
from reportlab.lib.units import inch, cm
from PyPDF2 import PdfFileWriter, PdfFileReader
from reportlab.lib.colors import HexColor
# create watermarked booklet
def final_booklets(file_name,booklet):
watermark_obj = PdfFileReader(file_name)
watermark_page = watermark_obj.getPage(0)
pdf_reader = PdfFileReader(booklet)
pdf_writer = PdfFileWriter()
# Watermark all the pages
for page in range(pdf_reader.getNumPages()):
page = pdf_reader.getPage(page)
page.mergePage(watermark_page)
pdf_writer.addPage(page)
output = file_name+"_booklet.pdf"
with open(output, 'wb') as out:
pdf_writer.write(out)
# Create watermark pdf again each email address
def watermark_pdf(target,booklet):
file_name = (target + ".pdf")
c = canvas.Canvas(file_name)
c.saveState()
c.setFillColor(HexColor('#dee0ea'))
c.setFont("Helvetica", 40)
c.translate(15*cm, 20*cm )
c.rotate(45)
c.drawRightString(0,0,target)
c.restoreState()
c.showPage()
c.save()
final_booklets(file_name,booklet)
# Read the sheet to get everyones email address
def read_xlsx(fn):
book = xlrd.open_workbook(fn)
sheet = book.sheet_by_index(0)
booklet = "book.pdf"
for cell in range(1,sheet.nrows):
target = sheet.cell(cell,1).value
watermark_pdf(target,booklet)
# main controller
if __name__ == "__main__":
fn = "Test.xlsx"
read_xlsx(fn)
原始Github链接: