|
[ FranjoZG @ 30.03.2021. 10:12 ] @
| 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...
|
[ bokinet @ 30.03.2021. 12:06 ] @
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
[ FranjoZG @ 30.03.2021. 20:16 ] @
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.
[ savkic @ 31.03.2021. 13:14 ] @
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.
[ FranjoZG @ 31.03.2021. 13:31 ] @
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.
[ savkic @ 31.03.2021. 14:12 ] @
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;
[ FranjoZG @ 31.03.2021. 15:24 ] @
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;
[ _deran_ @ 12.04.2021. 08:51 ] @
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...
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|