mirror of https://github.com/apache/poi.git
bug 63327 allow retrieval of wmf data embedded in emf
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1857136 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
ad11a5d363
commit
a5278ccad9
|
@ -408,7 +408,7 @@ public class HemfComment {
|
|||
public static class EmfCommentDataWMF implements EmfCommentData {
|
||||
private final Rectangle2D bounds = new Rectangle2D.Double();
|
||||
private final List<EmfCommentDataFormat> formats = new ArrayList<>();
|
||||
|
||||
private byte[] wmfData;
|
||||
@Override
|
||||
public HemfCommentRecordType getCommentRecordType() {
|
||||
return HemfCommentRecordType.emfWMF;
|
||||
|
@ -439,12 +439,16 @@ public class HemfComment {
|
|||
// WMF metafile in the WinMetafile field.
|
||||
int winMetafileSize = (int)leis.readUInt();
|
||||
|
||||
byte[] winMetafile = IOUtils.safelyAllocate(winMetafileSize, MAX_RECORD_LENGTH);
|
||||
wmfData = IOUtils.safelyAllocate(winMetafileSize, MAX_RECORD_LENGTH);
|
||||
// some emf comments are truncated, so we don't use readFully here
|
||||
leis.read(winMetafile);
|
||||
leis.read(wmfData);
|
||||
|
||||
return leis.getReadIndex()-startIdx;
|
||||
}
|
||||
|
||||
public byte[] getWMFData() {
|
||||
return wmfData;
|
||||
}
|
||||
}
|
||||
|
||||
public static class EmfCommentDataUnicode implements EmfCommentData {
|
||||
|
|
|
@ -20,6 +20,7 @@ package org.apache.poi.hemf.usermodel;
|
|||
|
||||
import static org.apache.poi.POITestCase.assertContains;
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertNotNull;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
|
||||
import java.awt.geom.Point2D;
|
||||
|
@ -39,6 +40,7 @@ import java.util.List;
|
|||
import java.util.Set;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
import com.sun.xml.bind.api.impl.NameConverter;
|
||||
import org.apache.poi.POIDataSamples;
|
||||
import org.apache.poi.hemf.record.emf.HemfComment;
|
||||
import org.apache.poi.hemf.record.emf.HemfComment.EmfComment;
|
||||
|
@ -48,6 +50,9 @@ import org.apache.poi.hemf.record.emf.HemfHeader;
|
|||
import org.apache.poi.hemf.record.emf.HemfRecord;
|
||||
import org.apache.poi.hemf.record.emf.HemfRecordType;
|
||||
import org.apache.poi.hemf.record.emf.HemfText;
|
||||
import org.apache.poi.hwmf.record.HwmfRecord;
|
||||
import org.apache.poi.hwmf.record.HwmfText;
|
||||
import org.apache.poi.hwmf.usermodel.HwmfPicture;
|
||||
import org.apache.poi.util.IOUtils;
|
||||
import org.apache.poi.util.RecordFormatException;
|
||||
import org.junit.Test;
|
||||
|
@ -284,6 +289,35 @@ public class HemfPictureTest {
|
|||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testWMFInsideEMF() throws Exception {
|
||||
|
||||
byte[] wmfData = null;
|
||||
try (InputStream is = ss_samples.openResourceAsStream("63327.emf")) {
|
||||
HemfPicture pic = new HemfPicture(is);
|
||||
for (HemfRecord record : pic) {
|
||||
if (record.getEmfRecordType() == HemfRecordType.comment) {
|
||||
HemfComment.EmfComment commentRecord = (HemfComment.EmfComment) record;
|
||||
HemfComment.EmfCommentData emfCommentData = commentRecord.getCommentData();
|
||||
if (emfCommentData instanceof HemfComment.EmfCommentDataWMF) {
|
||||
wmfData = ((HemfComment.EmfCommentDataWMF) emfCommentData).getWMFData();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
assertNotNull(wmfData);
|
||||
assertEquals(230, wmfData.length);
|
||||
HwmfPicture pict = new HwmfPicture(new ByteArrayInputStream(wmfData));
|
||||
String embedded = null;
|
||||
for (HwmfRecord r : pict.getRecords()) {
|
||||
if (r instanceof HwmfText.WmfTextOut) {
|
||||
embedded = ((HwmfText.WmfTextOut) r).getText(StandardCharsets.US_ASCII);
|
||||
}
|
||||
}
|
||||
assertNotNull(embedded);
|
||||
assertEquals("Hw.txt", embedded);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testWindowsText() throws Exception {
|
||||
try (InputStream is = ss_samples.openResourceAsStream("SimpleEMF_windows.emf")) {
|
||||
|
|
Binary file not shown.
Binary file not shown.
Loading…
Reference in New Issue