Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 7 odgovora
  • 2.232 pregleda

Najnovija ↓

Delphi - word, broj stranica 30.03.2021. u 11:12 · pre 68 meseci #1
Delphi 2007
Kako dobiti broj stranica u nekom Word dokumentu? Word koristim za neka izvješća ali se moram igrati sa velčinom fonta jer moraju biti na jednoj stranici.
Učitam template i popunim podacima. Nakon toga bih trebao dobiti broj stranica novog dokumenta. Ako je broj stranica veći od 1 - smanjim font dodanog teksta, pa ponovo provjera itd. dok ne dobijem jednu stranicu.

Code:

uses
   ...
   Word2000, Office2000, ...;
...

procedure OpenDoc(tmpName: string)
var
   fwa: TWordApplication;
begin
   fwa := TWordApplication.Create(nil);
   fwa.Connect;
   fDocument := fwa.Documents.Open( tmpName, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, dn)
end;


Rudarim već par dana po web-u, ne mogu nigdje pronaći kako dobiti broj stranica. Ima primera koji ne rade...


Re: Delphi - word, broj stranica 30.03.2021. u 13:06 · pre 68 meseci #2
Pogledati MS Word osobine dokumenta - posto postoji varijanta u samom MS Word da se preko fields ubaci ukupan broj strana.
Dakle ako je to u MS Word-u osobina dokumenta koliko ima strana onda ta vrednost ako je iz Delphi-ja citljiva se moze uzeti u obzir.

S' druge strane tehniki samo ostaje da se vidi da li se ta vrednost azurira prilikom snimanja ili na svaku promena sadrzaja dokumenta. Ako je u pitanju prilikom snimanja onda pre preuzimanja vrednosti ukupnog broja strana snimiti kao file pa onda preuzite vrednost osobine fields total pages.


U MS Word

(cisto za analitiku - isto preko VBA moze da se vidi kako bi se preko njega iscitala ta vrednost pa preraditi u Delphiju)

Tab INSERT

potom Quick Parts -> Field...

pa onda

na radnoj povrsini za FIELDS -> Categories (All) -> NumPages
Re: Delphi - word, broj stranica 30.03.2021. u 21:16 · pre 68 meseci #3
Kreirao sam u wordu makro koji ubacuje broj stranica u dokument, ali taj makro ne uspjevam prepisati u Delphi.

Rješio sam problem zaobilaznim putem, nije elegantno, ali radi dok ne nađem drugo rješenje.
- Koritstim TLitePDF za čitanje PDF-a. Ta klasa daje broj stranica PDF-a.
- Spremim dokument kao PDF i učitam broj stranica
- Ako je broj stranica veći od 1 tada smanjim font i ponovno spremim PDF. Smanjujem font do veličine 8 ili dok nije broj stranica = 1

Iznenađujuće brzo se sve obavi, maksimalno 4 interakcije. Od cca 2.500 dokumenata takovih kojima treba smanjivati font nema više od 20.
Re: Delphi - word, broj stranica 31.03.2021. u 14:14 · pre 68 meseci #4
Trebalo bi da moze sa ActiveDocument.ActiveWindow.Panes(1).Pages.Count.
Probaj da nadjes stariji office (> 15 godina) i help fajlove za VBA, i tu imas sve to.
Ili startujes Word, pa VisualBasic Editor i onda tu trazis sta ti treba.

Hvala za ovaj litePDF, nisam znao za njega, bas cu da probam.
Potpis
Do not be a help vampire (http://slash7.com/pages/vampires), use the google.

How to ask questions the smart way:
http://www.catb.org/~esr/faqs/smart-questions.html
http://solair.eunet.rs/~fangor...stions/smart-questions.sr.html
Re: Delphi - word, broj stranica 31.03.2021. u 14:31 · pre 68 meseci #5
savkic, znam da bi nekako tako trebalo ići, ali nisam uspio otkirti kako.

ActiveDocument koristim, primjer:
fwa.ActiveDocument.SaveAs(fName, fFormat, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam);
wr := fwa.ActiveDocument.Bookmarks.Item(bk).Range;
if fwa.ActiveDocument.Bookmarks.Exists(bkName) then begin ...
fwa.ActiveDocument.SaveAs(fName, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam);
...

sve, samo ne broj stranica.

Nešto što bi (vjerojatno) trebalo vratiti property-e je:
fwa.ActiveDocument.GetTypeInfo
ali mi vraća nesuvisli podatak.
Re: Delphi - word, broj stranica 31.03.2021. u 15:12 · pre 68 meseci #6
Sad sam probao, ovako radi:

Code:


var
  W: OleVariant;
begin
  W := CreateOleObject('Word.Application');
  W.Visible := True;
  W.Activate;
  W.Documents.Open('Proba.doc');

  Caption := W.ActiveDocument.ComputeStatistics(wdStatisticPages) 
end;

Potpis
Do not be a help vampire (http://slash7.com/pages/vampires), use the google.

How to ask questions the smart way:
http://www.catb.org/~esr/faqs/smart-questions.html
http://solair.eunet.rs/~fangor...stions/smart-questions.sr.html
Re: Delphi - word, broj stranica 31.03.2021. u 16:24 · pre 67 meseci #7
Koristim unit Word2000 tako da je kod nešto drugačiji, ali radi! Hvala.
Code:

var
   W: TWordApplication;
   tmpName, dn: OleVarinat;
begin 
   W := TWordApplication.Create(nil);
   W.Connect;
   tmpName := 'MojFile.doc';
   dn := true;
   W.Documents.Open( tmpName, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, dn);

   dn := false;
   Caption := ActiveDocument.ComputeStatistics(wdStatisticPages, dn);
end;



Re: Delphi - word, broj stranica 12.04.2021. u 09:51 · pre 67 meseci #8
Mozes i bez pokretanja word-a da vidis. Raspakujes .docx fajl kao da je zip (sto i jeste), dobices neke fajlove i foldere. U folderu docProps izmedju ostalog imas app.xml i u njemu imas Pages gde ti pise koliko je stranica i ostala neka statistika. Delphi kod je duzi ali si nezavistan od instalacije word-a na racunaru. Mislim da je ovako mnogo brze ako ti je bitna brzina, jedina mana je sta ako MS nekad resi da promeni format docx fajla tj. xml-ovi u njemu nisu isti...
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme