Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
8 / 8 / 4
Регистрация: 11.03.2015
Сообщений: 212
1

Создаётся битый файл iTextSharp

08.07.2016, 16:00. Показов 1833. Ответов 4

Author24 — интернет-сервис помощи студентам
Доброго дня. Создаю PDF файл с помощью библиотеки iTextSharp, но он создаётся битым, то есть содержимое не открывается. До этого всё работало. За комментировал весь код который передаёт в файл данные и оставил тольк следующее:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
iTextSharp.text.Rectangle rec = new iTextSharp.text.Rectangle(PageSize.A4);
 
            Document doc = new Document(rec,  36, 36, 50, 50);
 
            ////добавление шрифта поддерживающего русский язык
            BaseFont baseFont = BaseFont.CreateFont(@"..\..\arial.ttf", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
            iTextSharp.text.Font font = new iTextSharp.text.Font(baseFont, iTextSharp.text.Font.DEFAULTSIZE, iTextSharp.text.Font.NORMAL);
 
            try
            {
                using (FileStream fs = new FileStream(@"..\..\test.pdf", FileMode.Create, FileAccess.Write, FileShare.None))
                {
 
                    iTextSharp.text.Image img;
 
 
                    doc.Open();
 
 
 
                    doc.Close();
 
                    MessageBox.Show("Файл полностью готов.");
То есть на данный момент должен создаваться пустой файл, но вместо этого получается битый файл. Пишет следующее при открытие через Adobe Reader: "формат файла не поддерживается или файл был поврежден"
В чём может быть проблема?
За ранее спасибо.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.07.2016, 16:00
Ответы с готовыми решениями:

Не создаётся exe файл. Создаётся папка netcoreapp2.0
На рабочем компе всё нормально, exe лежит в Debug. На домашнем может с настройками что намудрил,...

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

Пытаюсь скачать файл через Guardlink - получаю битый файл
Итак, у меня есть VBA-код, который скачивает файлы с сервера по HTTP: Sub Macross1() LinkToFile$...

Битый файл
На неделе экзамен. По сети стащили документ с ответами у препода. НО, рано обрадовались. Открываем...

4
158 / 187 / 48
Регистрация: 25.11.2013
Сообщений: 978
09.07.2016, 03:44 2
У тебя создается пустой файл, doc ничего не пишет в FileStream
0
8 / 8 / 4
Регистрация: 11.03.2015
Сообщений: 212
12.07.2016, 15:58  [ТС] 3
DataPlanner, Это я тут в пример вывел, а так у меня между doc.Open(); doc.Close(); достаточно кода.

Добавлено через 6 минут
Так как даже, когда я убрал всё, файл всё равно получался битым. Хотя по логике, он ведь должен просто создать пустой файл. Или я не прав?

Добавлено через 1 час 2 минуты
DataPlanner, Я откатил версию своего проекта до рабочей, немного поправил его и он слова делает мой файл битым. В чём может быть причина? Я за комментировал весть код, который добавил и всё равно это происходит. Что ему не так? Что я делаю не правильно?

прилагаю весь код.

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
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using iTextSharp.text;
using iTextSharp.text.pdf;
using System.Security;
using iTextSharp.text.html.simpleparser;
 
namespace FilePDF
{
    public partial class Form1 : Form
    {
        private List<string> pathImages = new List<string>();
 
        public Form1()
        {
            InitializeComponent();
        }
 
        private void buttonCratePDF_Click(object sender, EventArgs e)
        {
            //поля титульного листа
            string filePath;
            string fileName;
            string authorName;
            string theme;
            string plase;
            string year;
 
            
            fileName = textBoxNamePDF_tp.Text;
            authorName = textBoxAuthor_tp.Text;
            theme = textBoxTheme_tp.Text;
            plase = textBoxPlace_tp.Text;
            year = textBoxYear_tp.Text;
 
            filePath = @"..\.." + fileName + ".pdf";
 
            //размер страницы
            iTextSharp.text.Rectangle rec = new iTextSharp.text.Rectangle(PageSize.A4);
 
 
            Document doc = new Document(rec, 36, 72, 108, 180);
 
            ////добавление шрифта поддерживающего русский язык
            BaseFont baseFont = BaseFont.CreateFont(@"..\..\arial.ttf", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
            iTextSharp.text.Font font = new iTextSharp.text.Font(baseFont, iTextSharp.text.Font.DEFAULTSIZE, iTextSharp.text.Font.NORMAL);
 
 
            try
            {
                using (FileStream fs = new FileStream(filePath, FileMode.Create, FileAccess.Write, FileShare.None))
                {
                    
                    // Read in the contents of the Receipt.htm file...
                    string contents = File.ReadAllText(@"../../Titlepage.html");
                    // Replace the placeholders with the user-specified text
                    contents = contents.Replace("[THEME]", theme);
                    contents = contents.Replace("[AUTHOR]", authorName);
                    contents = contents.Replace("[CITY]", plase);
                    contents = contents.Replace("[YEAR]", year);
 
 
                    //Parse the HTML string into a collection of elements...
                    var parsedHtmlElements = HTMLWorker.ParseToList(new StringReader(contents), null);
 
                    
                    
                    
                    iTextSharp.text.Image img;
 
                    doc.Open();
 
                    // Enumerate the elements, adding each one to the Document...
                    foreach (var htmlElement in parsedHtmlElements)
                        doc.Add(htmlElement as IElement);
 
                    var t = new PdfPTable(1);
                    t.WidthPercentage = 100;
                    var c = new PdfPCell();
                    c.VerticalAlignment = Element.ALIGN_MIDDLE;
                    c.MinimumHeight = doc.PageSize.Height - (doc.BottomMargin + doc.TopMargin);
                    
                    Paragraph authorNameParagraph = new Paragraph(authorName, font);
                    authorNameParagraph.Alignment = Element.ALIGN_CENTER;
 
                    Paragraph themeParagraph = new Paragraph("Тема: " + theme, font);
                    authorNameParagraph.Alignment = Element.ALIGN_CENTER;
 
                    Paragraph plaseAndYearParagraph = new Paragraph(plase + " " + year, font);
                    authorNameParagraph.Alignment = Element.ALIGN_CENTER;
 
                    c.AddElement(authorNameParagraph);
                    c.AddElement(themeParagraph);
                    c.AddElement(plaseAndYearParagraph);
                    //Add the cell to the paragraph
                    t.AddCell(c);
                    //Add the table to the document
                    doc.Add(t);
 
 
                    foreach (string element in pathImages)
                    {
 
                        img = iTextSharp.text.Image.GetInstance(element);
                        img.ScaleToFit(300f, 300f);
 
                        doc.Add(img);
 
                    }
 
                    doc.Close();
                    MessageBox.Show("Файл создан, добавляются страницы.");
                    AddPageNumber(filePath);
                    MessageBox.Show("Файл полностью готов.");
                    
                }   
            }
            catch (DocumentException ex)
            {
                Console.WriteLine(ex.Message);
            }
            catch (IOException ex)
            {
                Console.WriteLine(ex.Message);
            }
        }
        
        protected void AddPageNumber(string filePath)//возможна проблема, когда файл получается слишком большой.(кажется)
        {
            byte[] bytes = File.ReadAllBytes(filePath);
            iTextSharp.text.Font blackFont = FontFactory.GetFont("Arial", 12, iTextSharp.text.Font.NORMAL, BaseColor.BLACK);
            using (MemoryStream stream = new MemoryStream())
            {
                PdfReader reader = new PdfReader(bytes);
                using (PdfStamper stamper = new PdfStamper(reader, stream))
                {
                    int pages = reader.NumberOfPages;
                    for (int i = 2; i <= pages; i++)
                    {
                        ColumnText.ShowTextAligned(stamper.GetUnderContent(i), Element.ALIGN_RIGHT, new Phrase(i.ToString(), blackFont), 568f, 15f, 0);
                    }
                }
                bytes = stream.ToArray();
            }
            File.WriteAllBytes(filePath, bytes);
 
        }
 
        private void textBoxNamePDF_TextChanged(object sender, EventArgs e)
        {
 
        }
 
        private void label1_Click(object sender, EventArgs e)
        {
 
        }
 
        private void InitializeOpenFileDialog()
        {
            // Set the file dialog to filter for graphics files.
            this.openFileDialog1.Filter =
                "Images (*.BMP;*.JPG;*.GIF)|*.BMP;*.JPG;*.GIF|" +
                "All files (*.*)|*.*";
 
            // Allow the user to select multiple images.
            this.openFileDialog1.Multiselect = true;
            this.openFileDialog1.Title = "My Image Browser";
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            OpenFileDialog openFile = new OpenFileDialog();
            openFile.Multiselect = true;
 
            openFile.Filter = "Image Files(*.BMP;*.JPG;*.GIF;*.TIF;*.WMF)|*.BMP;*.JPG;*.GIF;*.TIF;*.WMF|All files (*.*)|*.*";
            //openFile.FilterIndex = 2;//для выбора начального расширения
            if (openFile.ShowDialog() == DialogResult.OK)
            {
                pictureBox1.Image = new Bitmap(openFile.FileName);
                //textBox1.Text += openFile.FileNames;
 
                pathImages.Clear();
                foreach (string element in openFile.FileNames)
                {
                    pathImages.Add(element);
                }
                textBox1.Text = String.Join(Environment.NewLine, pathImages);
            }
 
 
        }
 
 
 
 
    }
}
Добавлено через 2 минуты
P.s. на данный момент попытался добавить титульник с помощью html файла, так как это вроде бы проще, а так же просто попробовать.
0
158 / 187 / 48
Регистрация: 25.11.2013
Сообщений: 978
13.07.2016, 02:39 4
Прости, у меня нет пока возможности тебе помочь, я завален работой. Используй мой файл это код с продакшена, модифицируй его под себя/
1
8 / 8 / 4
Регистрация: 11.03.2015
Сообщений: 212
13.07.2016, 14:40  [ТС] 5
DataPlanner, Хорошо. Спасибо. Хорошая идея.
0
13.07.2016, 14:40
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.07.2016, 14:40
Помогаю со студенческими работами здесь

При нажатии на кнопку файл не создается на диске, а он создается только после сворачивания или закрытия окна...
Знакомлюсь с графическим интерфейсом Java Swing. Появилась такая проблема: при нажатии на кнопку...

Word записывает битый файл
Здравствуйте. У меня такой вопрос. Установила Office2010. Создаю документ, записываю на диск через...

Битый музыкальный файл при экспорте
Так получилось,что когда я экспортировал свой проект из FL Studio в wav,случилась ошибка,которая...

Как восстановить битый PSD файл?
Приветствую! Во время сохранения psd файла завис компьютер, после перезагрузки ПК, Photoshop выдал...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru