|
View:
New views
4 Messages
—
Rating Filter:
Alert me
|
|
|
Extract all content from a page of a document and add to a textframe in another documentFolks, perhaps this has already been answered, or perhaps cannot be done, but I am attempting to add content to a Writer / XText... adding content that is either an image or normal text (with different font attributes; bold, italics, underline etc)... Once the page is created, I would then like to be able to extract all of the contents from the newly created pages, and with a new blank document, transfer each page in to a textframe that I programmatically create shrinking the "page content" to fit the text frame...
Does any one know how I would go about that/this? So far I have simple functions like; protected void createExampleData(com.sun.star.text.XText xText) { try { xText.setString("This is an example sentence"); com.sun.star.text.XWordCursor xWordCursor = (com.sun.star.text.XWordCursor) UnoRuntime.queryInterface( com.sun.star.text.XWordCursor.class, xText.getStart()); xWordCursor.gotoNextWord(false); xWordCursor.gotoNextWord(false); xWordCursor.gotoEndOfWord(true); com.sun.star.beans.XPropertySet xPropertySet = (com.sun.star.beans.XPropertySet) UnoRuntime.queryInterface( com.sun.star.beans.XPropertySet.class, xWordCursor); xPropertySet.setPropertyValue("CharWeight", new Float(com.sun.star.awt.FontWeight.BOLD)); } catch (Exception e) { e.printStackTrace(System.err); } } protected void loadJpgImage(XText xText, String strImgFileName, int width, int height) throws Exception, java.lang.Exception { // insert RectangleShape and get shape text, then manipulate text Object textGraphicObject = xWriterFactory.createInstance("com.sun.star.text.TextGraphicObject"); XTextContent xTextContent = (XTextContent) UnoRuntime.queryInterface(XTextContent.class, textGraphicObject); XPropertySet xPropertySet = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class, textGraphicObject); xPropertySet.setPropertyValue("AnchorType", TextContentAnchorType.AT_PARAGRAPH); xText.insertTextContent(xText.getEnd(), xTextContent, false); // Setting the vertical and horizontal position //xPropertySet.setPropertyValue("HoriOrientPosition", new Integer(x)); //xPropertySet.setPropertyValue("VertOrientPosition", new Integer(y)); xPropertySet.setPropertyValue("Width", new Integer(width)); xPropertySet.setPropertyValue("Height", new Integer(height)); xPropertySet.setPropertyValue("GraphicURL", strImgFileName); Object xBitmapContainerObject = xWriterFactory.createInstance("com.sun.star.drawing.BitmapTable"); XNameContainer xBitmapContainer = (XNameContainer) UnoRuntime.queryInterface(XNameContainer.class, xBitmapContainerObject); MessageDigest md = MessageDigest.getInstance("MD5"); md.update(strImgFileName.getBytes(), 0, strImgFileName.length()); String internalName = new BigInteger(1, md.digest()).toString(16); xBitmapContainer.insertByName(internalName, strImgFileName); String internalURL = (String)(xBitmapContainer.getByName(internalName)); xPropertySet.setPropertyValue("GraphicURL", internalURL); xBitmapContainer.removeByName(internalName); } To create sample text, and to load images in to the document... And now I would like to be able to extract such content/the page, to then insert the content in to a textFrame of another document. Is this possible? |
|
|
Re: Extract all content from a page of a document and add to a textframe in another documentI have since found that I can extract the contents of the page (albeit a little too manual for my liking), like so:
private void copyContents() { try { //the controllers XController xController_sourceDoc = xTextDocument_src.getCurrentController(); XController xController_targetDoc = xTextDocument_dest.getCurrentController(); // the cursor for the source document XTextViewCursorSupplier xViewCursorSupplier_sourceDoc = (XTextViewCursorSupplier) UnoRuntime.queryInterface(XTextViewCursorSupplier.class, xController_sourceDoc); //selecting the whole source document XTextViewCursor xTextViewCursor_sourceDoc = xViewCursorSupplier_sourceDoc.getViewCursor(); XPageCursor xPageCursor = (XPageCursor) UnoRuntime.queryInterface( XPageCursor.class, xTextViewCursor_sourceDoc); // select the current page of document with the cursor xPageCursor.jumpToLastPage(); xPageCursor.jumpToEndOfPage(); int currentPage = xPageCursor.getPage(); while (xPageCursor.getPage() == currentPage) { if (!xTextViewCursor_sourceDoc.goLeft((short)1, true)) { break; } } //getting the data supplier of our source doc XTransferableSupplier xTransferableSupplier_sourceDoc = (XTransferableSupplier) UnoRuntime.queryInterface( XTransferableSupplier.class, xController_sourceDoc); //saving the selected contents XTransferable xTransferable = xTransferableSupplier_sourceDoc.getTransferable(); //getting the data supplier of our target doc XTransferableSupplier xTransferableSupplier_targetDoc = (XTransferableSupplier) UnoRuntime.queryInterface( XTransferableSupplier.class, xController_targetDoc); //the cursor for the target document XTextViewCursorSupplier xViewCursorSupplier_targetDoc = (XTextViewCursorSupplier) UnoRuntime.queryInterface(XTextViewCursorSupplier.class, xController_targetDoc); //going to the end of the source document XTextViewCursor xTextViewCursor_targetDoc = xViewCursorSupplier_targetDoc.getViewCursor(); xTextViewCursor_targetDoc.gotoEnd(false); //inserting the source document there xTransferableSupplier_targetDoc.insertTransferable(xTransferable); } catch (Exception e) { e.printStackTrace(System.err); } } Now obviously I can expland the while loop to iterate over "every" page as I am doing above... Now to see if i can add it to a textframe (autosizing as appropriate). If there is a better approach, please do let me know.
|
|
|
Re: Extract all content from a page of a document and add to a textframe in another documentAnd, I'm able to create the textframe like so;
XText xText = xTextDocument_dest.getText(); xText = getTextFrame(xText); And the getTextFrame method: private XText getTextFrame(XText xText) { try { Object textFrame = xWriterFactory.createInstance("com.sun.star.text.TextFrame"); XTextContent xTextContentFrame = (XTextContent) UnoRuntime.queryInterface(XTextContent.class, textFrame); XPropertySet xShapeProps = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class, textFrame); xShapeProps.setPropertyValue("AnchorType", TextContentAnchorType.AT_PAGE); // Setting the vertical and horizontal position xShapeProps.setPropertyValue("VertOrient", new Short(VertOrientation.NONE)); xShapeProps.setPropertyValue("HoriOrient", new Short(HoriOrientation.NONE)); xShapeProps.setPropertyValue("VertOrientPosition", new Integer(1000)); xShapeProps.setPropertyValue("HoriOrientPosition", new Integer(1000)); // Set the width of the shape. xShapeProps.setPropertyValue("FrameWidthAbsolute", (size.Width / 2) - 2000); xShapeProps.setPropertyValue("FrameHeightAbsolute", size.Height - 2000); xText.insertTextContent(xText.getEnd(), xTextContentFrame, false); XText xFrameText = (XText) UnoRuntime.queryInterface(XText.class, textFrame); return xFrameText; } Whats left is to hopefully shrink the text within the textframe so that the textframe fits on to the page... ie., reducing the size of the text etc.
|
|
|
Re: Extract all content from a page of a document and add to a textframe in another documentSounds like you want ot create something like a PDF and then add
something like a watermark, or other overlay content. Ian. On Sat, 2009-06-20 at 05:31 -0700, Chris Fleischmann wrote: > Folks, perhaps this has already been answered, or perhaps cannot be done, but > I am attempting to add content to a Writer / XText... adding content that is > either an image or normal text (with different font attributes; bold, > italics, underline etc)... Once the page is created, I would then like to be > able to extract all of the contents from the newly created pages, and with a > new blank document, transfer each page in to a textframe that I > programmatically create shrinking the "page content" to fit the text > frame... > > Does any one know how I would go about that/this? > > So far I have simple functions like; > > protected void createExampleData(com.sun.star.text.XText xText) { > > try { > xText.setString("This is an example sentence"); > > com.sun.star.text.XWordCursor xWordCursor = > (com.sun.star.text.XWordCursor) > UnoRuntime.queryInterface( > com.sun.star.text.XWordCursor.class, xText.getStart()); > > xWordCursor.gotoNextWord(false); > xWordCursor.gotoNextWord(false); > xWordCursor.gotoEndOfWord(true); > > com.sun.star.beans.XPropertySet xPropertySet = > (com.sun.star.beans.XPropertySet) > UnoRuntime.queryInterface( > com.sun.star.beans.XPropertySet.class, xWordCursor); > xPropertySet.setPropertyValue("CharWeight", > new Float(com.sun.star.awt.FontWeight.BOLD)); > } catch (Exception e) { > e.printStackTrace(System.err); > } > } > > protected void loadJpgImage(XText xText, String strImgFileName, int > width, int height) > throws Exception, java.lang.Exception { > // insert RectangleShape and get shape text, then manipulate text > Object textGraphicObject = > xWriterFactory.createInstance("com.sun.star.text.TextGraphicObject"); > > XTextContent xTextContent = (XTextContent) > UnoRuntime.queryInterface(XTextContent.class, textGraphicObject); > > XPropertySet xPropertySet = (XPropertySet) > UnoRuntime.queryInterface(XPropertySet.class, textGraphicObject); > > xPropertySet.setPropertyValue("AnchorType", > TextContentAnchorType.AT_PARAGRAPH); > > xText.insertTextContent(xText.getEnd(), xTextContent, false); > > // Setting the vertical and horizontal position > //xPropertySet.setPropertyValue("HoriOrientPosition", new > Integer(x)); > //xPropertySet.setPropertyValue("VertOrientPosition", new > Integer(y)); > xPropertySet.setPropertyValue("Width", new Integer(width)); > xPropertySet.setPropertyValue("Height", new Integer(height)); > > xPropertySet.setPropertyValue("GraphicURL", strImgFileName); > > Object xBitmapContainerObject = > xWriterFactory.createInstance("com.sun.star.drawing.BitmapTable"); > > XNameContainer xBitmapContainer = (XNameContainer) > UnoRuntime.queryInterface(XNameContainer.class, > xBitmapContainerObject); > > MessageDigest md = MessageDigest.getInstance("MD5"); > md.update(strImgFileName.getBytes(), 0, strImgFileName.length()); > > String internalName = new BigInteger(1, md.digest()).toString(16); > > xBitmapContainer.insertByName(internalName, strImgFileName); > > String internalURL = > (String)(xBitmapContainer.getByName(internalName)); > > xPropertySet.setPropertyValue("GraphicURL", internalURL); > > xBitmapContainer.removeByName(internalName); > } > > To create sample text, and to load images in to the document... > > And now I would like to be able to extract such content/the page, to then > insert the content in to a textFrame of another document. Is this possible? > > --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscribe@... For additional commands, e-mail: dev-help@... |
| Free embeddable forum powered by Nabble | Forum Help |