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

Bollador

Client
Регистрация
24.11.2017
Сообщения
347
Благодарностей
68
Баллы
28
А как пдф файл размножить? При этом цвет, шрифт, текста и остальное каждый раз менялось? Разные пдф файлы получились.
 

Chick80

Client
Регистрация
04.12.2014
Сообщения
298
Благодарностей
82
Баллы
28
А как пдф файл размножить? При этом цвет, шрифт, текста и остальное каждый раз менялось? Разные пдф файлы получились.
Думаю, для этого нужно html-файл менять (донора). Передо мной такой задачи не стояло, поэтому не могу ничего конкретного посоветовать.
Попробуйте Файл-Взять текст, изменить этот текст в переменной, затем Файл-Записать текст.
 

backoff

Client
Регистрация
20.04.2015
Сообщения
5 914
Благодарностей
6 381
Баллы
113
А как пдф файл размножить? При этом цвет, шрифт, текста и остальное каждый раз менялось? Разные пдф файлы получились.
делаешь болванку в html, генеришь html, перегоняешь готовый в pdf
 

Vlad_Curnoi

Client
Регистрация
09.08.2017
Сообщения
356
Благодарностей
156
Баллы
43

Доброе время суток форумчане. Сегодня завершается наша трилогия по работе с документами разного формата из 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/



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

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

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


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


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

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

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);
Добавления водяного знака

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

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");
Жду пожеланий по поводу добавления дополнительных плюшек)
А где сейчас можно найти dll?Сайт изменился у них,и в архивах нового сайта нет библиотеки в dll.Если можно можете закинуть сюда?
 

Radzhab

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

Vlad_Curnoi

Client
Регистрация
09.08.2017
Сообщения
356
Благодарностей
156
Баллы
43

fri-lancer

Client
Регистрация
01.10.2013
Сообщения
404
Благодарностей
155
Баллы
43
  • Спасибо
Реакции: Dimson

Dima_External

Пользователь
Регистрация
23.10.2017
Сообщения
75
Благодарностей
4
Баллы
8
Приветствую всех!
С созданием пдф документа разобрался, поправил ошибки в коде - все поехало (благодаря одному человеку из темы).
Подскажите, пожалуйста, что нужно подредактировать в коде, чтобы можно было добавить ватермарку?
Сейчас при запуске кода получаю кучку ошибок - http://prntscr.com/il34um

Код:
// Создаем шрифт
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);
 

moRL

Client
Регистрация
18.07.2016
Сообщения
101
Благодарностей
70
Баллы
28
Приветствую всех!
С созданием пдф документа разобрался, поправил ошибки в коде - все поехало (благодаря одному человеку из темы).
Подскажите, пожалуйста, что нужно подредактировать в коде, чтобы можно было добавить ватермарку?
Сейчас при запуске кода получаю кучку ошибок - http://prntscr.com/il34um
Лучше поздно, чем никогда))

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

// Создаем пустую страницу
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.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 XSolidBrush(XColor.FromArgb(128, 255, 0, 0));
// Рисуем водяной знак
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);
 

Gizmond

Client
Регистрация
18.02.2017
Сообщения
263
Благодарностей
51
Баллы
28
Всем привет. Подскажите пожалуйста вставил картинку в pdf. Нужно при чтобы при нажатии на картинку переходило по ссылке.
 

Zoron

Client
Регистрация
24.09.2014
Сообщения
145
Благодарностей
39
Баллы
28
сверстай хтмл документ, чтобы картинка была ссылкой и конвертни в пдф
 

Gizmond

Client
Регистрация
18.02.2017
Сообщения
263
Благодарностей
51
Баллы
28
сверстай хтмл документ, чтобы картинка была ссылкой и конвертни в пдф
Мне нужно добавить это в код, без html конверта.
Т.е у меня добавляется текст , ниже вставляется картинка. И нужно привязать к картинке ссылку.

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

Gizmond

Client
Регистрация
18.02.2017
Сообщения
263
Благодарностей
51
Баллы
28
del
 
Последнее редактирование:

Fastics

Client
Регистрация
13.12.2015
Сообщения
5
Благодарностей
0
Баллы
1
Доброго времени суток, столкнулся с одной задачей.. Суть заключается в том что с файла PDF - нужно вытянуть изоображения "JPG" как ресурсы.
Как вариант, нашел онлайн сервис - который позволяет вытянуть изоображения по штучно и скачать готовый архив с фото, без потери качества и каких либо водных знаков, маркеров которые могут присутствовать в PDF.

P.S Автору темы низкий поклон! Хотелось бы все же задать вопрос по этому направлению... Реально ли реализовать средствами ZennoPoster'a + С# снипетов с использованием указанной библиотеки?
Или все таки проще автоматизировать загрузку файлов PDF на данный сервис: https://pdfcandy.com/ru/extract-images.html
Альтернативный сервис с таким же функционалом, вот: https://www.ilovepdf.com/ru/pdf_to_jpg
Файл PDF и результат извлеченных фото тут: https://fex.net/629724361563
 

Radzhab

Client
Регистрация
23.05.2014
Сообщения
1 500
Благодарностей
1 263
Баллы
113
Доброго времени суток, столкнулся с одной задачей.. Суть заключается в том что с файла PDF - нужно вытянуть изоображения "JPG" как ресурсы.
Как вариант, нашел онлайн сервис - который позволяет вытянуть изоображения по штучно и скачать готовый архив с фото, без потери качества и каких либо водных знаков, маркеров которые могут присутствовать в PDF.

P.S Автору темы низкий поклон! Хотелось бы все же задать вопрос по этому направлению... Реально ли реализовать средствами ZennoPoster'a + С# снипетов с использованием указанной библиотеки?
Или все таки проще автоматизировать загрузку файлов PDF на данный сервис: https://pdfcandy.com/ru/extract-images.html
Альтернативный сервис с таким же функционалом, вот: https://www.ilovepdf.com/ru/pdf_to_jpg
Файл PDF и результат извлеченных фото тут: https://fex.net/629724361563
Посмотри в сторону библиотеки itextsharp. С помощью нее можно вытянуть картинки из пдф
 
  • Спасибо
Реакции: Fastics

art22

Client
Регистрация
24.06.2016
Сообщения
484
Благодарностей
68
Баллы
28
Как добавить все файлы из определенной папки в pdf? формат .xlsx 5-10 файлов в каждом папке. Очень надо благодарю
 

Kost9lbrik

Client
Регистрация
07.10.2014
Сообщения
110
Благодарностей
10
Баллы
18
Уважаемый Radzhab, не подскажите в какой кодировке должны быть html файлы для корректного отображения кириллицы? Хелп от проги не помог, там про кодировки ничего не нашел.
Методом тыка тоже пока что не нашел.
Возможно нужно что-то добавить в коде, но опять же не нашел об этом упоминаний (как я понимаю метод из либы pdfSharp не вариант, нужно именно в wkhtmltopdf искать как это сделать).

Заранее спасибо.
ЗЫ если кто-то еще в курсе (как я понял из темы ни у кого такой проблемы не возникало), то буду рад помощи :-)
 

macarone

Client
Регистрация
05.08.2011
Сообщения
27
Благодарностей
22
Баллы
8
Уважаемый Radzhab, не подскажите в какой кодировке должны быть html файлы для корректного отображения кириллицы? Хелп от проги не помог, там про кодировки ничего не нашел.
Методом тыка тоже пока что не нашел.
Возможно нужно что-то добавить в коде, но опять же не нашел об этом упоминаний (как я понимаю метод из либы pdfSharp не вариант, нужно именно в wkhtmltopdf искать как это сделать).

Заранее спасибо.
ЗЫ если кто-то еще в курсе (как я понял из темы ни у кого такой проблемы не возникало), то буду рад помощи :-)
Допустим я делал через dreamviewer сохранял голый html, кодировка utf-8, можно же с сайта сохранить страницу удалить лишнее, и да созданные html файлы массово переписывал в pdf прогой html to pdf, довольно быстро получалось.
 

Kost9lbrik

Client
Регистрация
07.10.2014
Сообщения
110
Благодарностей
10
Баллы
18
Допустим я делал через dreamviewer сохранял голый html, кодировка utf-8, можно же с сайта сохранить страницу удалить лишнее, и да созданные html файлы массово переписывал в pdf прогой html to pdf, довольно быстро получалось.
Спасибо.У меня почему-то вот такое вылезает(utf-8 ):
Перепробовал utf-8, win-1251, koi8-r, ansi и что-то мне подсказывает что лыжи не едут из-за лыжника :-).
UPD Проблема решается с кодировкой utf-8 c BOM :-). Спасибо за внимание.
 
  • Спасибо
Реакции: eee

Kost9lbrik

Client
Регистрация
07.10.2014
Сообщения
110
Благодарностей
10
Баллы
18
Уперся в новую проблемку.
Не подскажите как правильно указать аргумент --image-quality. Так не работает:
Код:
p.StartInfo.Arguments = string.Format("--image-quality {0} D:\\temp\\1\\" + System.IO.Path.GetFileNameWithoutExtension(file) + "Test.pdf", file);

p.StartInfo.Arguments = string.Format("--image-quality 50 D:\\temp\\1\\" + System.IO.Path.GetFileNameWithoutExtension(file) + "Test.pdf", file);

p.StartInfo.Arguments = string.Format("--image-quality {50} D:\\temp\\1\\" + System.IO.Path.GetFileNameWithoutExtension(file) + "Test.pdf", file);
В коммандной строке все работает, а в кубике нужно знать синтаксис, чем не владею.
Буду признателен за помощь :-).
Заранее спасибо

UPD Разобрался! Я оказывается не понимал зачем {0}. Немного гугла и метода тыка - помогло. Нужно учить C# :-)
Код:
p.StartInfo.Arguments = string.Format(" --image-quality 50 {0} D:\\temp\\1\\" + System.IO.Path.GetFileNameWithoutExtension(file) + "Test.pdf", file);
 
Последнее редактирование:

Dmitry

Client
Регистрация
03.07.2014
Сообщения
66
Благодарностей
5
Баллы
8
Столкнулся с такой задачей нужно конвертировать pdf в html и word в html. Кто-нибудь знает как это сделать?
 

Rainsteel

Client
Регистрация
08.04.2015
Сообщения
102
Благодарностей
9
Баллы
18

motka90

Client
Регистрация
23.02.2019
Сообщения
4
Благодарностей
0
Баллы
1
Всем привет, подскажите как можно распарсить pdf и нужные мне значения сделать переменными в зенке, чтобы потом вставить в значения на сайте
 

Rainsteel

Client
Регистрация
08.04.2015
Сообщения
102
Благодарностей
9
Баллы
18
Всем привет, подскажите как можно распарсить pdf и нужные мне значения сделать переменными в зенке, чтобы потом вставить в значения на сайте
можно попробовать перевести pdf в html
 

kiduep

Client
Регистрация
23.01.2012
Сообщения
59
Благодарностей
14
Баллы
8
Регистрация
08.10.2015
Сообщения
2
Благодарностей
0
Баллы
1
Всем привет! Подскажите как можно Зенкой копировать текст из PDF файла в файл .txt или Excel. Спасибо!
 

Vladimir71

Client
Регистрация
21.10.2015
Сообщения
95
Благодарностей
38
Баллы
18

fri-lancer

Client
Регистрация
01.10.2013
Сообщения
404
Благодарностей
155
Баллы
43

Delvig

Client
Регистрация
07.09.2016
Сообщения
132
Благодарностей
130
Баллы
43
С позволения автора (извините, если что-то не так делаю), расскажу о своем способе производства pdf-ов. Он ничем кардинально не отличается от вышеописанного, за исключением используемой софтины. Пользуюсь Total HTML Converter (от CoolUtils) - легко гуглится ломанная версия.
Код получается почти такой же (в общем-то отсюда его и брал, просто немножко изменил под параметры софтины):
Код:
Process p = new Process();
p.StartInfo.UseShellExecute = false;
p.StartInfo.CreateNoWindow = true;
p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
p.StartInfo.FileName =@"C:\Program Files (x86)\CoolUtils\Total HTML Converter\HTMLConverter.exe"; // Путь к программе
p.StartInfo.Arguments = project.Directory + @"\source\html.html "+ project.Directory + @"\pdf\TestPDF2.pdf"+@" -c PDF -engine internal -fo";
p.Start();
p.WaitForExit(99999);
Все ссылки замечательно расставляет и вообще работает без косяков. Пользуйтесь, кому нужно.
А не подскажите как поменять ориентацию листа в готовой пдф, а то альбомная ориентация не айс. Попробовал
  • -po - Расположение бумаги
    • Portrait - Вертикально
  • -ps - Размер бумаги
    • Letter - Letter
Не помогло.
 
Последнее редактирование:

Ikigai

Client
Регистрация
13.12.2016
Сообщения
275
Благодарностей
27
Баллы
28
А как обратное можно сделать из пдф в тхт / csv /xlsx конвертнуть?
 
  • Спасибо
Реакции: Radzhab

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