🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.delphi
Article #346231

Re: Usuwanie stron w plikach pdf

#346231
From: konsul41
Date: Thu, 28 Dec 2017 09:30
195 lines
6540 bytes
Trochę byłem zajęty.
https://groups.google.com/forum/#!searchin/pl.comp.lang.delphi/konsul41@wp.pl$20pdf|sort:date/pl.comp.lang.delphi/hE78wiAMU9U/X7iahCwIAQAJ

Tutaj masz temat tam jest link do strony w której ktoś analizuje "obj" w 
PDF.
link to
http://www.angusj.com/delphitips/pdfpagecount.php

Ten ktoś (przypuszczam że to jest Angus Johnson) pokazuje jak odczytać 
ilość stron analizując PDF w twoim przypadku wystarczyło by aby usunąć 
(wpisać spacje ) w miejsce odnośników (numerów obiektów) do Page, 
ewentualnie przepisać wszystkie obiekty bez Page, które masz wyrzucić, 
aktualizując xref.

xref wygląda tak

xref
0 45
0000000000 65535 f
0000000140 00000 n
0000004917 00000 n
0000000015 00000 n
0000005238 00000 n
0000004743 00000 n
...
0000041340 00000 n
0000057072 00000 n
0000043947 00000 n
0000057239 00000 n
0000057381 00000 n
trailer
<</Info 44 0 R/ID 
[<014eed829835169f91f6e5117f75beae><bcc6e0bca5da08e55e612a28ec8594b9>]/Root 
43 0 R/Size 45>>
startxref
57620
%%EOF

Analizę zaczynasz od końca.
xref są to bajty od którego zaczynają się objekty.
nie zawsze/wszystkie pdf-y mają go w pełni rozbudowane

Dalej "startxref" w którym masz podany początek do xref
pierwsza część to początek jakiegoś obiektu (obj)
ciebie będą interesować takie

8 0 obj
<</Kids[4 0 R 9 0 R]/Type/Pages/Count 2/ITXT(5.0.1)>>
endobj
masz tutaj wpis "/Pages" oznacza że tutaj jest określenie ilości stron
masz wpis "/Count 2" oznacza że są 2 strony
Tutaj akurat nie ma podanego bezpośredniego odwołania do Strony ale 
znajdujemy
4 0 obj
<</Contents 10 0 R/Type/Page/Resources<</ProcSet 7 0 R/Font<</F 11 0 
R>>/XObject<</R3 12 0 R/R4 13 0 R/R5 14 0 R/R 15 0 R/R6 16 0 R/R0 17 0 
R/R1 18 0 R/R2 19 0 R>>>>/Parent 8 0 R/Annots[20 0 R 3 0 R]/MediaBox[0 0 
595.2756 841.8898]>>
endobj
i jest wpis "/Page"

w innym PDF-ie masz

startxref

116

%%EOF
i odwołanie do 116 bajta

Znajdujemy także taki obiekt

458 0 obj
<</Metadata 422 0 R/Pages 447 0 
R/Type/Catalog/ViewerPreferences<</Direction/L2R>>>>
endobj

Wpis "/Pages 447 0 R" oznacza że jest 1 strona
ale plik jest kodowany i tekstowe wyszukiwanie nie znajduje obj 447.



W trzecim pliku (Generowany przez Projektanta budynków "Architekt 
bodajże za Autocada)

xref
0 60
0000000000 65535 f
...
0008474403 00000 n
0008475280 00000 n
0008524424 00000 n
trailer
<< /Size 60 /Root 1 0 R /Info 2 0 R
/ID [<FBEEFE353C8DB6CD142C20290F920B81><FBEEFE353C8DB6CD142C20290F920B81>]
 >>
startxref
8526931
%%EOF

Wpis "/Info 2 0 R"
Kieruje do obiektu
2 0 obj
<</Producer(GPL Ghostscript 9.10)
/CreationDate(D:20161209111110+01'00')
/ModDate(D:20161209111110+01'00')
/Author(\376\377\000K\000a\000m\000i\000l\000G)
/Creator(\376\377\000P\000D\000F\000C\000r\000e\000a\000t\000o\000r\000 
\000V\000e\000r\000s\000i\000o\000n\000 \0001\000.\0007\000.\0003)
/Keywords()
/Subject()
/Title(\376\377\000F\000:\000\\\000K\000a\000m\000i\000l\000 
\000G\000a\000w\000r\000y\000s\000z\000c\000z\000a\000k\000\\\000W\000Y\000D\000R\000U\000K\000O\000W\000A\000N\000E\000\\\0002\0000\0001\0006\000\\\000S\000z\000y\000m\000a\001D\000s\000c\000y\000,\000 
\001A\000o\000m\001|\000a\000\\\000Z\000A\000M\000I\000E\000N\000N\000Y\000\\\000S\000z\000y\000m\000a\000n\000s\000c\000y\000 
\000Z\000A\000M\000I\000E\000N\000N\000Y\000-\000M\000o\000d\000e\000l)>>endobj
te wszystkie cyfry to odnośniki do znaków z załadowanego Font


Wpis "/Root 1 0 R" przekierowuje do
1 0 obj
<</Type /Catalog /Pages 3 0 R
/Metadata 59 0 R
 >>
endobj
masz wpis "/Catalog" i
"/Pages 3 0 R" to przekierowuje do

3 0 obj
<< /Type /Pages /Kids [
4 0 R
7 0 R
10 0 R
13 0 R
16 0 R
19 0 R
22 0 R
25 0 R
30 0 R
36 0 R
42 0 R
48 0 R
] /Count 12
 >>
endobj
zobacz że masz podaną ilość stron

wpis "4 0 R" w tablicy "/Kids" przekierowuje do konkretnej strony

4 0 obj
<</Type/Page/MediaBox [0 0 842 1585]
/Parent 3 0 R
/Resources<</ProcSet[/PDF]
 >>
/Contents 5 0 R
 >>
endobj

"/Page" to strona i może być dużo odnośników(przekierowań)
"/MediaBox [0 0 842 1585]" to wielkość strony.
Każda strona może mieć inną wielkość, czcionkę itd.
Ty powinieneś zacząć od usunięcia odnośników do "KIDS"
Oczywiście to są przykłady PDF-ów i nie oznacza że twoje są takie same.
Do każdego "Producer" trzeba podejść indywidualnie uwzględniając wersje 
PDF i jego specyfikacje.

Z ciekawszych rzeczy mogę dopisać Pakowanie obiektów
8 0 obj
<</Length 9 0 R/Filter /FlateDecode>>
stream
...dane...
endobj
odnośnik "/Length 9 0 R" jest przekierowaniem do obiektu
9 0 obj
1039595
endobj
czyli tyko podana wielkość strumienia "stream"
w przypadku filtra FlateDecode to bardziej zaciemnianie niż pakowanie.

Każdy obiekt poza danymi do szyfrowania może być pakowany,szyfrowany i 
to równocześnie kilkoma metodami pod rząd itd.

szyfrowanie i XObjects, oraz Forms i JavaScript w pdf (tak pdf może 
przenosić wirusy)

Jeżeli chcesz więcej szczegółów ewentualnie dalsza współpraca na prive.







---
Ta wiadomość została sprawdzona na obecność wirusów przez oprogramowanie antywirusowe Avast.
https://www.avast.com/antivirus
Technical Details
Message-ID: <5a44b9a1$0$15208$65785112@news.neostrada.pl>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!fu-berlin.de!peer02.fr7!futter-mich.highwinds-media.com!news.highwinds-media.com!newsfeed.neostrada.pl!unt-exc-02.news.neostrada.pl!unt-spo-b-01.news.neostrada.pl!news.neostrada.pl.POSTED!not-for-mail
References: <p0r9t5$m4r$1@news.icm.edu.pl> <5a32811d$0$5146$65785112@news.neostrada.pl> <p1isg1$bju$1@news.icm.edu.pl> <5a3d2510$0$653$65785112@news.neostrada.pl> <p225og$edg$1@news.icm.edu.pl>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!fu-berlin.de!peer02.fr7!futter-mich.highwinds-media.com!news.highwinds-media.com!newsfeed.neostrada.pl!unt-exc-02.news.neostrada.pl!unt-spo-b-01.news.neostrada.pl!news.neostrada.pl.POSTED!not-for-mail
Subject: Re: Usuwanie stron w plikach pdf
Newsgroups: pl.comp.lang.delphi
References: <p0r9t5$m4r$1@news.icm.edu.pl> <5a32811d$0$5146$65785112@news.neostrada.pl> <p1isg1$bju$1@news.icm.edu.pl> <5a3d2510$0$653$65785112@news.neostrada.pl> <p225og$edg$1@news.icm.edu.pl>
From: "konsul41@wp.pl" <konsul41@wp.pl>
Date: Thu, 28 Dec 2017 10:30:10 +0100
User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:52.0) Gecko/20100101 Thunderbird/52.5.0
MIME-Version: 1.0
In-Reply-To: <p225og$edg$1@news.icm.edu.pl>
X-Antivirus: Avast (VPS 171228-0, 2017-12-28), Outbound message
X-Antivirus-Status: Clean
Lines: 196
Message-ID: <5a44b9a1$0$15208$65785112@news.neostrada.pl>
Organization: Telekomunikacja Polska
NNTP-Posting-Host: 95.48.160.163
X-Trace: 1514453410 unt-rea-a-02.news.neostrada.pl 15208 95.48.160.163:50343
X-Complaints-To: abuse@news.neostrada.pl
X-Received-Bytes: 6413
X-Received-Body-CRC: 3211213571
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit