Fix bug #51188 - Support for getting and setting XPWF zoom settings

git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1128312 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Nick Burch 2011-05-27 14:00:44 +00:00
parent d02dee4c68
commit e21094eaaa
4 changed files with 81 additions and 2 deletions

View File

@ -34,6 +34,7 @@
<changes> <changes>
<release version="3.8-beta3" date="2011-??-??"> <release version="3.8-beta3" date="2011-??-??">
<action dev="poi-developers" type="add">51188 - Support for getting and setting XPWF zoom settings</action>
<action dev="poi-developers" type="add">51134 - Support for adding Numbering and Styles to a XWPF document that doesn't already have them</action> <action dev="poi-developers" type="add">51134 - Support for adding Numbering and Styles to a XWPF document that doesn't already have them</action>
<action dev="poi-developers" type="fix">51273 - Formula Value Cache fix for repeated evaluations</action> <action dev="poi-developers" type="fix">51273 - Formula Value Cache fix for repeated evaluations</action>
<action dev="poi-developers" type="add">51171 - Improved performance of SharedValueManager </action> <action dev="poi-developers" type="add">51171 - Improved performance of SharedValueManager </action>

View File

@ -961,6 +961,20 @@ public class XWPFDocument extends POIXMLDocument implements Document, IBody {
settings.removeEnforcement(); settings.removeEnforcement();
} }
/**
* Return the zoom level, as a percentage
*/
public long getZoomPercent() {
return settings.getZoomPercent();
}
/**
* Sets the zoom level, as a percentage
*/
public void setZoomPercent(long zoomPercent) {
settings.setZoomPercent(zoomPercent);
}
/** /**
* inserts an existing XWPFTable to the arrays bodyElements and tables * inserts an existing XWPFTable to the arrays bodyElements and tables
* @param pos * @param pos

View File

@ -19,6 +19,7 @@ package org.apache.poi.xwpf.usermodel;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.io.OutputStream; import java.io.OutputStream;
import java.math.BigInteger;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
@ -30,6 +31,7 @@ import org.apache.poi.openxml4j.opc.PackageRelationship;
import org.apache.xmlbeans.XmlOptions; import org.apache.xmlbeans.XmlOptions;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTDocProtect; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTDocProtect;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTSettings; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTSettings;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTZoom;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STDocProtect; import org.openxmlformats.schemas.wordprocessingml.x2006.main.STDocProtect;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STOnOff; import org.openxmlformats.schemas.wordprocessingml.x2006.main.STOnOff;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.SettingsDocument; import org.openxmlformats.schemas.wordprocessingml.x2006.main.SettingsDocument;
@ -48,6 +50,46 @@ public class XWPFSettings extends POIXMLDocumentPart {
ctSettings = CTSettings.Factory.newInstance(); ctSettings = CTSettings.Factory.newInstance();
} }
/**
* Set zoom.<br/>
* In the zoom tag inside settings.xml file <br/>
* it sets the value of zoom
* <br/>
* sample snippet from settings.xml
* <pre>
* &lt;w:zoom w:percent="50" /&gt;
* <pre>
* @return percentage as an integer of zoom level
*/
public long getZoomPercent() {
CTZoom zoom;
if (!ctSettings.isSetZoom()) {
zoom = ctSettings.addNewZoom();
} else {
zoom = ctSettings.getZoom();
}
return zoom.getPercent().longValue();
}
/**
* Set zoom.<br/>
* In the zoom tag inside settings.xml file <br/>
* it sets the value of zoom
* <br/>
* sample snippet from settings.xml
* <pre>
* &lt;w:zoom w:percent="50" /&gt;
* <pre>
* @return percentage as an integer of zoom level
*/
public void setZoomPercent(long zoomPercent) {
if (! ctSettings.isSetZoom()) {
ctSettings.addNewZoom();
}
CTZoom zoom = ctSettings.getZoom();
zoom.setPercent(BigInteger.valueOf(zoomPercent));
}
/** /**
* Verifies the documentProtection tag inside settings.xml file <br/> * Verifies the documentProtection tag inside settings.xml file <br/>

View File

@ -200,8 +200,30 @@ public final class TestXWPFDocument extends TestCase {
assertEquals(p3, doc.getParagraphs().get(0)); assertEquals(p3, doc.getParagraphs().get(0));
} }
public void testGIFSupport() throws Exception public void testSettings() throws Exception {
{ XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("WithGIF.docx");
assertEquals(120, doc.getZoomPercent());
assertEquals(false, doc.isEnforcedCommentsProtection());
assertEquals(false, doc.isEnforcedFillingFormsProtection());
assertEquals(false, doc.isEnforcedReadonlyProtection());
assertEquals(false, doc.isEnforcedTrackedChangesProtection());
doc.setZoomPercent(124);
// Only one enforcement allowed, last one wins!
doc.enforceFillingFormsProtection();
doc.enforceReadonlyProtection();
doc = XWPFTestDataSamples.writeOutAndReadBack(doc);
assertEquals(124, doc.getZoomPercent());
assertEquals(false, doc.isEnforcedCommentsProtection());
assertEquals(false, doc.isEnforcedFillingFormsProtection());
assertEquals(true, doc.isEnforcedReadonlyProtection());
assertEquals(false, doc.isEnforcedTrackedChangesProtection());
}
public void testGIFSupport() throws Exception {
XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("WithGIF.docx"); XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("WithGIF.docx");
ArrayList<PackagePart> gifParts = doc.getPackage().getPartsByContentType(XWPFRelation.IMAGE_GIF.getContentType()); ArrayList<PackagePart> gifParts = doc.getPackage().getPartsByContentType(XWPFRelation.IMAGE_GIF.getContentType());
assertEquals("Expected exactly one GIF part in package.",1,gifParts.size()); assertEquals("Expected exactly one GIF part in package.",1,gifParts.size());