Hi PDFBox Team,

I have started to investigate time with PDFBox to try to provides High-Level
API to manage paragraph, table widgets etc....
I recall my problem : we are using iText for our ODT->PDF and Docx->PDF
converter and we wish provides our code for Apache. Problem is iText
license.
So I'm searching PDF API (PDFBox?FOP?) to manage PDF with Java model (not
with XSL-FO). It seems that FOP provides this feature, but it's very hard to
understand how to manage that?

I have tried to manage a simple case : a paragraph with some text. I would
like generate PDF with this content:

----------------------------
AAAA BBBB
----------------------------

But not with one String but with 3 Strings (call 3 times
contentStream.drawString(...);)
The solution that I have found to manage that is to store the last X of the
added Stringby using Stringlenght+Font + Font size. Here my code

------------------------------------------------------
import java.io.IOException;

import org.apache.pdfbox.exceptions.COSVisitorException;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.edit.PDPageContentStream;
import org.apache.pdfbox.pdmodel.font.PDFont;
import org.apache.pdfbox.pdmodel.font.PDType1Font;

public class Test3 {

    private static float lastX = 0;

    public static void main(String[] args) throws IOException,
            COSVisitorException {
        PDDocument doc = null;
        try {
            doc = new PDDocument();

            PDPage page = new PDPage();
            doc.addPage(page);

            PDPageContentStream contentStream = new PDPageContentStream(doc,
                    page);

            PDFont font = PDType1Font.HELVETICA_BOLD;
            long fontSize = 5;
            addText("AAAA", font, fontSize, page, contentStream);
            addText(" ", font, fontSize, page, contentStream);
            addText("BBBB", font, fontSize, page, contentStream);

            contentStream.close();

            doc.save("test.pdf");

        } finally {
            if (doc != null) {
                doc.close();
            }
        }
    }

    public static void addText(String text, PDFont font, long fontSize,
            PDPage page, PDPageContentStream contentStream) throws
IOException {

        // Compute x
        float x = lastX;
        float nextX = lastX + font.getStringWidth(text) * fontSize / 1000f;

        // Compute Y
        float y = page.getMediaBox().getHeight()
                - (font.getFontHeight("A".getBytes(), 0, 1) * fontSize /
1000f);

        contentStream.beginText();
        contentStream.setFont(font, fontSize);
        contentStream.moveTextPositionByAmount(x, y);
        contentStream.drawString(text);
        contentStream.endText();

        // Recompute lastX
        lastX = nextX;
    }

}
------------------------------------------------------

I would like know if it's the correct mean? If it's OK, I would like know if
it's possible to retrieve the default Font of the document, because in my
case I have setted the Font?

My code doesn't manage wrap text and I would like know how to manage that?

I'm very interested to provides and contribute Hight level API for PDFBox
(paragraph, table...) but if I have no support I will give up my idea (hope
you will understand).

Thank a lot for your help!

Regards Angelo




2011/9/5 Angelo zerr <[email protected]>

> Hi Jeremias,
>
> I'm sorry I have not seen your answer
> http://mail-archives.apache.org/mod_mbox/incubator-odf-dev/201108.mbox/%[email protected]%3E
> When I have studied FOP to manage PDF just with Java PDF widget I have not
> found documentation so I believed that it was not possible, but it seems
> that is possible.
> That's very cool. I will study that.
>
> Many thanks!
>
> Regards Angelo
>
>
> 2011/9/5 Jeremias Maerki <[email protected]>
>
>> Angelo,
>> as I explained in [1], you don't have to use XSL-FO when using Apache
>> FOP. It supports alternative means to create PDFs.
>>
>> [1]
>> http://mail-archives.apache.org/mod_mbox/incubator-odf-dev/201108.mbox/%[email protected]%3E
>>
>> But of course, Apache PDFBox would profit a lot from a higher-level PDF
>> production API. Any contributions are more than welcome.
>>
>> On 05.09.2011 10:56:20 Angelo zerr wrote:
>> > Hi Jukka,
>> >
>> > Thank a lot for you answer. I have already implemented a docx->PDF and
>> > odt->PDF converters with FOP but I decided to give up for :
>> >
>> > * performance reason. I have used XSLT cache, use xsl:key to compute the
>> > odt/docx styles but the FOP implementation is less performant than iText
>> > implementation, because :
>> >   * FOP process : odt -> XSLT -> FO -> FOP
>> >   * iText process : odt -> ODFDOM (Java) -> iText
>> > * xslt vs Java model : with the iText process, your model is Java,
>> although
>> > with FOP your model is XML. I prefer develop Java instead of XSLT.
>> >
>> > That's why I'm searching Java PDF API like PDFBox to replace iText to
>> > provides our code to Apache.
>> >
>> > Regards Angelo
>> >
>> > 2011/9/5 Jukka Zitting <[email protected]>
>> >
>> > > Hi Angelo,
>> > >
>> > > On Mon, Sep 5, 2011 at 10:11 AM, Angelo zerr <[email protected]>
>> > > wrote:
>> > > > I suppose that my post was not well explained as I have no answer. I
>> will
>> > > be
>> > > > very happy to use PDFBox in our XDocReport converter (docx-> PDF and
>> > > odt->
>> > > > PDF) but develop converter is a big work and I can not investiaget
>> time
>> > > if I
>> > > > have no support.
>> > >
>> > > There's been some interest in making it easier to use PDFBox to
>> > > generate complex new PDF documents, but so far the main use cases have
>> > > been simpler. You might want to look at Apache FOP
>> > > (http://xmlgraphics.apache.org/fop/) for a higher-level PDF
>> generation
>> > > tool.
>> > >
>> > > BR,
>> > >
>> > > Jukka Zitting
>> > >
>>
>>
>>
>>
>> Jeremias Maerki
>>
>>
>

Reply via email to