Michael Caletka wrote:
As far as I can see in the examples of the tutorial, you always have
to give the Column a rectangle in absolute positions. I don't have the
positions beforehand,
???
so I can't define a rectangle of positions for adding my paragraphs,
chunks and tables in.
When you use document.add, you have IMPLICITELY defined such a rectangle.
Document document = new Document();
is shorthand for:
Document document = new Document(PageSize.A4, 36, 36, 36, 36);
PageSize.A4 is a Rectangle object, subtract the margins (36) and you
have the definition of your 'simple column' needed for method
setSimpleColumn.
Perhaps, if you still got some patience left you could get me a
sample-code for just how to define a ColumnText object right? I want
it to fit on a A4-page with margins 60 for left and right, and 50 for
top and bottom. I'm sorry, if I give the impression, that I'm just
stupid, but somehow I really don't see how it is done.
My publisher will probably shoot me for all the book examples
I am giving away for free, but here it goes. In attachment, you
find a text file with some lines. Each line is read into a Phrase
and added to a ColumnText.
If the Phrase fits the page, the column is written; if not, a new page
is triggered. Some variables were added and sent to the System.out
to show you what happens.
Document document = new Document(PageSize.A4);
try {
PdfWriter writer = PdfWriter.getInstance(document,
new FileOutputStream("column_control.pdf"));
document.open();
PdfContentByte cb = writer.getDirectContent();
BufferedReader reader = new BufferedReader(new
FileReader("caesar.txt"));
ColumnText ct = new ColumnText(cb);
float pos;
String line;
Phrase p;
int status = ColumnText.START_COLUMN;
ct.setSimpleColumn(36, 36, PageSize.A4.width() - 36,
PageSize.A4.height() - 36, 18, Element.ALIGN_JUSTIFIED);
while ((line = reader.readLine()) != null) {
p = new Phrase(line);
ct.addText(p);
pos = ct.getYLine();
status = ct.go(true);
System.err.println("Lines written:" + ct.getLinesWritten() + "
Y-position: " + pos + " - " + ct.getYLine());
if (!ColumnText.hasMoreText(status)) {
ct.addText(p);
ct.setYLine(pos);
ct.go(false);
}
else {
document.newPage();
ct.setText(p);
ct.setYLine(PageSize.A4.height() - 36);
ct.go();
}
}
reader.close();
} catch (DocumentException de) {
System.err.println(de.getMessage());
} catch (IOException ioe) {
System.err.println(ioe.getMessage());
}
document.close();
}
In your example, you MUST NOT use setText, but addElement.
This example is a 'text mode' example; you need 'composite mode'.
br,
Bruno
GALLIA est omnis divisa in partes tres, quarum unam incolunt Belgae, aliam
Aquitani, tertiam qui ipsorum lingua Celtae, nostra Galli appellantur. Hi
omnes lingua, institutis, legibus inter se differunt. Gallos ab Aquitanis
Garumna flumen, a Belgis Matrona et Sequana dividit. Horum omnium fortissimi
sunt Belgae, propterea quod a cultu atque humanitate provinciae longissime
absunt, minimeque ad eos mercatores saepe commeant atque ea quae ad
effeminandos animos pertinent important, proximique sunt Germanis, qui trans
Rhenum incolunt, quibuscum continenter bellum gerunt. Qua de causa Helvetii
quoque reliquos Gallos virtute praecedunt, quod fere cotidianis proeliis cum
Germanis contendunt, cum aut suis finibus eos prohibent aut ipsi in eorum
finibus bellum gerunt.
[Eorum una, pars, quam Gallos obtinere dictum est, initium capit a flumine
Rhodano, continetur Garumna flumine, Oceano, finibus Belgarum, attingit etiam
ab Sequanis et Helvetiis flumen Rhenum, vergit ad septentriones. Belgae ab
extremis Galliae finibus oriuntur, pertinent ad inferiorem partem fluminis
Rheni, spectant in septentrionem et orientem solem. Aquitania a Garumna flumine
ad Pyrenaeos montes et eam partem Oceani quae est ad Hispaniam pertinet;
spectat inter occasum solis et septentriones.]
Apud Helvetios longe nobilissimus fuit et ditissimus Orgetorix. Is M. Messala,
[et P.] M. Pisone consulibus regni cupiditate inductus coniurationem
nobilitatis fecit et civitati persuasit ut de finibus suis cum omnibus copiis
exirent: perfacile esse, cum virtute omnibus praestarent, totius Galliae
imperio potiri. Id hoc facilius iis persuasit, quod undique loci natura
Helvetii continentur: una ex parte flumine Rheno latissimo atque altissimo,
qui agrum Helvetium a Germanis dividit; altera ex parte monte Iura altissimo,
qui est inter Sequanos et Helvetios; tertia lacu Lemanno et flumine Rhodano,
qui provinciam nostram ab Helvetiis dividit. His rebus fiebat ut et minus late
vagarentur et minus facile finitimis bellum inferre possent; qua ex parte
homines bellandi cupidi magno dolore adficiebantur. Pro multitudine autem
hominum et pro gloria belli atque fortitudinis angustos se fines habere
arbitrabantur, qui in longitudinem milia passuum CCXL, in latitudinem CLXXX
patebant.
His rebus adducti et auctoritate Orgetorigis permoti constituerunt ea quae ad
proficiscendum pertinerent comparare, iumentorum et carrorum quam maximum
numerum coemere, sementes quam maximas facere, ut in itinere copia frumenti
suppeteret, cum proximis civitatibus pacem et amicitiam confirmare. Ad eas res
conficiendas biennium sibi satis esse duxerunt; in tertium annum profectionem
lege confirmant. Ad eas res conficiendas Orgetorix deligitur. Is sibi
legationem ad civitates suscipit. In eo itinere persuadet Castico,
Catamantaloedis filio, Sequano, cuius pater regnum in Sequanis multos annos
obtinuerat et a senatu populi Romani amicus appellatus erat, ut regnum in
civitate sua occuparet, quod pater ante habuerit; itemque Dumnorigi Haeduo,
fratri Diviciaci, qui eo tempore principatum in civitate obtinebat ac maxime
plebi acceptus erat, ut idem conaretur persuadet eique filiam suam in
matrimonium dat. Perfacile factu esse illis probat conata perficere, propterea
quod ipse suae civitatis imperium obtenturus esset: non esse dubium quin
totius Galliae plurimum Helvetii possent; se suis copiis suoque exercitu illis
regna conciliaturum confirmat. Hac oratione adducti inter se fidem et ius
iurandum dant et regno occupato per tres potentissimos ac firmissimos populos
totius Galliae sese potiri posse sperant.
Ea res est Helvetiis per indicium enuntiata. Moribus suis Orgetoricem ex
vinculis causam dicere coegerunt; damnatum poenam sequi oportebat, ut igni
cremaretur. Die constituta causae dictionis Orgetorix ad iudicium omnem suam
familiam, ad hominum milia decem, undique coegit, et omnes clientes
obaeratosque suos, quorum magnum numerum habebat, eodem conduxit; per eos ne
causam diceret se eripuit. Cum civitas ob eam rem incitata armis ius suum
exequi conaretur multitudinemque hominum ex agris magistratus cogerent,
Orgetorix mortuus est; neque abest suspicio, ut Helvetii arbitrantur, quin ipse
sibi mortem consciverit.