Difference between revisions of "PDF"
(Created page with "... PDF") |
|||
| (50 intermediate revisions by the same user not shown) | |||
| Line 1: | Line 1: | ||
| − | ... | + | == Подготовка == |
| − | PDF | + | sudo apt-get update |
| + | sudo apt-get install vim | ||
| + | sudo apt-get install pdftk | ||
| + | sudo apt-get install php5 | ||
| + | |||
| + | == Създаване на pdf == | ||
| + | Зад.1. | ||
| + | |||
| + | vim zad1.pdf | ||
| + | |||
| + | Натискате "i" за влизате в текстов режим и копирате кода Листинг1. Натискате "Esc", ":", "w","q","Enter". | ||
| + | |||
| + | <code><pre> | ||
| + | %PDF-1.0 File header | ||
| + | 1 0 obj | ||
| + | << | ||
| + | /Type /Pages | ||
| + | /Count 1 | ||
| + | /Kids [2 0 R] | ||
| + | >> | ||
| + | endobj | ||
| + | 2 0 obj | ||
| + | << | ||
| + | /Type /Page | ||
| + | /MediaBox [0 0 612 792] | ||
| + | /Resources 3 0 R | ||
| + | /Parent 1 0 R | ||
| + | /Contents [4 0 R] | ||
| + | >> | ||
| + | endobj | ||
| + | 3 0 obj | ||
| + | << | ||
| + | /Font | ||
| + | << | ||
| + | /F0 | ||
| + | << | ||
| + | /Type /Font | ||
| + | /BaseFont /Times-Italic | ||
| + | /Subtype /Type1 | ||
| + | >> | ||
| + | >> | ||
| + | >> | ||
| + | endobj | ||
| + | 4 0 obj | ||
| + | << >> | ||
| + | stream | ||
| + | 1. 0. 0. 1. 50. 700. cm | ||
| + | BT /F0 36. Tf (Hello, World!) Tj ET | ||
| + | endstream | ||
| + | endobj | ||
| + | 5 0 obj | ||
| + | << | ||
| + | /Type /Catalog | ||
| + | /Pages 1 0 R | ||
| + | >> | ||
| + | endobj | ||
| + | xref | ||
| + | 0 6 | ||
| + | trailer | ||
| + | << | ||
| + | /Size 6 | ||
| + | /Root 5 0 R | ||
| + | >> | ||
| + | startxref | ||
| + | 0 | ||
| + | %%EOF | ||
| + | </pre></code> | ||
| + | |||
| + | == Коригиране на pdf с pdftk == | ||
| + | [[Image:pdfStructure.png|thumb|375px|rigth|Връзки между обектите на pdf]] | ||
| + | Изпълнете следната команди, за да се добави липсващата информация към pdf-a. | ||
| + | pdftk zad1.pdf output zad.pdf | ||
| + | Разгледайте резултата и вижте коментарите листинг 2. | ||
| + | vi zad.pdf | ||
| + | evince zad.pdf | ||
| + | |||
| + | След коригиране на pdf-a. | ||
| + | |||
| + | <code><pre> | ||
| + | %PDF-1.0 начало и версия | ||
| + | %âãÏÓ non printable caracters, за да | ||
| + | 1 0 obj Обект 1, Съдържа Структурата на страниците | ||
| + | << | ||
| + | /Kids [2 0 R] | ||
| + | /Count 1 | ||
| + | /Type /Pages | ||
| + | >> | ||
| + | endobj | ||
| + | 2 0 obj описание на страницата | ||
| + | << | ||
| + | /Parent 1 0 R | ||
| + | /Resources 3 0 R допълнителни данни за възпроизвеждане на страницата | ||
| + | /MediaBox [0 0 612 792] Размер на страницата | ||
| + | /Contents [4 0 R] съдържание на страницата | ||
| + | /Type /Page | ||
| + | >> | ||
| + | endobj | ||
| + | 3 0 obj Информация за шрифта | ||
| + | << | ||
| + | /Font | ||
| + | << | ||
| + | /F0 Име на шрифта | ||
| + | << | ||
| + | /BaseFont /Times-Italic | ||
| + | /Subtype /Type1 | ||
| + | /Type /Font | ||
| + | >> | ||
| + | >> | ||
| + | >> | ||
| + | endobj | ||
| + | |||
| + | endobj | ||
| + | 4 0 obj Съдържание на страницата | ||
| + | << | ||
| + | /Length 64 Размер на данните в stream | ||
| + | >> | ||
| + | stream | ||
| + | 1. 0. 0. 1. 50. 700. cm | ||
| + | BT /F0 36. Tf (Hello, World!) Tj ET | ||
| + | endstream | ||
| + | endobj | ||
| + | 5 0 obj Роот обект | ||
| + | << | ||
| + | /Pages 1 0 R | ||
| + | /Type /Catalog | ||
| + | >> | ||
| + | endobj xref Местоположение на всечки обекти | ||
| + | 0 6 | ||
| + | 0000000000 65535 f | ||
| + | 0000000015 00000 n | ||
| + | 0000000074 00000 n | ||
| + | 0000000182 00000 n | ||
| + | 0000000281 00000 n | ||
| + | 0000000398 00000 n | ||
| + | trailer | ||
| + | |||
| + | << | ||
| + | /Root 5 0 R | ||
| + | /Size 6 | ||
| + | >> | ||
| + | startxref | ||
| + | 448 Местоположение на препратките | ||
| + | %EOF | ||
| + | </pre></code> | ||
| + | |||
| + | ===Обединяване на два pdf файла=== | ||
| + | |||
| + | Да се изтегли примерния файл [http://ilianko.com/upr/zad2r.pdf zad2r.pdf]. Да се запише в същата директория на получения в задача 1 zad.pdf. Да се изпълни командата: | ||
| + | pdftk zad.pdf zad2r.pdf cat output zad2c.pdf | ||
| + | |||
| + | Разгледайте получения файл и начертайте схема с връзките между блоковете. | ||
| + | vi zad2c.pdf | ||
| + | evince zad2c.pdf | ||
| + | |||
| + | == Генериране на PDF c PHP == | ||
| + | |||
| + | Да се създаде директория php | ||
| + | mkdir /home/lab/php | ||
| + | |||
| + | [http://www.fpdf.org/en/script/dl.php?id=92&f=zip Да се свали php скрипт с подръжка на UTF-8 за генериране на pdf.] Файлът съдържа и набор от TrueType шрифтове. | ||
| + | |||
| + | Файлът да се разархивира в директория ''/home/lab/php'' | ||
| + | cd ~/php | ||
| + | unzip tfpdf.zip | ||
| + | |||
| + | Да се изпълни примерният скрипт и да се разгледа резулатата. | ||
| + | cd ~/php | ||
| + | php ex.php > myphp.pdf | ||
| + | vi myphp.pdf | ||
| + | evince muphp.pdf | ||
| + | |||
| + | Да се разкомпресира pdf файлът и да се разгледа резулатата. | ||
| + | pdftk myphp.pdf output de.pdf uncompress | ||
| + | vi de.pdf | ||
| + | evince de.pdf | ||
| + | |||
| + | Да се разгледа и модифицира кода на ''ex.php'': | ||
| + | vi ex.php | ||
| + | |||
| + | |||
| + | == Генериране на PDF с C#== | ||
| + | |||
| + | Ще се използва библиотеката [http://sourceforge.net/projects/itextsharp/ iTextSharp] | ||
| + | |||
| + | |||
| + | 1. Сваляне и разархивиране на iTextSharp http://sourceforge.net/projects/itextsharp/. За основната функционалност се ползва itextsharp-dll-core.zip | ||
| + | |||
| + | 2. Създаване на нов "Windows Forms Application" и записване на проекта | ||
| + | |||
| + | 4. Добавяне на връзка към iTextSharp библиотеката: | ||
| + | |||
| + | От "Solution Explorer" с десен бутон ''Reference->Add Reference...->Browse->itextsharp.dll'' | ||
| + | |||
| + | 5. Добавяне на namespaces | ||
| + | using System.IO; // This is for file access | ||
| + | using iTextSharp.text; | ||
| + | using iTextSharp.text.pdf; // This is for iText | ||
| + | |||
| + | 6. Създаване на текстово поле | ||
| + | |||
| + | ''Toolbox->textBox'' | ||
| + | |||
| + | 7. Добавяне бутон запис на pdf | ||
| + | |||
| + | ''Toolbox->button'' | ||
| + | |||
| + | 7.1. Създване на събитие при натискане на бутон. Двоен клик върху бутона. | ||
| + | |||
| + | Създаване на файл където ще се записва pdf документа с System.IO.FileStream: | ||
| + | FileStream fs = new FileStream("test.pdf", FileMode.Create, FileAccess.Write, FileShare.None); | ||
| + | |||
| + | 7.2. Създаване на нов pfd документ с iTextSharp.text.Document обект: | ||
| + | Document doc = new Document(); | ||
| + | |||
| + | 7.3. Създаване на iTextSharp.text.pdf.PdfWriter обект за връзка с файла и pdf документа | ||
| + | PdfWriter writer = PdfWriter.GetInstance(doc, fs); | ||
| + | |||
| + | 7.4. Отваряне на pdf | ||
| + | doc.Open(); | ||
| + | |||
| + | 7.5. Добавяне на параграф с iTextSharp.text.Paragraph обект: | ||
| + | doc.Add(new Paragraph(richTextBox.Text1)); | ||
| + | |||
| + | 7.6. Добавяне на изображение | ||
| + | iTextSharp.text.Image pdfImage = iTextSharp.text.Image.GetInstance(twain321.GetImage(0), | ||
| + | System.Drawing.Imaging.ImageFormat.Jpeg); | ||
| + | doc.Add(pdfImage); | ||
| + | |||
| + | 7.7. Затваряне на pdf документа: | ||
| + | doc.Close(); | ||
| + | |||
| + | Връзки | ||
| + | http://techvalleyprojects.blogspot.com/2011/08/fill-pdf-forms-in-c-with-itextsharp.html | ||
| + | http://itextpdf.com/ | ||
| + | http://sourceforge.net/projects/itextsharp/ | ||
| + | http://www.codeproject.com/Articles/686994/Create-Read-Advance-PDF-Report-using-iTextSharp-in | ||
| + | |||
| + | == Литература == | ||
| + | |||
| + | http://10.3.45.22/books/PDF/ | ||
| + | |||
| + | #[http://10.3.45.22/books/PDF/PDF_Explained_2011.12_John_Whitington.pdf John Whitington, PDF Explained - The ISO Standard for Document Exchange, O'Reilly Media, December 2011] | ||
| + | #[http://10.3.45.22/books/PDF/itext.pdf The Best iText Questions on StackOverflow,iText Software, 2015-02-14] | ||
| + | #[http://10.3.45.22/books/PDF/OReilly_PDF_Hacks_2004.pdfSid Steward, PDF Hacks, O'Reilly Media,August 2004] http://www.pdfhacks.com, http://etutorials.org/Linux+systems/pdf+hacks/PDF+Hacks/ | ||
| + | #[http://wwwimages.adobe.com/www.adobe.com/content/dam/Adobe/en/devnet/pdf/pdfs/PDF32000_2008.pdf Document Management – Portable Document Format – Part 1: PDF 1.7, First Edition,Adobe 2008] | ||
| + | #[http://www.fpdf.org FPDF] - удобен за генериране на pdf (v1.3) с PHP | ||
| + | #[http://www.tcpdf.org/ TCPDF] - удобен за генериране на pdf с PHP | ||
| + | #http://www.pdflib.com/ - подържат - C, C++,Java,Perl,PHP,Python,Tcl,Ruby | ||
| + | |||
| + | [[Category:Компютърна периферия| ]] | ||
Latest revision as of 10:58, 9 February 2016
Contents
Подготовка
sudo apt-get update sudo apt-get install vim sudo apt-get install pdftk sudo apt-get install php5
Създаване на pdf
Зад.1.
vim zad1.pdf
Натискате "i" за влизате в текстов режим и копирате кода Листинг1. Натискате "Esc", ":", "w","q","Enter".
%PDF-1.0 File header
1 0 obj
<<
/Type /Pages
/Count 1
/Kids [2 0 R]
>>
endobj
2 0 obj
<<
/Type /Page
/MediaBox [0 0 612 792]
/Resources 3 0 R
/Parent 1 0 R
/Contents [4 0 R]
>>
endobj
3 0 obj
<<
/Font
<<
/F0
<<
/Type /Font
/BaseFont /Times-Italic
/Subtype /Type1
>>
>>
>>
endobj
4 0 obj
<< >>
stream
1. 0. 0. 1. 50. 700. cm
BT /F0 36. Tf (Hello, World!) Tj ET
endstream
endobj
5 0 obj
<<
/Type /Catalog
/Pages 1 0 R
>>
endobj
xref
0 6
trailer
<<
/Size 6
/Root 5 0 R
>>
startxref
0
%%EOF
Коригиране на pdf с pdftk
Изпълнете следната команди, за да се добави липсващата информация към pdf-a.
pdftk zad1.pdf output zad.pdf
Разгледайте резултата и вижте коментарите листинг 2.
vi zad.pdf evince zad.pdf
След коригиране на pdf-a.
%PDF-1.0 начало и версия
%âãÏÓ non printable caracters, за да
1 0 obj Обект 1, Съдържа Структурата на страниците
<<
/Kids [2 0 R]
/Count 1
/Type /Pages
>>
endobj
2 0 obj описание на страницата
<<
/Parent 1 0 R
/Resources 3 0 R допълнителни данни за възпроизвеждане на страницата
/MediaBox [0 0 612 792] Размер на страницата
/Contents [4 0 R] съдържание на страницата
/Type /Page
>>
endobj
3 0 obj Информация за шрифта
<<
/Font
<<
/F0 Име на шрифта
<<
/BaseFont /Times-Italic
/Subtype /Type1
/Type /Font
>>
>>
>>
endobj
endobj
4 0 obj Съдържание на страницата
<<
/Length 64 Размер на данните в stream
>>
stream
1. 0. 0. 1. 50. 700. cm
BT /F0 36. Tf (Hello, World!) Tj ET
endstream
endobj
5 0 obj Роот обект
<<
/Pages 1 0 R
/Type /Catalog
>>
endobj xref Местоположение на всечки обекти
0 6
0000000000 65535 f
0000000015 00000 n
0000000074 00000 n
0000000182 00000 n
0000000281 00000 n
0000000398 00000 n
trailer
<<
/Root 5 0 R
/Size 6
>>
startxref
448 Местоположение на препратките
%EOF
Обединяване на два pdf файла
Да се изтегли примерния файл zad2r.pdf. Да се запише в същата директория на получения в задача 1 zad.pdf. Да се изпълни командата:
pdftk zad.pdf zad2r.pdf cat output zad2c.pdf
Разгледайте получения файл и начертайте схема с връзките между блоковете.
vi zad2c.pdf evince zad2c.pdf
Генериране на PDF c PHP
Да се създаде директория php
mkdir /home/lab/php
Да се свали php скрипт с подръжка на UTF-8 за генериране на pdf. Файлът съдържа и набор от TrueType шрифтове.
Файлът да се разархивира в директория /home/lab/php
cd ~/php unzip tfpdf.zip
Да се изпълни примерният скрипт и да се разгледа резулатата.
cd ~/php php ex.php > myphp.pdf vi myphp.pdf evince muphp.pdf
Да се разкомпресира pdf файлът и да се разгледа резулатата.
pdftk myphp.pdf output de.pdf uncompress vi de.pdf evince de.pdf
Да се разгледа и модифицира кода на ex.php:
vi ex.php
Генериране на PDF с C#
Ще се използва библиотеката iTextSharp
1. Сваляне и разархивиране на iTextSharp http://sourceforge.net/projects/itextsharp/. За основната функционалност се ползва itextsharp-dll-core.zip
2. Създаване на нов "Windows Forms Application" и записване на проекта
4. Добавяне на връзка към iTextSharp библиотеката:
От "Solution Explorer" с десен бутон Reference->Add Reference...->Browse->itextsharp.dll
5. Добавяне на namespaces
using System.IO; // This is for file access using iTextSharp.text; using iTextSharp.text.pdf; // This is for iText
6. Създаване на текстово поле
Toolbox->textBox
7. Добавяне бутон запис на pdf
Toolbox->button
7.1. Създване на събитие при натискане на бутон. Двоен клик върху бутона.
Създаване на файл където ще се записва pdf документа с System.IO.FileStream:
FileStream fs = new FileStream("test.pdf", FileMode.Create, FileAccess.Write, FileShare.None);
7.2. Създаване на нов pfd документ с iTextSharp.text.Document обект:
Document doc = new Document();
7.3. Създаване на iTextSharp.text.pdf.PdfWriter обект за връзка с файла и pdf документа
PdfWriter writer = PdfWriter.GetInstance(doc, fs);
7.4. Отваряне на pdf
doc.Open();
7.5. Добавяне на параграф с iTextSharp.text.Paragraph обект:
doc.Add(new Paragraph(richTextBox.Text1));
7.6. Добавяне на изображение
iTextSharp.text.Image pdfImage = iTextSharp.text.Image.GetInstance(twain321.GetImage(0),
System.Drawing.Imaging.ImageFormat.Jpeg);
doc.Add(pdfImage);
7.7. Затваряне на pdf документа:
doc.Close();
Връзки http://techvalleyprojects.blogspot.com/2011/08/fill-pdf-forms-in-c-with-itextsharp.html http://itextpdf.com/ http://sourceforge.net/projects/itextsharp/ http://www.codeproject.com/Articles/686994/Create-Read-Advance-PDF-Report-using-iTextSharp-in
Литература
- John Whitington, PDF Explained - The ISO Standard for Document Exchange, O'Reilly Media, December 2011
- The Best iText Questions on StackOverflow,iText Software, 2015-02-14
- Steward, PDF Hacks, O'Reilly Media,August 2004 http://www.pdfhacks.com, http://etutorials.org/Linux+systems/pdf+hacks/PDF+Hacks/
- Document Management – Portable Document Format – Part 1: PDF 1.7, First Edition,Adobe 2008
- FPDF - удобен за генериране на pdf (v1.3) с PHP
- TCPDF - удобен за генериране на pdf с PHP
- http://www.pdflib.com/ - подържат - C, C++,Java,Perl,PHP,Python,Tcl,Ruby