Создание PDF документов (new!)

Radzhab

Client
Регистрация
23.05.2014
Сообщения
1 500
Благодарностей
1 268
Баллы
113
88283


Доброе время суток форумчане. Сегодня завершается наша трилогия по работе с документами разного формата из ZennoPoster. Word-http://zennolab.com/discussion/threads/sozdanie-word-dokumentov.15666/ Excel - http://zennolab.com/discussion/threads/sozdanie-excel-fajlov.15797/
___________________________________________________________________________
Работать мы будем конечно же с долгожданным форматом PDF
Качаем библиотеку PDFsharp по ссылке https://pdfsharp.codeplex.com/

88284


Открываем архив, заходим в папку GDI+ и переносим файл PdfSharp.dll папку ExternalAssemblies. Если такой папки нет - просто создаем. У меня демо версия зеннки, поэтому такой путь.

88285


Добавляем ссылку на библиотеку через элемент Ссылки на GAC

88286


Добавляем в элемент Директивы using
C#:
using PdfSharp.Drawing;
using PdfSharp.Pdf;
using System.IO;
using System.Diagnostics;
88287


Теперь открываем элемент Свой c# код и вставляем данный код. Думаю комментарии излишне

88288


C#:
// Создаем новый PDF документ
PdfDocumnet document = new PdfDocumnet();

// Создаем пустую страницу
PdfPage page = document.AddPage();

// Получаем объект XGraphics для "рисования" элементов на странице
XGraphics gfx = XGraphics.FromPdfPage(page);

// Специальная опция для шрифта. Это чтобы русский текст нормально отображался
XPdfFontOptions options = new XPdfFontOptions(PdfFontEncoding.Unicode, PdfFontEmbedding.Always);

// Создаем шрифта
Xfont font = new XFont("Times New Roman", 40, XFontStyle.Bold, options);

// Рисуем текст. Да да) вы не ослышались. Рисуем текст в указанных координатах
gfx.DrawString("Здесь был водяной знак", font, brush,
    new XRect(0, 0, page.Width, page.Height),
XStringFormat.Center);

string filename = "Test.pdf";

// Сохраняем файл под названием Test.pdf
document.Save(filename);
// ... и запускам сразу в программе просмотра pdf файлов
Process.Start(filename);
Как вы видите есть один существенный недостаток - нужно указывать координаты. Но у PDFsharp есть младший брат - MigraDoc, который упростит нам работу со стилями в документе. Работу с MigraDoc рассмотрим чуть позже)
Итак, что нам еще нужно бывает при работе с PDF?
1) Защита документа от редактирования
2) Добавление водяного знака
3) Преобразование картинки в PDF

Пример редактирования политик защиты

88289


C#:
PdfSecuritySettings securitySettings = document.SecuritySettings;

// Пароль для открытия документа
securitySettings.UserPassword = ""; // Пустой пароль

// Пароль для редактирования документа
securitySettings.OwnerPasswod = "superpassword1";

// Печать с высоким разрешением
securitySettings.PermitFullQualityPrint = false;

// Изменения документа
securitySettings.PermitModifyDocument = false;

// Комментирование
securitySettings.PermitAnnotations = false;

// Заполнение полей форм или подписание
securitySettings.PermitFormsFill = false;

// Компоновка документа
securitySettings.PermitAssembleDocument = false;

// Копирование содержимого
securitySettings.PermitExtractContent = false;

// Расширенный доступ к содержимому
securitySettings.PermitAccessibilityExtractContent = false;

// Сохраняем файл под название Test.pdf
document.Save(filename);
Добавления водяного знака

88290


C#:
// Создаем шрифт
Xfont font = new XFont("Times New Roman", 40, XFontStyle.Bold, options);

// Функции поворота теста
gfx.TranslateTransform(page.Width / 2, page.Height / 2);
gfx.RotateTransform(-Math.Atan(page.Height / page.Width) * 180 / Math.PI);
gfx.TranslateTransform(-page.Width / 2, -page.Height / 2);

// Создаем полупрозрачную кисть для более реалистичного вида
XBrush brush = new XSolidBrudh(XColor.FromArgb(128, 255, 0, 0));

// Рисуем водяной знак
gfx.DrawString("Здесь был водяной знак", font, brush,
    new XRect(0, 0, page.Width, page.Height),
XStringFormat.Center);
Конвертация Jpeg в PDF

88291


C#:
// Создаем новый PDF документ
PdfDocument doc = new PdfDocument();

// Добавляем пустую страницу
doc.Pages.Add(new PdfPage());

Xgraphics xgr = XGraphics.FromPdfPage(doc.Pages[0]);

// Указываем путь к картинке
XImage img = XImage.FromFile(@"D:\123.jpg");

// Координаты начала вставки картинки
xgr.DrawImage(img, 0, 0);

// Сохраняем PdfDocument
doc.Save("Zenno.pdf");

doc.Close();

Process.Start("Zenno.pdf");
Жду пожеланий по поводу добавления дополнительных плюшек)
 
Тема статьи
Другое
Номер конкурса статей
Второй конкурс статей

Для запуска проектов требуется программа ZennoPoster или ZennoDroid.
Это основное приложение, предназначенное для выполнения автоматизированных шаблонов действий (ботов).
Подробнее...

Для того чтобы запустить шаблон, откройте нужную программу. Нажмите кнопку «Добавить», и выберите файл проекта, который хотите запустить.
Подробнее о том, где и как выполняется проект.

Последнее редактирование модератором:

LmPopo

Client
Регистрация
06.12.2012
Сообщения
299
Благодарностей
136
Баллы
43
Radzhab каждой созданной темой заставляет расчехлять плюсомёт )
 

strannic

Client
Регистрация
05.12.2010
Сообщения
224
Благодарностей
10
Баллы
18
А как проще всего конвертировать уже созданные html документы в pdf ?
В которых есть стили и картинки ? И которые лежат в локальной папке ?
 

Radzhab

Client
Регистрация
23.05.2014
Сообщения
1 500
Благодарностей
1 268
Баллы
113
Генерация PDF из HTML

Рассмотрим сегодня создание pdf из html файлов. Для этого надо скачать программу wkhtmltopdf по ссылке http://sourceforge.net/projects/wkhtmltopdf/?source=typ_redirect
____________________________________________________________________________



Указываем путь установки. Дальше он нам пригодится


Открываем элемент Свой c# код и вставляем следующий код
C#:
Process p = new Process();
p.StartInfo.UseShellExecute = false;
p.StartInfo.CreateNoWindow = true;
p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
p.StartInfo.FileName =@"C:\Program Files\wkhtmltopdf\bin\wkhtmltopdf.exe"; // Путь к программе
p.StartInfo.Arguments = "-l K:\\1.html TestPDF.pdf"; // -l это спец.ключ для быстрой генерации. Теряем качество
p.Start();
p.WaitForExit(99999);


Вуаля) Вот и весь код. 5 Страниц данной темы весят ~2,6 Мб. Это с ключом -l. Без него весит побольше ну и генерация тоже занимает больше времени
И напоследок генерация пдф файлов из нескольких html-файлов в папке

После того как запустим программу получаем

pS Просьба к админам добавить в конкурсную тему) Ну и этот пост сделать продолжением первого поста
 

Radzhab

Client
Регистрация
23.05.2014
Сообщения
1 500
Благодарностей
1 268
Баллы
113
вот пример того что получилось
 

Вложения

  • 2,6 МБ Просмотры: 1 827

7make

Client
Регистрация
25.06.2011
Сообщения
1 547
Благодарностей
1 311
Баллы
113

Обращаем Ваше внимание на то, что данный пользователь заблокирован.
Не рекомендуем проводить с 7make какие-либо сделки.

все канешь хорошо, но есть вопрос .
для чего это нужно в зенно?
какое практическое применение?
 
  • Спасибо
Реакции: Radzhab

Radzhab

Client
Регистрация
23.05.2014
Сообщения
1 500
Благодарностей
1 268
Баллы
113
  • Спасибо
Реакции: Cop, caine и AlisaZ

AlisaZ

Client
Регистрация
17.09.2014
Сообщения
159
Благодарностей
174
Баллы
43
  • Спасибо
Реакции: Radzhab

tatarin

Client
Регистрация
28.10.2012
Сообщения
805
Благодарностей
137
Баллы
43
Radzhab, круто! Продолжай в том же духе!
 
  • Спасибо
Реакции: Radzhab

alekwuy

Client
Регистрация
06.04.2013
Сообщения
1 631
Благодарностей
461
Баллы
83

seoBB

Client
Регистрация
07.09.2010
Сообщения
130
Благодарностей
20
Баллы
18

alekwuy

Client
Регистрация
06.04.2013
Сообщения
1 631
Благодарностей
461
Баллы
83
  • Спасибо
Реакции: Radzhab

seoBB

Client
Регистрация
07.09.2010
Сообщения
130
Благодарностей
20
Баллы
18

alekwuy

Client
Регистрация
06.04.2013
Сообщения
1 631
Благодарностей
461
Баллы
83
  • Спасибо
Реакции: Axel и Radzhab

stifler

Пользователь
Регистрация
07.07.2014
Сообщения
90
Благодарностей
8
Баллы
8
очень хорошая тема, а кто может подсказать,можно сделать прин скрин и добавить в PDF ? и как это сделать ?
 

Radzhab

Client
Регистрация
23.05.2014
Сообщения
1 500
Благодарностей
1 268
Баллы
113
принтскрин надо сперва сохранить в jpeg, а потом уже добавлять в пдф
 

bedl0

Client
Регистрация
07.12.2012
Сообщения
244
Благодарностей
56
Баллы
28
У вас всегда очень качественные и класные статьи, приятно читать .
 
  • Спасибо
Реакции: Radzhab

stifler

Пользователь
Регистрация
07.07.2014
Сообщения
90
Благодарностей
8
Баллы
8

GHU

Client
Регистрация
31.12.2012
Сообщения
53
Благодарностей
6
Баллы
8

stifler

Пользователь
Регистрация
07.07.2014
Сообщения
90
Благодарностей
8
Баллы
8
рад что у тебя есть чувство юмора )))
 
  • Спасибо
Реакции: GHU

alekwuy

Client
Регистрация
06.04.2013
Сообщения
1 631
Благодарностей
461
Баллы
83
а можешь приложить рабочий шаблон?
у меня не запускается(
 
  • Спасибо
Реакции: aluf

stifler

Пользователь
Регистрация
07.07.2014
Сообщения
90
Благодарностей
8
Баллы
8

stifler

Пользователь
Регистрация
07.07.2014
Сообщения
90
Благодарностей
8
Баллы
8
ну кто не буди подскажите где надо сделать изменение в этом коде?

  1. // Создаем новый PDF документ
  2. PdfDocument doc = new PdfDocument();

  3. // Добавляем пустую страницу
  4. doc.Pages.Add(new PdfPage());

  5. Xgraphics xgr = XGraphics.FromPdfPage(doc.Pages[0]);

  6. // Указываем путь к картинке
  7. XImage img = XImage.FromFile(@"D:\123.jpg");

  8. // Координаты начала вставки картинки
  9. xgr.DrawImage(img, 0, 0);

  10. // Сохраняем PdfDocument
  11. doc.Save("Zenno.pdf");

  12. doc.Close();

  13. Process.Start("Zenno.pdf");
 

aluf

Client
Регистрация
07.03.2010
Сообщения
43
Благодарностей
3
Баллы
8
Сделал все, как написанно в статье и не работает ничего (
 

Radzhab

Client
Регистрация
23.05.2014
Сообщения
1 500
Благодарностей
1 268
Баллы
113
Вы хоть логи приложили бы...
 

Wide

Client
Регистрация
04.02.2013
Сообщения
945
Благодарностей
257
Баллы
63
все канешь хорошо, но есть вопрос .
для чего это нужно в зенно?
какое практическое применение?
индексация документов вам ни чего не говорит?) а там сами думайте...
 

twitter

Client
Регистрация
05.09.2013
Сообщения
20
Благодарностей
8
Баллы
3
Radzhab нужна ваша помощь. У меня ZennoPoster v5.1.2.0. Генерирую pdf файлы из нескольких html. Немного переделал эту строку в шаблоне:
Код:
p.StartInfo.Arguments = string.Format("-l {0} D:\\siteru\\" + System.IO.Path.GetFileNameWithoutExtension(file) + ".pdf", file);
Подготовил к генерированию 1155 html файлов. Но, после создания 563 pdf файлов, шаблон останавливается. Zennoposter не вылетает:


Я вот что заметил: у меня все файлы на немецком языке. И скорее всего эта проблема связана с умлаутами. 563 файла, это файлы в названии которых нет этих бля....их умлаутов. Там где они есть, pdf файлы не генерируются.
Как жить дальше? :bn:
 

Radzhab

Client
Регистрация
23.05.2014
Сообщения
1 500
Благодарностей
1 268
Баллы
113
) За генерацию отвечает wkhtmltopdf. Нужно искать альтернативу
 
  • Спасибо
Реакции: twitter

AZANIR

Client
Регистрация
09.06.2014
Сообщения
405
Благодарностей
198
Баллы
43

Сталисплав

Новичок
Регистрация
02.10.2014
Сообщения
1
Благодарностей
0
Баллы
1
Скажите, можно ли открыть pdf-документ, чтобы в него внести водяные знаки?

У меня почему-то несмотря на подключение библиотеки PdfSharp функция PdfDocument.Open (...) не работает. Кто столкнулся с этой проблемой? Может есть решение?
 

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)