Difference between revisions of "PDF"

From Ilianko
 
(39 intermediate revisions by the same user not shown)
Line 1: Line 1:
 
+
== Подготовка ==
 +
sudo apt-get update
 +
sudo apt-get install vim
 +
sudo apt-get install pdftk
 +
sudo apt-get install php5
  
 
== Създаване на pdf ==
 
== Създаване на pdf ==
 
Зад.1.
 
Зад.1.
  
  vi zad1.pdf
+
  vim zad1.pdf
  
 
Натискате "i" за влизате в текстов режим и копирате кода Листинг1. Натискате "Esc", ":", "w","q","Enter".
 
Натискате "i" за влизате в текстов режим и копирате кода Листинг1. Натискате "Esc", ":", "w","q","Enter".
Line 63: Line 67:
 
%%EOF
 
%%EOF
 
</pre></code>
 
</pre></code>
 
  
 
== Коригиране на pdf с pdftk ==
 
== Коригиране на pdf с pdftk ==
 
+
[[Image:pdfStructure.png|thumb|375px|rigth|Връзки между обектите на pdf]]
 
Изпълнете следната команди, за да се добави липсващата информация към pdf-a.
 
Изпълнете следната команди, за да се добави липсващата информация към pdf-a.
 
  pdftk zad1.pdf output zad.pdf
 
  pdftk zad1.pdf output zad.pdf
 
Разгледайте резултата и вижте коментарите листинг 2.
 
Разгледайте резултата и вижте коментарите листинг 2.
 
  vi zad.pdf
 
  vi zad.pdf
 +
evince zad.pdf
  
 
След коригиране на pdf-a.
 
След коригиране на pdf-a.
Line 141: Line 145:
 
</pre></code>
 
</pre></code>
  
 +
===Обединяване на два pdf файла===
  
==Обединяване на два pdf файла==
+
Да се изтегли примерния файл [http://ilianko.com/upr/zad2r.pdf zad2r.pdf]. Да се запише в същата директория на получения в задача 1 zad.pdf. Да се изпълни командата:
 +
pdftk zad.pdf zad2r.pdf cat output zad2c.pdf
  
Да се изтегли примерния файл [http://ilianko.com/upr/zad2r.pdf zad2r.pdf]. Да се запише в същата директория на получения в задача 1 zad.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/
  
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:Компютърна периферия| ]]
 
[[Category:Компютърна периферия| ]]

Latest revision as of 10:58, 9 February 2016

Подготовка

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

Изпълнете следната команди, за да се добави липсващата информация към 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

Литература

http://10.3.45.22/books/PDF/

  1. John Whitington, PDF Explained - The ISO Standard for Document Exchange, O'Reilly Media, December 2011
  2. The Best iText Questions on StackOverflow,iText Software, 2015-02-14
  3. Steward, PDF Hacks, O'Reilly Media,August 2004 http://www.pdfhacks.com, http://etutorials.org/Linux+systems/pdf+hacks/PDF+Hacks/
  4. Document Management – Portable Document Format – Part 1: PDF 1.7, First Edition,Adobe 2008
  5. FPDF - удобен за генериране на pdf (v1.3) с PHP
  6. TCPDF - удобен за генериране на pdf с PHP
  7. http://www.pdflib.com/ - подържат - C, C++,Java,Perl,PHP,Python,Tcl,Ruby