🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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

Re: Rozwój złożonego projektu.

#345853
From: konsul41
Date: Wed, 21 Jun 2017 06:18
84 lines
3411 bytes
W dniu 20-06-2017 o 22:16, krolikbest pisze:
> 
>>
>>     FFile := TMemoryStream.Create();
>>     FFile.LoadFromFile(FFileName);
>>     PFile := PAnsiChar(FFile.Memory);
>>     pend  := PAnsiChar(FFile.Memory) + FFile.Size-5;
>>
> 
> To mnie zaciekawiło. Nigdy nie musiałem zajmować się rozbiórka pdfów. 
> Przybliżysz temat? Nie chodzi też oczywiście o zewn. biblioteki do 
> rozbiórki tych dokumentów.
> 
> Pozdr
> krolikbest
> 
To jest kolejny projekt/pomysł na obróbkę e-deklaracji.
Pdfy można zapisywać z XML i chcę podłożyć XML w PDF i wyświetlić go w 
Acrobat Reader i za jego pomocą wysłać. Ma być to przezroczyste dla 
użytkownika.

Cały pdf to drzewo "obj" w każdym obj mogą być odwołania do kolejnych obj.

drzewo wygląda mniej więcej tak:
roo--- pages --- page
              --- page
    --- fonts
    --- fonts
    --- XForms
    --- files
to tylko przykład

Ogólnie kod nie jest mój, Ja go tylko dostosowuje do swoich potrzeb
i jestem na etapie rozszyfrowywania objstream.
Nie pamiętam gdzie ale znalazłem w necie kod kogoś kto zrobił większość 
roboty. Większość kodu polega na przeglądaniu znaków i traktowanie 
całego PDF jako PAnsiChar.





function TPDFClass.FindStrInDict(const str: ansistring): boolean;
  var
     nestLvl: integer;
     str1: AnsiChar;
   begin
     //nb: PDF 'dictionaries' start with '<<' and terminate with '>>'
     result := false;
     nestLvl := 0;
     str1 := str[1];
     while not result do
     begin
       while not (p^ in ['>','<',str1]) do inc(p);
       if (p^ = '<') then
       begin
         if (p+1)^ = '<' then begin inc(nestLvl); inc(p); end;
       end
       else if (p^ = '>') then
       begin
         if (p+1)^ = '>' then
         begin
           dec(nestLvl);
           inc(p);
           if nestLvl <= 0 then exit;  //Continue;//
         end
       end else
       begin
         result := (nestLvl < 2) and IsString(str);
         if result then exit;
       end;
       inc(p);
     end;
end;

użyte tak
  if not FindStrInDict('/Filter') then exit;
przesuwa wskaźnik za szukany ciąg.



Mogę na priv podesłać cały spakowany projekt który rozbiera e-deklaracje 
na obiekty i sobie możesz popatrzeć jak to jest zbudowane.
Ostrzegam kod to swobodna twórczość.
Technical Details
Message-ID: <oid342$rdj$1@portraits.wsisiz.edu.pl>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!wsisiz.edu.pl!.POSTED.jue163.internetdsl.tpnet.pl!not-for-mail
References: <oi81jv$gcf$1@portraits.wsisiz.edu.pl> <3121b1d5-eadc-4911-a6c6-f1b76b9b088d@googlegroups.com> <oi86et$jr4$1@portraits.wsisiz.edu.pl> <59498277$0$15194$65785112@news.neostrada.pl>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!wsisiz.edu.pl!.POSTED.jue163.internetdsl.tpnet.pl!not-for-mail
From: "konsul41@wp.pl" <konsul41@wp.pl>
Newsgroups: pl.comp.lang.delphi
Subject: Re: Rozwój złożonego projektu.
Date: Wed, 21 Jun 2017 08:18:42 +0200
Organization: http://www.wit.edu.pl
Message-ID: <oid342$rdj$1@portraits.wsisiz.edu.pl>
References: <oi81jv$gcf$1@portraits.wsisiz.edu.pl> <3121b1d5-eadc-4911-a6c6-f1b76b9b088d@googlegroups.com> <oi86et$jr4$1@portraits.wsisiz.edu.pl> <59498277$0$15194$65785112@news.neostrada.pl>
Mime-Version: 1.0
Injection-Date: Wed, 21 Jun 2017 06:18:43 -0000 (UTC)
Injection-Info: portraits.wsisiz.edu.pl; posting-host="jue163.internetdsl.tpnet.pl:95.48.160.163"; logging-data="28083"; mail-complaints-to="abuse@wsisiz.edu.pl"
User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:52.0) Gecko/20100101 Thunderbird/52.1.1
In-Reply-To: <59498277$0$15194$65785112@news.neostrada.pl>
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit