mirror of https://github.com/apache/poi.git
Bug 55802 - Special Letters not exported correct
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1563496 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
40ceccdcbd
commit
6a864cce7b
|
@ -45,6 +45,8 @@ import org.openxmlformats.schemas.drawingml.x2006.main.CTPresetGeometry2D;
|
||||||
import org.openxmlformats.schemas.drawingml.x2006.main.CTShapeProperties;
|
import org.openxmlformats.schemas.drawingml.x2006.main.CTShapeProperties;
|
||||||
import org.openxmlformats.schemas.drawingml.x2006.main.CTTransform2D;
|
import org.openxmlformats.schemas.drawingml.x2006.main.CTTransform2D;
|
||||||
import org.openxmlformats.schemas.drawingml.x2006.main.STShapeType;
|
import org.openxmlformats.schemas.drawingml.x2006.main.STShapeType;
|
||||||
|
import org.openxmlformats.schemas.drawingml.x2006.picture.CTPicture;
|
||||||
|
import org.openxmlformats.schemas.drawingml.x2006.picture.CTPictureNonVisual;
|
||||||
import org.openxmlformats.schemas.drawingml.x2006.wordprocessingDrawing.CTAnchor;
|
import org.openxmlformats.schemas.drawingml.x2006.wordprocessingDrawing.CTAnchor;
|
||||||
import org.openxmlformats.schemas.drawingml.x2006.wordprocessingDrawing.CTInline;
|
import org.openxmlformats.schemas.drawingml.x2006.wordprocessingDrawing.CTInline;
|
||||||
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTBr;
|
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTBr;
|
||||||
|
@ -69,8 +71,6 @@ import org.openxmlformats.schemas.wordprocessingml.x2006.main.STUnderline;
|
||||||
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STVerticalAlignRun;
|
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STVerticalAlignRun;
|
||||||
import org.w3c.dom.NodeList;
|
import org.w3c.dom.NodeList;
|
||||||
import org.w3c.dom.Text;
|
import org.w3c.dom.Text;
|
||||||
import org.openxmlformats.schemas.drawingml.x2006.picture.CTPicture;
|
|
||||||
import org.openxmlformats.schemas.drawingml.x2006.picture.CTPictureNonVisual;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* XWPFRun object defines a region of text with a common set of properties
|
* XWPFRun object defines a region of text with a common set of properties
|
||||||
|
@ -81,6 +81,16 @@ public class XWPFRun implements ISDTContents, IRunElement{
|
||||||
private IRunBody parent;
|
private IRunBody parent;
|
||||||
private List<XWPFPicture> pictures;
|
private List<XWPFPicture> pictures;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @see <a href="http://msdn.microsoft.com/en-us/library/ff533743(v=office.12).aspx">[MS-OI29500] Run Fonts</a>
|
||||||
|
*/
|
||||||
|
public static enum FontCharRange {
|
||||||
|
ascii /* char 0-127 */,
|
||||||
|
cs /* complex symbol */,
|
||||||
|
eastAsia /* east asia */,
|
||||||
|
hAnsi /* high ansi */
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param r the CTR bean which holds the run attributes
|
* @param r the CTR bean which holds the run attributes
|
||||||
* @param p the parent paragraph
|
* @param p the parent paragraph
|
||||||
|
@ -481,29 +491,97 @@ public class XWPFRun implements ISDTContents, IRunElement{
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Specifies the fonts which shall be used to display the text contents of
|
* Gets the fonts which shall be used to display the text contents of
|
||||||
* this run. Specifies a font which shall be used to format all characters
|
* this run. Specifies a font which shall be used to format all characters
|
||||||
* in the ASCII range (0 - 127) within the parent run
|
* in the ASCII range (0 - 127) within the parent run
|
||||||
*
|
*
|
||||||
* @return a string representing the font family
|
* @return a string representing the font family
|
||||||
*/
|
*/
|
||||||
public String getFontFamily() {
|
public String getFontFamily() {
|
||||||
CTRPr pr = run.getRPr();
|
return getFontFamily(null);
|
||||||
return (pr != null && pr.isSetRFonts()) ? pr.getRFonts().getAscii()
|
|
||||||
: null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the font family for the specified font char range.
|
||||||
|
* If fcr is null, the font char range "ascii" is used
|
||||||
|
*
|
||||||
|
* @param fcr the font char range, defaults to "ansi"
|
||||||
|
* @return a string representing the font famil
|
||||||
|
*/
|
||||||
|
public String getFontFamily(FontCharRange fcr) {
|
||||||
|
CTRPr pr = run.getRPr();
|
||||||
|
if (pr == null || !pr.isSetRFonts()) return null;
|
||||||
|
|
||||||
|
CTFonts fonts = pr.getRFonts();
|
||||||
|
switch (fcr == null ? FontCharRange.ascii : fcr) {
|
||||||
|
default:
|
||||||
|
case ascii:
|
||||||
|
return fonts.getAscii();
|
||||||
|
case cs:
|
||||||
|
return fonts.getCs();
|
||||||
|
case eastAsia:
|
||||||
|
return fonts.getEastAsia();
|
||||||
|
case hAnsi:
|
||||||
|
return fonts.getHAnsi();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Specifies the fonts which shall be used to display the text contents of
|
* Specifies the fonts which shall be used to display the text contents of
|
||||||
* this run. Specifies a font which shall be used to format all characters
|
* this run. Specifies a font which shall be used to format all characters
|
||||||
* in the ASCII range (0 - 127) within the parent run
|
* in the ASCII range (0 - 127) within the parent run.
|
||||||
|
*
|
||||||
|
* Also sets the other font ranges, if they haven't been set before
|
||||||
*
|
*
|
||||||
* @param fontFamily
|
* @param fontFamily
|
||||||
|
*
|
||||||
|
* @see FontCharRange
|
||||||
*/
|
*/
|
||||||
public void setFontFamily(String fontFamily) {
|
public void setFontFamily(String fontFamily) {
|
||||||
|
setFontFamily(fontFamily, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Specifies the fonts which shall be used to display the text contents of
|
||||||
|
* this run. The default handling for fcr == null is to overwrite the
|
||||||
|
* ascii font char range with the given font family and also set all not
|
||||||
|
* specified font ranges
|
||||||
|
*
|
||||||
|
* @param fontFamily
|
||||||
|
* @param fcr FontCharRange or null for default handling
|
||||||
|
*/
|
||||||
|
public void setFontFamily(String fontFamily, FontCharRange fcr) {
|
||||||
CTRPr pr = run.isSetRPr() ? run.getRPr() : run.addNewRPr();
|
CTRPr pr = run.isSetRPr() ? run.getRPr() : run.addNewRPr();
|
||||||
CTFonts fonts = pr.isSetRFonts() ? pr.getRFonts() : pr.addNewRFonts();
|
CTFonts fonts = pr.isSetRFonts() ? pr.getRFonts() : pr.addNewRFonts();
|
||||||
fonts.setAscii(fontFamily);
|
|
||||||
|
if (fcr == null) {
|
||||||
|
fonts.setAscii(fontFamily);
|
||||||
|
if (!fonts.isSetHAnsi()) {
|
||||||
|
fonts.setHAnsi(fontFamily);
|
||||||
|
}
|
||||||
|
if (!fonts.isSetCs()) {
|
||||||
|
fonts.setCs(fontFamily);
|
||||||
|
}
|
||||||
|
if (!fonts.isSetEastAsia()) {
|
||||||
|
fonts.setEastAsia(fontFamily);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
switch (fcr) {
|
||||||
|
case ascii:
|
||||||
|
fonts.setAscii(fontFamily);
|
||||||
|
break;
|
||||||
|
case cs:
|
||||||
|
fonts.setCs(fontFamily);
|
||||||
|
break;
|
||||||
|
case eastAsia:
|
||||||
|
fonts.setEastAsia(fontFamily);
|
||||||
|
break;
|
||||||
|
case hAnsi:
|
||||||
|
fonts.setHAnsi(fontFamily);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -37,6 +37,7 @@ import org.junit.runners.Suite;
|
||||||
@RunWith(Suite.class)
|
@RunWith(Suite.class)
|
||||||
@Suite.SuiteClasses({
|
@Suite.SuiteClasses({
|
||||||
TestXWPFBugs.class,
|
TestXWPFBugs.class,
|
||||||
|
org.apache.poi.xwpf.usermodel.TestXWPFBugs.class,
|
||||||
TestXWPFDocument.class,
|
TestXWPFDocument.class,
|
||||||
TestXWPFWordExtractor.class,
|
TestXWPFWordExtractor.class,
|
||||||
TestXWPFHeaderFooterPolicy.class,
|
TestXWPFHeaderFooterPolicy.class,
|
||||||
|
|
|
@ -0,0 +1,51 @@
|
||||||
|
/* ====================================================================
|
||||||
|
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||||
|
contributor license agreements. See the NOTICE file distributed with
|
||||||
|
this work for additional information regarding copyright ownership.
|
||||||
|
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||||
|
(the "License"); you may not use this file except in compliance with
|
||||||
|
the License. You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
==================================================================== */
|
||||||
|
package org.apache.poi.xwpf.usermodel;
|
||||||
|
|
||||||
|
import static org.junit.Assert.assertEquals;
|
||||||
|
|
||||||
|
import org.apache.poi.xwpf.usermodel.XWPFRun.FontCharRange;
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
public class TestXWPFBugs {
|
||||||
|
@Test
|
||||||
|
public void bug55802() throws Exception {
|
||||||
|
String blabla =
|
||||||
|
"Bir, iki, \u00fc\u00e7, d\u00f6rt, be\u015f,\n"+
|
||||||
|
"\nalt\u0131, yedi, sekiz, dokuz, on.\n"+
|
||||||
|
"\nK\u0131rm\u0131z\u0131 don,\n"+
|
||||||
|
"\ngel bizim bah\u00e7eye kon,\n"+
|
||||||
|
"\nsar\u0131 limon";
|
||||||
|
XWPFDocument doc = new XWPFDocument();
|
||||||
|
XWPFRun run = doc.createParagraph().createRun();
|
||||||
|
|
||||||
|
for (String str : blabla.split("\n")) {
|
||||||
|
run.setText(str);
|
||||||
|
run.addBreak();
|
||||||
|
}
|
||||||
|
|
||||||
|
run.setFontFamily("Times New Roman");
|
||||||
|
run.setFontSize(20);
|
||||||
|
assertEquals(run.getFontFamily(), "Times New Roman");
|
||||||
|
assertEquals(run.getFontFamily(FontCharRange.cs), "Times New Roman");
|
||||||
|
assertEquals(run.getFontFamily(FontCharRange.eastAsia), "Times New Roman");
|
||||||
|
assertEquals(run.getFontFamily(FontCharRange.hAnsi), "Times New Roman");
|
||||||
|
run.setFontFamily("Arial", FontCharRange.hAnsi);
|
||||||
|
assertEquals(run.getFontFamily(FontCharRange.hAnsi), "Arial");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue