public abstract class OPCPackage extends Object implements RelationshipSource, Closeable
Modifier and Type | Method and Description |
---|---|
PackageRelationship |
addExternalRelationship(String target,
String relationshipType)
Adds an external relationship to a part (except relationships part).
|
PackageRelationship |
addExternalRelationship(String target,
String relationshipType,
String id)
Adds an external relationship to a part (except relationships part).
|
void |
addMarshaller(String contentType,
PartMarshaller marshaller)
Add a marshaller.
|
PackageRelationship |
addRelationship(PackagePartName targetPartName,
TargetMode targetMode,
String relationshipType)
Add a package relationship.
|
PackageRelationship |
addRelationship(PackagePartName targetPartName,
TargetMode targetMode,
String relationshipType,
String relID)
Add a relationship to the package (except relationships part).
|
void |
addThumbnail(String path)
Add a thumbnail to the package.
|
void |
addThumbnail(String filename,
InputStream data)
Add a thumbnail to the package.
|
void |
addUnmarshaller(String contentType,
PartUnmarshaller unmarshaller)
Add an unmarshaller.
|
void |
clearRelationships()
Clear package relationships.
|
void |
close()
Close the open, writable package and save its content.
|
boolean |
containPart(PackagePartName partName)
Check if a part already exists in this package from its name.
|
static OPCPackage |
create(File file)
Creates a new package.
|
static OPCPackage |
create(OutputStream output) |
static OPCPackage |
create(String path)
Creates a new package.
|
PackagePart |
createPart(PackagePartName partName,
String contentType)
Create and add a part, with the specified name and content type, to the
package.
|
PackagePart |
createPart(PackagePartName partName,
String contentType,
ByteArrayOutputStream content)
Add a part to the package.
|
void |
deletePart(PackagePartName partName)
Delete the part with the specified name and its associated relationships
part if one exists.
|
void |
deletePartRecursive(PackagePartName partName)
Delete the part with the specified name and all part listed in its
associated relationships part if one exists.
|
void |
ensureRelationships()
Ensure that the relationships collection is not null.
|
void |
flush()
Flush the package : save all.
|
PackageAccess |
getPackageAccess()
Get the package access mode.
|
PackageProperties |
getPackageProperties()
Retrieves or creates if none exists, core package property part.
|
PackagePart |
getPart(PackagePartName partName)
Retrieve a part identified by its name.
|
PackagePart |
getPart(PackageRelationship partRel)
Get the target part from the specified relationship.
|
ArrayList<PackagePart> |
getParts()
Load the parts of the archive if it has not been done yet.
|
ArrayList<PackagePart> |
getPartsByContentType(String contentType)
Retrieve parts by content type.
|
List<PackagePart> |
getPartsByName(Pattern namePattern)
Retrieve parts by name
|
ArrayList<PackagePart> |
getPartsByRelationshipType(String relationshipType)
Retrieve parts by relationship type.
|
PackageRelationship |
getRelationship(String id)
Retrieves a package relationship from its id.
|
PackageRelationshipCollection |
getRelationships()
Retrieves all package relationships.
|
PackageRelationshipCollection |
getRelationshipsByType(String relationshipType)
Retrieves all relationships with the specified type.
|
int |
getUnusedPartIndex(String nameTemplate)
Get an unused part index based on the namePattern, which doesn't exist yet
and has the lowest positive index
|
boolean |
hasRelationships()
Knows if the part have any relationships.
|
boolean |
isRelationshipExists(PackageRelationship rel)
Checks if the specified relationship is part of this package part.
|
static OPCPackage |
open(File file)
Open a package with read/write permission.
|
static OPCPackage |
open(File file,
PackageAccess access)
Open a package.
|
static OPCPackage |
open(InputStream in)
Open a package.
|
static OPCPackage |
open(String path)
Open a package with read/write permission.
|
static OPCPackage |
open(String path,
PackageAccess access)
Open a package.
|
static OPCPackage |
open(ZipEntrySource zipEntry)
Open an user provided
ZipEntrySource with read-only permission. |
static OPCPackage |
openOrCreate(File file)
Opens a package if it exists, else it creates one.
|
void |
registerPartAndContentType(PackagePart part)
Add the specified part, and register its content type with the content
type manager.
|
void |
removeMarshaller(String contentType)
Remove a marshaller by its content type.
|
void |
removePart(PackagePart part)
Remove the specified part in this package.
|
void |
removePart(PackagePartName partName)
Remove a part in this package.
|
void |
removePartRecursive(PackagePartName partName)
Remove a part from this package as well as its relationship part, if one
exists, and all parts listed in the relationship part.
|
void |
removeRelationship(String id)
Delete a relationship from this package.
|
void |
removeUnmarshaller(String contentType)
Remove an unmarshaller by its content type.
|
boolean |
replaceContentType(String oldContentType,
String newContentType)
Replace a content type in this package.
|
void |
revert()
Close the package WITHOUT saving its content.
|
void |
save(File targetFile)
Save the document in the specified file.
|
void |
save(OutputStream outputStream)
Save the document in the specified output stream.
|
void |
unregisterPartAndContentType(PackagePartName partName)
Remove the specified part, and clear its content type from the content
type manager.
|
boolean |
validatePackage(OPCPackage pkg)
Validates the package compliance with the OPC specifications.
|
public static OPCPackage open(String path) throws InvalidFormatException
path
- The document path.InvalidFormatException
- If the specified file doesn't exist, and a parsing error
occur.public static OPCPackage open(File file) throws InvalidFormatException
file
- The file to open.InvalidFormatException
- If the specified file doesn't exist, and a parsing error
occur.public static OPCPackage open(ZipEntrySource zipEntry) throws InvalidFormatException
ZipEntrySource
with read-only permission.
This method can be used to stream data into POI.
Opposed to other open variants, the data is read as-is, e.g. there aren't
any zip-bomb protection put in place.zipEntry
- the custom sourceInvalidFormatException
- if a parsing error occur.public static OPCPackage open(String path, PackageAccess access) throws InvalidFormatException, InvalidOperationException
path
- The document path.access
- PackageBase access.InvalidFormatException
- If the specified file doesn't exist, and a parsing error
occur.InvalidOperationException
- If the zip file cannot be opened.InvalidFormatException
- if the package is not valid.public static OPCPackage open(File file, PackageAccess access) throws InvalidFormatException
file
- The file to open.access
- PackageBase access.InvalidFormatException
- If the specified file doesn't exist, and a parsing error
occur.public static OPCPackage open(InputStream in) throws InvalidFormatException, IOException
open(String)
, which
doesn't need to hold the whole zip file in memory, and can take advantage
of native methodsin
- The InputStream to read the package fromInvalidFormatException
IOException
public static OPCPackage openOrCreate(File file) throws InvalidFormatException
file
- The file to open or to create.InvalidFormatException
- Throws if the specified file exist and is not valid.public static OPCPackage create(String path)
path
- Path of the document.public static OPCPackage create(File file)
file
- Path of the document.public static OPCPackage create(OutputStream output)
public void flush()
close()
public void close() throws IOException
revert()
when finished with the package.
This method is not thread-safe.close
in interface Closeable
close
in interface AutoCloseable
IOException
- If an IO exception occur during the saving process.public void revert()
public void addThumbnail(String path) throws IOException
path
- The full path to the image file.IOException
public void addThumbnail(String filename, InputStream data) throws IOException
filename
- The full path to the image file.data
- the image dataIOException
public PackageProperties getPackageProperties() throws InvalidFormatException
InvalidFormatException
public PackagePart getPart(PackagePartName partName)
partName
- Part name of the part to retrieve.null
.public ArrayList<PackagePart> getPartsByContentType(String contentType)
contentType
- The content type criteria.public ArrayList<PackagePart> getPartsByRelationshipType(String relationshipType)
relationshipType
- Relationship type.null
.public List<PackagePart> getPartsByName(Pattern namePattern)
namePattern
- The pattern for matching the namespublic PackagePart getPart(PackageRelationship partRel)
partRel
- The part relationship uses to retrieve the part.public ArrayList<PackagePart> getParts() throws InvalidFormatException
InvalidFormatException
- if the package is not valid.public PackagePart createPart(PackagePartName partName, String contentType)
partName
- Part name.contentType
- Part content type.PartAlreadyExistsException
- If rule M1.12 is not verified : Packages shall not contain
equivalent part names and package implementers shall neither
create nor recognize packages with equivalent part names.createPartImpl(PackagePartName, String, boolean)
public PackagePart createPart(PackagePartName partName, String contentType, ByteArrayOutputStream content)
partName
- Part name of the part to create.contentType
- type associated with the filecontent
- the contents to add. In order to have faster operation in
document merge, the data are stored in memory not on a hard
diskcreatePart(PackagePartName, String)
public void removePart(PackagePart part)
part
- The part to remove. If null
, skip the action.removePart(PackagePartName)
public void removePart(PackagePartName partName)
partName
- The part name of the part to remove.public void removePartRecursive(PackagePartName partName) throws InvalidFormatException
partName
- The name of the part to delete.InvalidFormatException
- Throws if the associated relationship part of the specified
part is not valid.public void deletePart(PackagePartName partName)
partName
- Name of the part to deletepublic void deletePartRecursive(PackagePartName partName)
partName
- Name of the part to deletepublic boolean containPart(PackagePartName partName)
partName
- Part name to check.public PackageRelationship addRelationship(PackagePartName targetPartName, TargetMode targetMode, String relationshipType, String relID)
addRelationship
in interface RelationshipSource
targetPartName
- Target part name.targetMode
- Target mode, either Internal or External.relationshipType
- Relationship type.relID
- ID of the relationship.PackageRelationshipTypes
public PackageRelationship addRelationship(PackagePartName targetPartName, TargetMode targetMode, String relationshipType)
addRelationship
in interface RelationshipSource
targetPartName
- Target part name.targetMode
- Target mode, either Internal or External.relationshipType
- Relationship type.PackageRelationshipTypes
public PackageRelationship addExternalRelationship(String target, String relationshipType)
addExternalRelationship
in interface RelationshipSource
target
- External target of the relationshiprelationshipType
- Type of relationship.RelationshipSource.addExternalRelationship(java.lang.String,
java.lang.String)
public PackageRelationship addExternalRelationship(String target, String relationshipType, String id)
addExternalRelationship
in interface RelationshipSource
target
- External target of the relationshiprelationshipType
- Type of relationship.id
- Relationship unique id.RelationshipSource.addExternalRelationship(java.lang.String,
java.lang.String)
public void removeRelationship(String id)
removeRelationship
in interface RelationshipSource
id
- Id of the relationship to delete.public PackageRelationshipCollection getRelationships()
getRelationships
in interface RelationshipSource
InvalidOperationException
- if a read operation is done on a write only package.getRelationshipsHelper(String)
public PackageRelationshipCollection getRelationshipsByType(String relationshipType)
getRelationshipsByType
in interface RelationshipSource
relationshipType
- The filter specifying the relationship type.public void clearRelationships()
clearRelationships
in interface RelationshipSource
public void ensureRelationships()
public PackageRelationship getRelationship(String id)
RelationshipSource
getRelationship
in interface RelationshipSource
id
- ID of the package relationship to retrieve.RelationshipSource.getRelationship(java.lang.String)
public boolean hasRelationships()
RelationshipSource
hasRelationships
in interface RelationshipSource
RelationshipSource.hasRelationships()
public boolean isRelationshipExists(PackageRelationship rel)
RelationshipSource
isRelationshipExists
in interface RelationshipSource
rel
- The relationship to check.RelationshipSource.isRelationshipExists(org.apache.poi.openxml4j.opc.PackageRelationship)
public void addMarshaller(String contentType, PartMarshaller marshaller)
contentType
- The content type to bind to the specified marshaller.marshaller
- The marshaller to register with the specified content type.public void addUnmarshaller(String contentType, PartUnmarshaller unmarshaller)
contentType
- The content type to bind to the specified unmarshaller.unmarshaller
- The unmarshaller to register with the specified content type.public void removeMarshaller(String contentType)
contentType
- The content type associated with the marshaller to remove.public void removeUnmarshaller(String contentType)
contentType
- The content type associated with the unmarshaller to remove.public PackageAccess getPackageAccess()
@NotImplemented public boolean validatePackage(OPCPackage pkg) throws InvalidFormatException
InvalidFormatException
public void save(File targetFile) throws IOException
targetFile
- Destination file.IOException
- Throws if an IO exception occur.save(OutputStream)
public void save(OutputStream outputStream) throws IOException
outputStream
- The stream to save the package.IOException
saveImpl(OutputStream)
public boolean replaceContentType(String oldContentType, String newContentType)
A typical scneario to call this method is to rename a template file to the main format, e.g. ".dotx" to ".docx" ".dotm" to ".docm" ".xltx" to ".xlsx" ".xltm" to ".xlsm" ".potx" to ".pptx" ".potm" to ".pptm"
For example, a code converting a .xlsm macro workbook to .xlsx would look as follows:
OPCPackage pkg = OPCPackage.open(new FileInputStream("macro-workbook.xlsm"));
pkg.replaceContentType(
"application/vnd.ms-excel.sheet.macroEnabled.main+xml",
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml");
FileOutputStream out = new FileOutputStream("workbook.xlsx");
pkg.save(out);
out.close();
oldContentType
- the content type to be replacednewContentType
- the replacementpublic void registerPartAndContentType(PackagePart part)
part
- The part to add.public void unregisterPartAndContentType(PackagePartName partName)
partName
- The part name of the part to remove.public int getUnusedPartIndex(String nameTemplate) throws InvalidFormatException
nameTemplate
- The template for new part names containing a '#'
for the index,
e.g. "/ppt/slides/slide#.xml"InvalidFormatException
- if the nameTemplate is null or doesn't contain
the index char (#) or results in an invalid part nameCopyright © 2010 - 2020 Adobe. All Rights Reserved