Как добавить водяной знак в PDF с помощью TCPDF

Настроить «водяной знак» в вашем PDF, сгенерированном TCPDF, может быть сложно, если вы попытаетесь сделать это самостоятельно без глубокого понимания библиотеки. К счастью, с помощью оригинальных примеров TCPDF можно отобразить фоновое изображение на любой странице вашего PDF-файла, которая может имитировать водяной знак.

1. Переопределите оригинальный метод заголовка TCPDF.

Первое, что вам нужно сделать, это переопределить функцию заголовка по умолчанию для TCPDF. Этот подход работает довольно хорошо, однако вы будете жертвовать исходными данными заголовка вашего PDF, что означает, что оригинальный метод setHeaderData больше не будет иметь эффекта:

// This won't work anymore if you decide to add a watermark
$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 006', PDF_HEADER_STRING);

Поэтому работа с этим подходом рекомендуется только в том случае, если ваш «водяной знак» играет роль фона всего PDF, например, содержит верхний и нижний колонтитулы. Если вы все еще хотите продолжить, начните с переопределения метода Header класса TCPDF.

Это можно сделать, просто создав новый класс, где вы хотите и с именем, которое вы хотите (если вы можете использовать его позже, где вы хотите), который расширяет класс TCPDF. При этом вам нужно будет сохранить некоторые исходные значения PDF, чтобы восстановить их после того, как вы нарисовали изображение, используя Image метод. Теоретически вы можете просто скопировать следующий пример и изменить путь к изображению, которое будет использоваться в качестве водяного знака, однако вы можете изменить поля и координаты, где будет отображаться изображение:

class MyCustomPDFWithWatermark extends TCPDF {
public function Header() {
// Get the current page break margin
$bMargin = $this->getBreakMargin();
// Get current auto-page-break mode
$auto_page_break = $this->AutoPageBreak;
// Disable auto-page-break
$this->SetAutoPageBreak(false, 0);
// Define the path to the image that you want to use as watermark.
$img_file = './your-watermark.jpg';
// Render the image
$this->Image($img_file, 0, 0, 223, 280, '', '', '', false, 300, '', false, false, 0);
// Restore the auto-page-break status
$this->SetAutoPageBreak($auto_page_break, $bMargin);
// Set the starting point for the page content
$this->setPageMark();
}
}

2. Используйте новый класс вместо TCPDF

Далее вам нужно всего лишь сгенерировать PDF так же, как всегда, за исключением экземпляра TCPDF, который вы будете использовать. Используйте переопределенный класс вместо исходного для создания экземпляра PDF:

// If you want to use it without Watermark
// $pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
// To use with watermark, use the overrided class that expects the same parameters that TCPDF
// because the class simply extends the original
$pdf = new MyCustomPDFWithWatermark(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
// Rest of your code here
// $pdf->AddPage();

И это все, теперь изображение, определенное в MyCustomPDFWithWatermark Метод должен отображаться за вашим контентом без каких-либо визуальных препятствий.

Полный пример

В этом примере наш водяной знак для PDF будет следующим (обратите внимание, что это не оригинальный размер изображения, оригинальный размер совпадает с размером оттиска 1763×2162):

TCPDF Водяной знак

И наш код для создания PDF-файла следующий:

SetAuthor('Our Code World');
// set default monospaced font
$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED);
// set default header data
$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 006', PDF_HEADER_STRING);
// set margins
$pdf->SetMargins('10', '40', '10');
$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);
$pdf->SetFont('dejavusans', '', 10);
// Add a page
$pdf->AddPage();
// Create some HTML content
$html = 'HTML Example
Some special characters: < € € € & è è © > \\slash \\\\double-slash \\\\\\triple-slash

List

List example:
  1. bold text
  2. italic text
  3. underlined text
  4. bbibiubib
  5. link to http://www.tecnick.com
  6. Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt.
  7. SUBLIST
    1. row one
      • sublist
    2. row two
  8. TEST line through
  9. font + 3
  10. small text normal small text normal subscript normal superscript normal
Coffee Black hot drink Milk White cold drink IMAGES '; // output the HTML content $pdf->writeHTML($html, true, false, true, false, ''); // output some RTL HTML content $html = ' The words “מזל [mazel] טוב [tov]” mean “Congratulations!” '; $pdf->writeHTML($html, true, false, true, false, ''); // test some inline CSS $html = '

This is just an example of html code to demonstrate some supported CSS inline styles. bold text line-trough underline and line-trough color background color bold xx-small x-small small medium large x-large xx-large

'; $pdf->writeHTML($html, true, false, true, false, ''); // Close and output PDF document $pdf->Output('example_pdf_ocw.pdf', 'I');

Выполнение кода сгенерирует следующий PDF:

TCPDF с водяным знаком

Довольно круто и легко, правда? Удачного кодирования!

Ссылка на основную публикацию
Adblock
detector