Hi Angelo PDFDocumentGraphics2D is a Graphics2D subclass, so the API is stable. The only thing special to it is the font and page size setup and the nextPage() method.
You program once against a Graphics2D object to paint individual pages and that allows you to paint on the Screen (AWT/Swing), print to a printer (javax.print) or to create SVG (SVGGraphics2D from Apache Batik), PDF (PDFDocumentGraphics2D from Apache FOP), PostScript (PSDocumentGraphics2D from Apache XML Graphics Commons) or whatever. I think iText has a Graphics2D implementation, too. We could even write one for PDFBox. PDFBox already has the opposite direction: it takes a PDF page and can paint it on a Graphics2D object. That's how it does PDF2Image and how the PDFReader displays the PDF contents. Graphics2D is a vector graphics painting API suitable for a single page/box/screen. It works with absolute coordinates. You can use it to create paged documents. There are tools in java.awt.text that help laying out text but it's no full layout engine. Word processing documents (ODF/OOXML/DOC) are flow-oriented formats, just like HTML and XSL-FO. It's the job of a formatting engine (like Apache FOP) to turn that into a paged format, i.e. from not having to track X/Y to absolute positioning on a page. It does line breaking und checks how many lines fit into a page and continues on a new page if an overflow occurs (that's simplified). Apparently, you have a nice API in iText that allows you to build up the PDF by adding paragraphs and runs where you don't have to worry about line breaking, hyphenation and page breaks. That means, iText has at least a simple formatting engine built in. PDFBox doesn't have that (yet). FOP has a sophisticated one for XSL-FO. Apache Batik has one for the SVG flow-text feature (using java.text.AttributedCharacterIterator, but heavily relying on their internal GVT framework). The JDK has one in javax.swing.text (rendering Text, HTML and RTF, also using java.awt.font and java.text) although I'm starting to believe that it only supports line-breaking, not page breaking. That's the one I used in the example for PDFDocumentGraphics2D. I can't tell if that would make a good basis for a simple layout engine for PDFBox. But I certainly think it might be possible to reuse some of that and try to build a simple page breaker on top of that. I think that might actually one of the best option for have something useful relatively quickly but it might not fit for all possible features that ODF/OOXML offer. So, in the end I don't think you can get around to find or program some kind of formatter/layout engine that handles the transition from flow-based to absolute text, when you go from ODF/OOXML to PDF. Doing that on an engine that does not directly depend on PDFBox would allow you to cater for more than just PDF (taking XDocReport's and ODF Toolkit's view). That's why I suggested to have a look at FOP's intermediate format. Because if you can generate that format you have immediate access to all paged output formats that FOP supports (PDF, PS, AFP, PCL, TIFF, Print). To a lesser degree the same is also possible if you program against Graphics2D because you can then also produce various output formats (see the list of Graphics2D implementations that I gave above). Please note: I don't want to deny PDFBox a nice simple (flow-oriented) API for generating PDFs or a Graphics2D implementation. I'm just pointing out possible directions. And the bitter pill at the end: doing layout can be real hard. I'm speaking from experience. On 15.10.2011 14:09:20 Angelo zerr wrote: > Hi Jeremias , > > Wow thta's a very cool sample! Thank a lot. > > With you sample I must manage x and y position that I have started with > PDFBox implementation. > It seems that PDFDocumentGraphics2D looks like PDPageContentStream (draw > string, set font, color, exc). > > So my question what is advantage to use PDFDocumentGraphics2D from FOP > instead of PDPageContentStream from PDFBox? > PDFDocumentGraphics2D is an API stable? > > Thank a lot for your answer. > > Regards Angelo > > 2011/10/15 Jeremias Maerki <[email protected]> > > > It turned out PDFDocumentGraphics2D was not so operational anymore. > > Somewhere along the way it broke. I've fixed it again [1] and added a > > usage example [2]. That means you'll have to download FOP Trunk [3]. > > > > [1] http://svn.apache.org/viewvc?rev=1183620&view=rev > > [2] > > http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/examples/embedding/java/embedding/ExampleJava2D2PDF.java?view=markup > > [3] http://xmlgraphics.apache.org/fop/download.html > > > > But guys, talking about PDFDocumentGraphics2D is getting very off-topic > > for this list. Please take that part to [email protected] > > from here. > > > > On 14.10.2011 23:54:56 Angelo zerr wrote: > > > Hi Steve > > > > > > 2011/10/14 Steve Hannah <[email protected]> > > > > > > > > > > > > > > > > > > It works but I have the same problem than PDFBox. I must manage x and > > y > > > > > position (increment x and y when I add some text). > > > > > > > > > > > > > It appears that PDFDocumentGraphics2D is just a Graphics2D context. > > Then > > > > presumably you could pass it to the paint() method of any AWT or Swing > > > > component to have that component paint itself to the PDF. E.g. Just > > use a > > > > JTextPane or a JTable, then pas the PDFDocumentGraphics2D object to > > their > > > > paint() methods > > > > > > > > > > Ok thank's for this information. > > > > > > > > > > > > > > > > > > > > I have started to manage that with PDFBox and it works great > > (increment x > > > > > when text is added, increment y when text is too long for the line, > > etc). > > > > > > > > > > I don't see the advantage to use PDFDocumentGraphics2D instread of > > using > > > > > PDFBox PDPageContentStream. > > > > > I'm afraid with FOP because: > > > > > > > > > > * PDFDocumentGraphics2D is not documented. It seems that nobody > > (google > > > > > tell me that) has used PDFDocumentGraphics2D to create PDF from > > scratch. > > > > > > > > > One google search found some API docs. > > > > > > > > > > http://www.jarvana.com/jarvana/view/org/apache/xmlgraphics/fop/1.0/fop-1.0-javadoc.jar!/org/apache/fop/svg/PDFDocumentGraphics2D.html > > > > > > > > Possibly old, but that's what 10 seconds of research found. > > > > > > > > > > When I said documented, I meant that I have no found documentation in the > > > FOP WebSite or other blog which explains how to use this class. I have > > not > > > found sample which use this class. > > > Your link is the Javadoc that I have already read because I have the > > sources > > > of FOP in my Eclipse Workspace. > > > > > > Regards Angelo > > > > > > > > > > > Best regards > > > > > > > > Steve > > > > > > > > > > > > > > Jeremias Maerki > > > > Jeremias Maerki

