Печать документа с сайта - генерация документа под печать (или в PDF) из HTML шаблона


В данном примере мы используем шаблон документа в HTML, подменяем параметры и даем возможность распечатать документ на принтере.

Используя возможность сохранять документ в PDF (вместо принтера), можно таким образом организовать экспорт документов в PDF. 

Плюсы данного подхода: 

  • Гибкое и простое управление шаблоном и его стилями (по сранению с генерацией документа через Word).
  • Возможность встраивать сложные визуализации в выходной документ

Минусы: 

  • Возможны отличия в печати для разных устройств (разные браузеры)
  • Нет возможности сохранить как документ Word для последующей правки документа. 

Как реализовать подготовку документа на печать: 

1. Создаем шаблон в виде HTML блока (просто разметка): 

  <div class="text-muted mb-2">
  Подрядчик: {p1}
   </div>
	<div class="text-muted mb-2">
Заказчик: {p2}
</div>
  <h1 class="text-center my-5">{p3}</h1>

<p class="text-right">{p4}</p>
<p>
Работы согласно: {p5}
включающие:
</p>
	
      {p6}
    <table class="table table-striped my-5">
      <thead>
      	<tr><th>Работы</th><th>Кол-во</th><th>Ед.</th><th>Стоимость</th></tr>
      </thead></table>
  	<p>
  выполнены полностью и с надлежащим качеством. Претензий у заказчика к выполненным работам нет.
  	</p>

<p>Стоимость работ составила:
<b>{p7}</b>. В том числе НДС: Ноль рублей 00 копеек
</p>
  <div class="row mt-5">
  <div class="col-12 col-sm-6">
    ПОДРЯДЧИК:<br><br>
    _____________________ {p8}<br><br>
    "____" __________ {year}г.
  </div>
  <div class="col-12 col-sm-6">
    ЗАКАЗЧИК:<br><br>
    _____________________ {p9}<br><br>
    "____" __________ {year}г.
    </div>
   </div>

2. Создаем форму, где извлекаем шаблон и заменяем параметры данными. GetItem: 

CREATE PROCEDURE [dbo].[fm_watch_docFromHTML_getItem]
    @itemID int,	
	@username nvarchar(256)
AS
BEGIN
	declare @s nvarchar(max) = dbo.as_htmlBlock('printAct', 1)
    declare @g uniqueidentifier = newid()
    
    set @s = replace(@s, '{p1}', 'Индивидуальный предприниматель Сухоруков И.И.')
    set @s = replace(@s, '{p2}', 'ООО Матильда')
    set @s = replace(@s, '{p3}', 'Акт №65 Сдачи-приемки выполненных работ')
    set @s = replace(@s, '{p4}', '10 октября 2022 года')
    set @s = replace(@s, '{p5}', 'Дополнительное соглашение №6 от 5 ноября 2019г.')
    set @s = replace(@s, '{p6}', 'Работа №11шт.200
      Работа №21шт.350')
    set @s = replace(@s, '{p7}', '550 ('+dbo.as_numPropis(550, 1)+') рублей ')
    set @s = replace(@s, '{p8}', 'Петров И.И.')
    set @s = replace(@s, '{p9}', 'Иванов И.В.')
    set @s = replace(@s, '{year}', year(getdate()))
    
    select @s info, @g g
    select 'h3' headerTag 
END

3. Добавляем кнопку as-print для печати содержимого контейнера с id = @g. Разметка формы: 

<a href="#" class="btn btn-primary as-print float-right" data-cont="#{colview-g}"><i class="fa fa-print"></i> Print</a>
{form-title}
<div id="{colview-g}">
{colview-info}
</div>
Насколько полезна эта возможность?

Другие модули

Последние обновления

Платформа Falcon Space

Это снижение стоимости владения

за счет меньшего количества людей для поддержки

Это быстрое внесение изменений

по ходу эксплуатации программы

Это современный интерфейс

полная адаптация под мобильные устройства