And, 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.
Chris Fleischmann wrote:
>
> I 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.
>
>
> 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?
>>
>>
>>
>
>
--
View this message in context:
http://www.nabble.com/Extract-all-content-from-a-page-of-a-document-and-add-to-a-textframe-in-another-document-tp24124814p24139699.html
Sent from the openoffice - api dev mailing list archive at Nabble.com.
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]