Со шрифтами сложнее. Насколько я понимаю, кириллической версией шрифта Times-Roman (по умолчанию) является Times-New-Roman-Cyr. Но даже его установка не сработала. Попробуйте другие кириллические шрифты, например входящие в семейство DejaVu:
--- overlaylink2pdf.py 2017-03-23 09:49:55.367128245 +0500
+++ overlaylink2pdf2.py 2017-03-23 20:57:12.023642244 +0500
@@ -1,4 +1,5 @@
#!/usr/bin/env python2
+# -*- coding: UTF-8 -*-
import argparse
import PyPDF2
@@ -6,9 +7,12 @@
import mimetypes
import os, sys
import StringIO
+import progressbar
from reportlab.pdfgen import canvas
from reportlab.lib.units import cm
from reportlab.lib.colors import HexColor
+from reportlab.pdfbase import pdfmetrics
+from reportlab.pdfbase.ttfonts import TTFont
def is_pdf(path, check):
if check == 'lazy':
@@ -46,6 +50,7 @@
height_page = upperLeft[1] - lowerLeft[1]
margin = {'top': 0.5*cm, 'right': 1*cm, 'bottom': 1*cm, 'left': 1*cm} # margin for top right bottom left in cm
packet = StringIO.StringIO()
+ pdfmetrics.registerFont(TTFont(font, font+'.ttf','UTF-8'))
canva = canvas.Canvas(packet, pagesize=(width_page, height_page))
canva.setFont(font, fontsize)
watermark_width = canva.stringWidth(watermark, font, fontsize)
@@ -69,7 +74,6 @@
x = lowerLeft[0] + (lowerRight[0] - lowerLeft[0])/2.0 - watermark_width/2.0
y = lowerLeft[1] + margin['bottom']
canva.drawString(x, y, watermark)
- canva.linkURL(watermark, (x, y, x+watermark_width, y+fontsize))
canva.save()
packet.seek(0)
return PyPDF2.PdfFileReader(packet)
@@ -81,26 +85,30 @@
fontsize = int(args.fontsize)
for filename in make_list_pdfs_by(args.PDFs, args.validate, args.recursive):
existing_pdf = PyPDF2.PdfFileReader(file(filename, "rb"))
- page = existing_pdf.getPage(0)
- overlay_pdf = make_overlay_pdf(watermark, position, font, fontsize, page.mediaBox)
- page.mergePage(overlay_pdf.getPage(0))
- page.mergePage(overlay_pdf.getPage(0))
output_pdf = PyPDF2.PdfFileWriter()
- output_pdf.appendPagesFromReader(existing_pdf)
+ numPages = existing_pdf.getNumPages()
+ widgets = [os.path.basename(filename), ': ', progressbar.SimpleProgress()]
+ pbar = progressbar.ProgressBar(widgets=widgets, maxval=numPages).start()
+ for current_page in range(0, numPages):
+ pbar.update(current_page)
+ page = existing_pdf.getPage(current_page)
+ overlay_pdf = make_overlay_pdf(watermark, position, font, fontsize, page.mediaBox)
+ page.mergePage(overlay_pdf.getPage(0))
+ output_pdf.addPage(page)
+ pbar.finish()
outputStream = file(os.path.join(os.path.dirname(filename), args.prefix+'_'+os.path.basename(filename)), "wb")
output_pdf.write(outputStream)
outputStream.close()
- print "Processing completed for %s" % (filename)
def parse_args():
- parser = argparse.ArgumentParser(usage="%s -w https://forum.ubuntu.ru [-i ~/docs] [-f Times-Roman] "
+ parser = argparse.ArgumentParser(usage="%s -w https://forum.ubuntu.ru [-i ~/docs] [-f DejaVuSans] "
"[-s 24] [--top-left|--top-middle|--top-right|--bottom-left|--bottom-middle|--bottom-right 1 [0.5]] "
"[-r] [--prefix your_prefix] [--validate trustworthy] [--color]" % (os.path.basename(sys.argv[0])))
parser.add_argument("-i", "--input", action="store", dest="PDFs", default=".")
parser.add_argument("-w", "--watermark", action="store", dest="watermark", required=True)
parser.add_argument("-s", "--font-size", action="store", dest="fontsize", default="18")
- parser.add_argument("-f", "--font", action="store", dest="font", default="Times-Roman")
+ parser.add_argument("-f", "--font", action="store", dest="font", default="DejaVuSans")
parser.add_argument("-p", "--position", action="store", dest="pos_watermark",
metavar="position watermark", choices=["top-left", "top-middle", "top-right", "bottom-left", "bottom-middle", "bottom-right"], default='top-left')
parser.add_argument("-r", "--recursive", action="store_true", dest="recursive", default=False)
@@ -111,5 +119,4 @@
if __name__ == "__main__":
args = parse_args()
- #print args
make_watermark(args)
Для наложения патча создайте файл в том же самом каталоге, где находится основной скрипт и скопируйте в него текст под спойлером, после этого выполните команду:
На этом все.
P.S. Пользователя
больше не существует. Есть его форк -