You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@poi.apache.org by fa...@apache.org on 2019/07/19 20:49:48 UTC

svn commit: r1863433 - in /poi/trunk/src/ooxml: java/org/apache/poi/xwpf/usermodel/XWPFDocument.java java/org/apache/poi/xwpf/usermodel/XWPFParagraph.java testcases/org/apache/poi/xwpf/usermodel/TestXWPFDocument.java

Author: fanningpj
Date: Fri Jul 19 20:49:48 2019
New Revision: 1863433

URL: http://svn.apache.org/viewvc?rev=1863433&view=rev
Log:
[github-153] XWPFParagraph: easier way to create a link. Thanks to Thibaut Cuvelier. This closes #153

Modified:
    poi/trunk/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFDocument.java
    poi/trunk/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFParagraph.java
    poi/trunk/src/ooxml/testcases/org/apache/poi/xwpf/usermodel/TestXWPFDocument.java

Modified: poi/trunk/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFDocument.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFDocument.java?rev=1863433&r1=1863432&r2=1863433&view=diff
==============================================================================
--- poi/trunk/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFDocument.java (original)
+++ poi/trunk/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFDocument.java Fri Jul 19 20:49:48 2019
@@ -273,6 +273,7 @@ public class XWPFDocument extends POIXML
         // Get the hyperlinks
         // TODO: make me optional/separated in private function
         try {
+            hyperlinks = new ArrayList<>();
             for (PackageRelationship rel : getPackagePart().getRelationshipsByType(XWPFRelation.HYPERLINK.getRelation())) {
                 hyperlinks.add(new XWPFHyperlink(rel.getId(), rel.getTargetURI().toString()));
             }
@@ -410,6 +411,15 @@ public class XWPFDocument extends POIXML
             }
         }
 
+        // If the link was not found, rebuild the list (maybe a new link was added into the document) and check again.
+        initHyperlinks();
+        for (XWPFHyperlink link : hyperlinks) {
+            if (link.getId().equals(id)) {
+                return link;
+            }
+        }
+
+        // Link still not there? Giving up.
         return null;
     }
 

Modified: poi/trunk/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFParagraph.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFParagraph.java?rev=1863433&r1=1863432&r2=1863433&view=diff
==============================================================================
--- poi/trunk/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFParagraph.java (original)
+++ poi/trunk/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFParagraph.java Fri Jul 19 20:49:48 2019
@@ -1441,6 +1441,29 @@ public class XWPFParagraph implements IB
     }
 
     /**
+     * Appends a new hyperlink run to this paragraph
+     *
+     * @return a new hyperlink run
+     */
+    public XWPFHyperlinkRun createHyperlinkRun(String uri) {
+        // Create a relationship ID for this link. 
+        String rId = getPart().getPackagePart().addExternalRelationship(
+                uri, XWPFRelation.HYPERLINK.getRelation()
+        ).getId();
+        
+        // Create the run. 
+        CTHyperlink ctHyperLink = getCTP().addNewHyperlink();
+        ctHyperLink.setId(rId);
+        ctHyperLink.addNewR();
+        
+        // Append this run to the paragraph. 
+        XWPFHyperlinkRun link = new XWPFHyperlinkRun(ctHyperLink, ctHyperLink.getRArray(0), this);
+        runs.add(link);
+        iruns.add(link);
+        return link;
+    }
+
+    /**
      * insert a new Run in RunArray
      *
      * @param pos The position at which the new run should be added.

Modified: poi/trunk/src/ooxml/testcases/org/apache/poi/xwpf/usermodel/TestXWPFDocument.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/testcases/org/apache/poi/xwpf/usermodel/TestXWPFDocument.java?rev=1863433&r1=1863432&r2=1863433&view=diff
==============================================================================
--- poi/trunk/src/ooxml/testcases/org/apache/poi/xwpf/usermodel/TestXWPFDocument.java (original)
+++ poi/trunk/src/ooxml/testcases/org/apache/poi/xwpf/usermodel/TestXWPFDocument.java Fri Jul 19 20:49:48 2019
@@ -186,6 +186,18 @@ public final class TestXWPFDocument {
     }
 
     @Test
+    public void testAddHyperlink() throws IOException {
+        XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("SampleDoc.docx");
+        XWPFParagraph p = doc.createParagraph();
+        XWPFHyperlinkRun h = p.createHyperlinkRun("http://poi.apache.org/");
+        h.setText("Apache POI");
+
+        assertEquals("http://poi.apache.org/", h.getHyperlink(doc).getURL());
+        assertEquals(p.getRuns().size(), 1);
+        assertEquals(p.getRuns().get(0), h);
+    }
+
+    @Test
     public void testRemoveBodyElement() throws IOException {
         XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("sample.docx");
         assertEquals(3, doc.getParagraphs().size());



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@poi.apache.org
For additional commands, e-mail: commits-help@poi.apache.org