Как добавить водяной знак в PDF, сгенерированный PyLatex? - PullRequest
0 голосов
/ 22 января 2019

Я пытаюсь добавить водяной знак в PDF, созданный PyLatex. Я пытался использовать следующие методы.

  1. 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)
  1. Используется 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()

Есть ли другой способ добавить водяной знак? Или я могу изменить мои текущие реализации для достижения этого?

...