Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
 Аватар для kodzuru
20 / 19 / 22
Регистрация: 22.06.2016
Сообщений: 158

Как ускорпить генерацию PDF через iTextSharp?

03.12.2019, 10:47. Показов 952. Ответов 2

Студворк — интернет-сервис помощи студентам
Всем доброго времени суток.
Генерирую pdf-ку страниц от 5 до 50. Все данные расположены либо в БД либо в сторонних сервисах. Получение данных занимает около 2-5 секунд, но генерация pdf-ки через либу iTextSharp занимает около 5 минут. Хотя там ничего особого в этой pdf-ке нет.
Как ускорить её генерацию? Что делать ?
Генерировать её по таймеру ночью раз в сутки и хранить в БД ? Или есть какие танцы с бубном по ускорению её генерации?
Принимается любая помощь. любые советы.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
03.12.2019, 10:47
Ответы с готовыми решениями:

Как получить текст файла PDF (iTextSharp)
using System; using System.IO; using System.Linq; using System.Windows.Forms; using iTextSharp.text.pdf; using...

Библиотека iTextSharp: как в pdf вставить вертикальный текст
Подниму тему. Необходимо в pdf вставить вертикальный текст (VerticalText). использую пример http://itextpdf.com/examples/iia.php?id=202 ...

Itextsharp из PDF в текст
Доброго времени суток! Не могу понять в чём проблема. Конвертирую PDF в TXT с помощью ITEXTsharp. //конвертируем PDF в TXT ...

2
 Аватар для Immo
692 / 509 / 238
Регистрация: 02.10.2012
Сообщений: 1,741
03.12.2019, 10:57
Цитата Сообщение от kodzuru Посмотреть сообщение
Генерировать её по таймеру ночью раз в сутки и хранить в БД
бд не будет рада такому, в крайнем случае лучше в файловой системе хранить и указывать ссылки, или создавать иерархию.
Цитата Сообщение от kodzuru Посмотреть сообщение
iTextSharp занимает около 5 минут. Хотя там ничего особого в этой pdf-ке нет.
показывайте код, и пример файла
0
 Аватар для kodzuru
20 / 19 / 22
Регистрация: 22.06.2016
Сообщений: 158
03.12.2019, 11:17  [ТС]
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
        public byte[] GetDebtorCase(DebtorsList debtor, 
            IEnumerable<DebtorAdditionalInfoSort> sortData, 
            DebtorAdditionalInfoModel additionalInfo)
        {
 
            Core.PdfDocument root = new Core.PdfDocument();
            root.StartNumberedPage = 3;
            root.HeaderType = Core.Enums.PdfHeaderTypes.Type2;
            root.FooterType = Core.Enums.PdfFooterTypes.Type2;
            root.SkipHeaderFooterOnFirstPage = true;
 
            root.Margin = new PdfDocumentMargin()
            {
                Top = Utilities.MillimetersToPoints(41.2f),
                Bottom = Utilities.MillimetersToPoints(51f),
                Left = Utilities.MillimetersToPoints(17.5f),
                Right = Utilities.MillimetersToPoints(22.5f)
            };
 
 
            root.Childrens.Add(new Pages.TitlePage(debtor.AffairNumber));
            root.Childrens.Add(new Pages.CenterPage(debtor.AffairNumber, debtor.ShortName));
 
           
            root.Childrens.Add(new Pages.DebtorPage(debtor));
 
            if (additionalInfo != null)
            {
                IEnumerable<PdfElement> additionalInfoElements = new Debtor.Pages.AdditionalInfo.AdditionalInfoContainer(additionalInfo, sortData, false).Childrens;
                foreach (var element in additionalInfoElements)
                {
                    root.Childrens.Add(element);
                    root.Childrens.Add(new Pages.NewPage());
                }
                //root.Childrens.AddRange(new Debtor.Pages.AdditionalInfo.AdditionalInfoContainer(additionalInfo, sortData, false).Childrens);
            }
 
 
            root.Childrens.Add(new Pages.ContentsPage());
 
 
            return root.GetBytes();
 
        }
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
public class PdfDocument
    {
        public List<PdfElement> Childrens = new List<PdfElement>();
 
        public Enums.PdfHeaderTypes HeaderType;
        public Enums.PdfFooterTypes FooterType;
        public PdfDocumentMargin Margin { get; set; }
 
        public bool SkipHeaderFooterOnFirstPage { get; set; }
 
        public int? StartNumberedPage { get; set; }
 
        public PdfDocument()
        {
            Margin = new PdfDocumentMargin()
            {
                Left = 60f,
                Right = 40f,
                Top = 80f,
                Bottom = 80f
            };
        }
 
        public PdfDocument(PdfDocumentMargin margin, Enums.PdfHeaderTypes headerType, Enums.PdfFooterTypes footerType)
        {
            this.Margin = margin;
            this.HeaderType = headerType;
            this.FooterType = footerType;
        }
 
        public PdfDocument(Enums.PdfHeaderTypes headerType, Enums.PdfFooterTypes footerType)
        {
            Margin = new PdfDocumentMargin()
            {
                Left = 60f,
                Right = 40f,
                Top = 80f,
                Bottom = 80f
            };
            this.HeaderType = headerType;
            this.FooterType = footerType;
        }
 
        public byte[] GetBytes()
        {
            Document document = new Document(PageSize.A4, Margin.Left, Margin.Right, Margin.Top, Margin.Bottom);
 
            using (MemoryStream memoryStream = new MemoryStream())
            {
                PdfWriter writer = PdfWriter.GetInstance(document, memoryStream);
                writer.PageEvent = GetPageEvent();
                writer.SetLinearPageMode();
 
                document.Open();
 
                LoadFonts();
 
                IEnumerable<IElement> elements;
                int? pagePos = null, startPos = null;
                foreach (var children in Childrens)
                {
                    elements = children.Generate(document, writer);
 
                    if (children.PagePos.HasValue)
                    {
                        pagePos = children.PagePos;
                        startPos = writer.CurrentPageNumber;
 
                        IPageEvent eve = (IPageEvent)writer.PageEvent;
                        eve.StopNumberedPages = startPos;
                    }
 
                    if (elements != null)
                    {
                        foreach (var element in elements)
                            document.Add(element);
                        
                    }
                }
 
                if (pagePos.HasValue && startPos.HasValue)
                {
                    var totalPage = writer.ReorderPages(null);
                    
                    List<int> reorderList = new List<int>(totalPage);
                    for (int i = 1; i < startPos.Value; i++)
                    {
                        reorderList.Add(i);
                    }
 
                    for (int i = startPos.Value; i <= totalPage; i++)
                    {
                        reorderList.Insert(pagePos.Value, i);
                    }
 
                    int[] rrr = reorderList.ToArray();
                    writer.ReorderPages(rrr);
                }
                
 
                
 
                
 
                document.Close();
                writer.Close();
 
                byte[] bytes = memoryStream.ToArray();
                memoryStream.Close();
                return bytes;
            }
        }
 
        private IPageEvent GetPageEvent()
        {
            IPageEvent pageEvent = new IPageEvent();
 
            switch (HeaderType)
            {
                case Enums.PdfHeaderTypes.Type1:
                    {
                        pageEvent.Header = new Headers.HeaderType1();
                        break;
                    }
                case Enums.PdfHeaderTypes.Type2:
                    {
                        pageEvent.Header = new Headers.HeaderType2();
                        break;
                    }
            }
 
            switch (FooterType)
            {
                case Enums.PdfFooterTypes.Type1:
                    {
                        pageEvent.Footer = new Footers.FooterType1();
                        break;
                    }
                case Enums.PdfFooterTypes.Type2:
                    {
                        pageEvent.Footer = new Footers.FooterType2();
                        break;
                    }
            }
 
            pageEvent.SkipFirstPage = SkipHeaderFooterOnFirstPage;
            pageEvent.StartNumberedPages = StartNumberedPage;
 
            return pageEvent;
        }
 
        private void LoadFonts()
        {
            var titleFont = new PdfFont(Enums.PdfFonts.TimesRoman, 20, Font.BOLD);
            var subtitleFont = new PdfFont(Enums.PdfFonts.TimesRoman, 16, Font.BOLD);
            var textFont = new PdfFont(Enums.PdfFonts.TimesRoman, 14, Font.NORMAL);
 
            PdfElement.SetFonts(titleFont, subtitleFont, textFont);
        }
    }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
03.12.2019, 11:17
Помогаю со студенческими работами здесь

Установка картинки в pdf (iTextSharp)
Всем привет!!! Недавно решил попробовать работать с pdf-файлами и столкнулся с проблемой установки картинки в pdf. В общем написал код:...

Чтение Properties PDF в iTextSharp
Добрый день. Задача - проверить все значения на вкладке Security в Properties PDF-файла. Использую библиотеку iTextSharp 5.5.8. Часть...

ITextSharp, Размещение картинки на PDF
Здравствуйте! Подскажите, пожалуйста, как с помощью C# и iTextSharp разместить картинку на уже существующем PDF (открыть PDF, поместить...

Itextsharp зашифровать pdf файл от редактирования
Добрый день. Добавлено через 12 минут Добрый день. У меня возникла проблема, решение которой ни самостоятельно ни в интернете я...

ITextSharp - работа с PDF. Форматирование текста
Здравствуйте, уважаемые обитатели форума! Возникла необходимость работать с PDF-файлами. Первым делом скачал и импортировал iTextSharp.dll....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru