Я пытаюсь добавить водяной знак в PDF, созданный PyLatex.
Я пытался использовать следующие методы.
- NoEscape () команда, которая выдает следующую ошибку: -
(/usr/share/texlive/texmf-dist/tex/latex/base/ts1cmr.fd)
(/usr/share/texlive/texmf-dist/tex/latex/roboto/T1Roboto-LF.fd)
*geometry* driver: auto-detecting
*geometry* detected driver: pdftex
ABD: EverySelectfont initializing macros
(/usr/share/texlive/texmf-dist/tex/context/base/supp-pdf.mkii
[Loading MPS to PDF converter (version 2006.09.02).]
) (/usr/share/texlive/texmf-dist/tex/generic/oberdiek/pdftexcmds.sty)
(/usr/share/texlive/texmf-dist/tex/latex/oberdiek/epstopdf-base.sty
(/usr/share/texlive/texmf-dist/tex/latex/oberdiek/grfext.sty
(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/kvdefinekeys.sty))
(/usr/share/texlive/texmf-dist/tex/latex/oberdiek/kvoptions.sty
(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/kvsetkeys.sty
(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/etexcmds.sty)))
(/usr/share/texlive/texmf-dist/tex/latex/latexconfig/epstopdf-sys.cfg))
! LaTeX Error: Can be used only in preamble.
See the LaTeX manual or LaTeX Companion for explanation.
Type H <return> for immediate help.
...
l.68 \usepackage
[printwatermark]{xwatermark}%
! Undefined control sequence.
l.69 \newwatermark
[allpages,color=red!50,angle=45,scale=3,xpos=0,ypos=0]{DRA...
Для этого я использовал следующий код -
f1 = NoEscape(r'\usepackage[printwatermark]{xwatermark}')
f2 = NoEscape(r'\newwatermark[allpages,color=red!50,angle=45,scale=3,xpos=0,ypos=0]{DRAFT}')
doc.append(f1)
doc.append(f2)
- Используется PyPDF2 согласно этому ответу Как добавить фоновое изображение страницы в pylatex? .
Проблема этого метода заключается в том, что водяной знак перекрывает исходное содержимое PDF. В идеале он должен действовать как прозрачный фон.
Код, используемый мной -
def add_watermark():
Doc = open('invoice.pdf', 'rb')
pdfReader = PyPDF2.PdfFileReader(Doc)
pdfWatermark = PyPDF2.PdfFileReader(open('draft_watermark.pdf', 'rb'))
pdfWriter = PyPDF2.PdfFileWriter()
for pageNum in range(0, pdfReader.numPages):
pageObj = pdfReader.getPage(pageNum)
pageObj.mergePage(pdfWatermark.getPage(0))
pdfWriter.addPage(pageObj)
resultPdfFile = open('invoicecopy.pdf', 'wb')
pdfWriter.write(resultPdfFile)
Doc.close()
resultPdfFile.close()
Есть ли другой способ добавить водяной знак?
Или я могу изменить мои текущие реализации для достижения этого?