git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1839745 13f79535-47bb-0310-9956-ffa450edef68pull/123/merge
: new DocumentDelegate((DocumentEntry)entry); | : new DocumentDelegate((DocumentEntry)entry); | ||||
} | } | ||||
@Override | |||||
public int hashCode() { | |||||
return dir.getName().hashCode(); | |||||
} | |||||
@Override | @Override | ||||
public boolean equals(Object other) { | public boolean equals(Object other) { | ||||
if (!(other instanceof DirectoryDelegate)) { | if (!(other instanceof DirectoryDelegate)) { | ||||
this.doc = doc; | this.doc = doc; | ||||
} | } | ||||
@Override | |||||
public int hashCode() { | |||||
return doc.getName().hashCode(); | |||||
} | |||||
@Override | @Override | ||||
public boolean equals(Object other) { | public boolean equals(Object other) { | ||||
if (!(other instanceof DocumentDelegate)) { | if (!(other instanceof DocumentDelegate)) { |
@Override | @Override | ||||
public void copyTo(OutputStream stream) throws IOException { | public void copyTo(OutputStream stream) throws IOException { | ||||
// Wrap the OutputSteam as a channel | // Wrap the OutputSteam as a channel | ||||
WritableByteChannel out = Channels.newChannel(stream); | |||||
// Now do the transfer | |||||
channel.transferTo(0, channel.size(), out); | |||||
try (WritableByteChannel out = Channels.newChannel(stream)) { | |||||
// Now do the transfer | |||||
channel.transferTo(0, channel.size(), out); | |||||
} | |||||
} | } | ||||
@Override | @Override |
// could do fancy math, but tables can't be that wide, a simple loop is fine | // could do fancy math, but tables can't be that wide, a simple loop is fine | ||||
// if not in this type of stripe, return null | // if not in this type of stripe, return null | ||||
while (firstStart <= c) { | while (firstStart <= c) { | ||||
if (c >= firstStart && c <= secondStart -1) { | |||||
if (c <= secondStart -1) { | |||||
return new CellRangeAddress(table.getStartRowIndex(), table.getEndRowIndex(), firstStart, secondStart - 1); | return new CellRangeAddress(table.getStartRowIndex(), table.getEndRowIndex(), firstStart, secondStart - 1); | ||||
} | } | ||||
firstStart = secondStart + c2Stripe; | firstStart = secondStart + c2Stripe; | ||||
// could do fancy math, but tables can't be that wide, a simple loop is fine | // could do fancy math, but tables can't be that wide, a simple loop is fine | ||||
// if not in this type of stripe, return null | // if not in this type of stripe, return null | ||||
while (firstStart <= c) { | while (firstStart <= c) { | ||||
if (c >= firstStart && c <= secondStart -1) { | |||||
if (c <= secondStart -1) { | |||||
return new CellRangeAddress(firstStart, secondStart - 1, table.getStartColIndex(), table.getEndColIndex()); | return new CellRangeAddress(firstStart, secondStart - 1, table.getStartColIndex(), table.getEndColIndex()); | ||||
} | } | ||||
firstStart = secondStart + c2Stripe; | firstStart = secondStart + c2Stripe; |
*/ | */ | ||||
ZipPackage(InputStream in, PackageAccess access) throws IOException { | ZipPackage(InputStream in, PackageAccess access) throws IOException { | ||||
super(access); | super(access); | ||||
ZipArchiveThresholdInputStream zis = ZipHelper.openZipStream(in); | |||||
ZipArchiveThresholdInputStream zis = ZipHelper.openZipStream(in); // NOSONAR | |||||
try { | try { | ||||
this.zipArchive = new ZipInputStreamZipEntrySource(zis); | this.zipArchive = new ZipInputStreamZipEntrySource(zis); | ||||
} catch (final IOException e) { | } catch (final IOException e) { |
import java.util.Optional; | import java.util.Optional; | ||||
import java.util.function.Function; | import java.util.function.Function; | ||||
import org.apache.commons.collections4.iterators.IteratorIterable; | |||||
import org.apache.commons.collections4.iterators.ReverseListIterator; | |||||
import org.apache.poi.util.Beta; | import org.apache.poi.util.Beta; | ||||
import org.apache.poi.util.Internal; | import org.apache.poi.util.Internal; | ||||
import org.apache.poi.util.LocaleUtil; | import org.apache.poi.util.LocaleUtil; | ||||
public XDDFTextRun appendLineBreak() { | public XDDFTextRun appendLineBreak() { | ||||
CTTextLineBreak br = _p.addNewBr(); | CTTextLineBreak br = _p.addNewBr(); | ||||
// by default, line break has the font properties of the last text run | // by default, line break has the font properties of the last text run | ||||
for (int i = _runs.size() - 1; i <= 0; i--) { | |||||
CTTextCharacterProperties prevProps = _runs.get(i).getProperties(); | |||||
for (XDDFTextRun tr : new IteratorIterable<>(new ReverseListIterator<>(_runs))) { | |||||
CTTextCharacterProperties prevProps = tr.getProperties(); | |||||
// let's find one that is not undefined | // let's find one that is not undefined | ||||
if (prevProps != null) { | if (prevProps != null) { | ||||
br.setRPr((CTTextCharacterProperties) prevProps.copy()); | br.setRPr((CTTextCharacterProperties) prevProps.copy()); |
} | } | ||||
//Substitute the template entries with the generated sheet data files | //Substitute the template entries with the generated sheet data files | ||||
final ZipEntrySource source = new ZipFileZipEntrySource(new ZipSecureFile(tmplFile)); | |||||
injectData(source, stream); | |||||
try (ZipSecureFile zf = new ZipSecureFile(tmplFile); | |||||
ZipFileZipEntrySource source = new ZipFileZipEntrySource(zf)) { | |||||
injectData(source, stream); | |||||
} | |||||
} finally { | } finally { | ||||
deleted = tmplFile.delete(); | deleted = tmplFile.delete(); | ||||
} | } |
String color = null; | String color = null; | ||||
if (run.isSetRPr()) { | if (run.isSetRPr()) { | ||||
CTRPr pr = getRunProperties(false); | CTRPr pr = getRunProperties(false); | ||||
if (pr.isSetColor()) { | |||||
if (pr != null && pr.isSetColor()) { | |||||
CTColor clr = pr.getColor(); | CTColor clr = pr.getColor(); | ||||
color = clr.xgetVal().getStringValue(); | color = clr.xgetVal().getStringValue(); | ||||
} | } |
import org.apache.poi.hslf.record.*; | import org.apache.poi.hslf.record.*; | ||||
import org.apache.poi.hslf.record.SlideListWithText.SlideAtomsSet; | import org.apache.poi.hslf.record.SlideListWithText.SlideAtomsSet; | ||||
import org.apache.poi.poifs.filesystem.DirectoryNode; | import org.apache.poi.poifs.filesystem.DirectoryNode; | ||||
import org.apache.poi.poifs.filesystem.POIFSFileSystem; | |||||
import org.apache.poi.poifs.filesystem.Ole10Native; | import org.apache.poi.poifs.filesystem.Ole10Native; | ||||
import org.apache.poi.poifs.filesystem.POIFSFileSystem; | |||||
import org.apache.poi.sl.usermodel.MasterSheet; | import org.apache.poi.sl.usermodel.MasterSheet; | ||||
import org.apache.poi.sl.usermodel.PictureData.PictureType; | import org.apache.poi.sl.usermodel.PictureData.PictureType; | ||||
import org.apache.poi.sl.usermodel.Resources; | import org.apache.poi.sl.usermodel.Resources; | ||||
// The order of slides is defined by the order of slide atom sets in the | // The order of slides is defined by the order of slide atom sets in the | ||||
// SlideListWithText container. | // SlideListWithText container. | ||||
SlideListWithText slwt = _documentRecord.getSlideSlideListWithText(); | SlideListWithText slwt = _documentRecord.getSlideSlideListWithText(); | ||||
if (slwt == null) { | |||||
throw new IllegalStateException("Slide record not defined."); | |||||
} | |||||
SlideAtomsSet[] sas = slwt.getSlideAtomsSets(); | SlideAtomsSet[] sas = slwt.getSlideAtomsSets(); | ||||
SlideAtomsSet tmp = sas[oldSlideNumber - 1]; | SlideAtomsSet tmp = sas[oldSlideNumber - 1]; | ||||
} | } | ||||
SlideListWithText slwt = _documentRecord.getSlideSlideListWithText(); | SlideListWithText slwt = _documentRecord.getSlideSlideListWithText(); | ||||
if (slwt == null) { | |||||
throw new IllegalStateException("Slide record not defined."); | |||||
} | |||||
SlideAtomsSet[] sas = slwt.getSlideAtomsSets(); | SlideAtomsSet[] sas = slwt.getSlideAtomsSets(); | ||||
List<Record> records = new ArrayList<>(); | List<Record> records = new ArrayList<>(); | ||||
records.addAll(Arrays.asList(ns.getSlideRecords())); | records.addAll(Arrays.asList(ns.getSlideRecords())); | ||||
} | } | ||||
} | } | ||||
if (!na.isEmpty()) { | |||||
nslwt.setSlideAtomsSets(na.toArray(new SlideAtomsSet[0])); | |||||
nslwt.setChildRecord(records.toArray(new Record[0])); | |||||
} | |||||
} | } | ||||
if (na.isEmpty()) { | if (na.isEmpty()) { | ||||
_documentRecord.removeSlideListWithText(nslwt); | _documentRecord.removeSlideListWithText(nslwt); | ||||
} else { | |||||
nslwt.setSlideAtomsSets(na.toArray(new SlideAtomsSet[0])); | |||||
nslwt.setChildRecord(records.toArray(new Record[0])); | |||||
} | } | ||||
} | } | ||||
} | } | ||||
@Override | @Override | ||||
public MasterSheet<HSLFShape,HSLFTextParagraph> createMasterSheet() throws IOException { | |||||
public MasterSheet<HSLFShape,HSLFTextParagraph> createMasterSheet() { | |||||
// TODO implement or throw exception if not supported | // TODO implement or throw exception if not supported | ||||
return null; | return null; | ||||
} | } |
package org.apache.poi.hwpf.converter; | package org.apache.poi.hwpf.converter; | ||||
import java.io.File; | import java.io.File; | ||||
import java.io.IOException; | |||||
import java.io.StringWriter; | import java.io.StringWriter; | ||||
import java.lang.reflect.Method; | import java.lang.reflect.Method; | ||||
import java.util.List; | import java.util.List; | ||||
serializer.transform( domSource, streamResult ); | serializer.transform( domSource, streamResult ); | ||||
} | } | ||||
static Document process( File docFile ) throws Exception | |||||
{ | |||||
final HWPFDocumentCore wordDocument = AbstractWordUtils | |||||
.loadDoc( docFile ); | |||||
WordToTextConverter wordToTextConverter = new WordToTextConverter( | |||||
XMLHelper.getDocumentBuilderFactory().newDocumentBuilder().newDocument() ); | |||||
wordToTextConverter.processDocument( wordDocument ); | |||||
return wordToTextConverter.getDocument(); | |||||
private static Document process( File docFile ) throws IOException, ParserConfigurationException { | |||||
try (final HWPFDocumentCore wordDocument = AbstractWordUtils.loadDoc( docFile )) { | |||||
WordToTextConverter wordToTextConverter = new WordToTextConverter( | |||||
XMLHelper.getDocumentBuilderFactory().newDocumentBuilder().newDocument()); | |||||
wordToTextConverter.processDocument(wordDocument); | |||||
return wordToTextConverter.getDocument(); | |||||
} | |||||
} | } | ||||
private AtomicInteger noteCounters = new AtomicInteger( 1 ); | private AtomicInteger noteCounters = new AtomicInteger( 1 ); | ||||
* @param document | * @param document | ||||
* XML DOM Document used as storage for text pieces | * XML DOM Document used as storage for text pieces | ||||
*/ | */ | ||||
public WordToTextConverter( Document document ) | |||||
@SuppressWarnings("WeakerAccess") | |||||
public WordToTextConverter(Document document ) | |||||
{ | { | ||||
this.textDocumentFacade = new TextDocumentFacade( document ); | this.textDocumentFacade = new TextDocumentFacade( document ); | ||||
} | } | ||||
public WordToTextConverter( TextDocumentFacade textDocumentFacade ) | |||||
@SuppressWarnings("unused") | |||||
public WordToTextConverter(TextDocumentFacade textDocumentFacade ) | |||||
{ | { | ||||
this.textDocumentFacade = textDocumentFacade; | this.textDocumentFacade = textDocumentFacade; | ||||
} | } | ||||
return stringWriter.toString(); | return stringWriter.toString(); | ||||
} | } | ||||
@SuppressWarnings("WeakerAccess") | |||||
public boolean isOutputSummaryInformation() | public boolean isOutputSummaryInformation() | ||||
{ | { | ||||
return outputSummaryInformation; | return outputSummaryInformation; | ||||
currentBlock.appendChild( textDocumentFacade.createText( " (" | currentBlock.appendChild( textDocumentFacade.createText( " (" | ||||
+ UNICODECHAR_ZERO_WIDTH_SPACE | + UNICODECHAR_ZERO_WIDTH_SPACE | ||||
+ hyperlink.replaceAll( "\\/", UNICODECHAR_ZERO_WIDTH_SPACE | |||||
+ hyperlink.replaceAll( "/", UNICODECHAR_ZERO_WIDTH_SPACE | |||||
+ "\\/" + UNICODECHAR_ZERO_WIDTH_SPACE ) | + "\\/" + UNICODECHAR_ZERO_WIDTH_SPACE ) | ||||
+ UNICODECHAR_ZERO_WIDTH_SPACE + ")" ) ); | + UNICODECHAR_ZERO_WIDTH_SPACE + ")" ) ); | ||||
} | } | ||||
block.appendChild( textDocumentFacade.createText( "\n" ) ); | block.appendChild( textDocumentFacade.createText( "\n" ) ); | ||||
} | } | ||||
protected void processNote( HWPFDocument wordDocument, Element block, | |||||
Range noteTextRange ) | |||||
{ | |||||
private void processNote( HWPFDocument wordDocument, Element block, Range noteTextRange ) { | |||||
final int noteIndex = noteCounters.getAndIncrement(); | final int noteIndex = noteCounters.getAndIncrement(); | ||||
block.appendChild( textDocumentFacade | block.appendChild( textDocumentFacade | ||||
.createText( UNICODECHAR_ZERO_WIDTH_SPACE + "[" + noteIndex | .createText( UNICODECHAR_ZERO_WIDTH_SPACE + "[" + noteIndex | ||||
} | } | ||||
} | } | ||||
public void setOutputSummaryInformation( boolean outputDocumentInformation ) | |||||
@SuppressWarnings("unused") | |||||
public void setOutputSummaryInformation(boolean outputDocumentInformation ) | |||||
{ | { | ||||
this.outputSummaryInformation = outputDocumentInformation; | this.outputSummaryInformation = outputDocumentInformation; | ||||
} | } |
package org.apache.poi.hwpf.model; | package org.apache.poi.hwpf.model; | ||||
import java.util.Arrays; | |||||
import org.apache.poi.util.Internal; | import org.apache.poi.util.Internal; | ||||
import org.apache.poi.util.NotImplemented; | import org.apache.poi.util.NotImplemented; | ||||
return 42; // any arbitrary constant will do | return 42; // any arbitrary constant will do | ||||
} | } | ||||
@Override | |||||
public boolean equals(Object other) { | |||||
return other instanceof OldTextPiece && | |||||
Arrays.equals(rawBytes, ((OldTextPiece)other).rawBytes); | |||||
} | |||||
public String toString() { | public String toString() { | ||||
return "OldTextPiece from " + getStart() + " to " + getEnd() + " (" | return "OldTextPiece from " + getStart() + " to " + getEnd() + " (" | ||||
+ getPieceDescriptor() + ")"; | + getPieceDescriptor() + ")"; |