How to get an output stream when viewing a document
By default GroupDocs.Viewer saves output results to the local disk, but we also provide a way to save output results into a stream.
There are three interfaces that we can utilize:
- FileStreamFactory - defines the methods that are required for instantiating and releasing output file stream.
- PageStreamFactory - defines the methods that are required for instantiating and releasing output page stream.
- ResourceStreamFactory - defines the methods that are required for creating resource URL, instantiating and releasing output HTML resource stream.
Let’s say that instead of saving rendering results to the local disk we want to have all the output file or output files in form of stream or list of streams.
What we need to do is to implement one or two of the interfaces listed above.
- When rendering into PDF we have to implement FileStreamFactory interface and pass implementation into PdfViewOptions constructor
- When rendering into JPG/PNG or HTML with embedded resources we have to implement PageStreamFactory interface and pass implementation into forEmbeddedResources(…) factory method of HtmlViewOptions, JpgViewOptions or PngViewOptions
- When rendering into HTML with external resources we have to implement PageStreamFactory and ResourceStreamFactory interfaces and pass implementation into forExternalResources(…) factory method of HtmlViewOptions, JpgViewOptions or PngViewOptions
In this example, we’ll render into HTML with embedded resources so we need to implement only PageStreamFactory interface.
List<ByteArrayOutputStream> pages = new ArrayList<>();
Viewer viewer = new Viewer("sample.docx");
MemoryPageStreamFactory pageStreamFactory = new MemoryPageStreamFactory(pages);
ViewOptions viewOptions = HtmlViewOptions.forEmbeddedResources(pageStreamFactory);
viewer.view(viewOptions);
class MemoryPageStreamFactory implements PageStreamFactory {
private final List<ByteArrayOutputStream> _pages;
public MemoryPageStreamFactory(List<ByteArrayOutputStream> pages) {
_pages = pages;
}
public ByteArrayOutputStream createPageStream(int pageNumber) {
ByteArrayOutputStream pageStream = new ByteArrayOutputStream();
_pages.add(pageStream);
return pageStream;
}
public void closePageStream(int pageNumber, OutputStream pageStream) {
//Do not release page stream as we'll need to keep the stream open
}
}
More resources
GitHub Examples
You may easily run the code above and see the feature in action in our GitHub examples:
- GroupDocs.Viewer for Java examples, plugins, and showcase
- Document Viewer for .NET App WebForms UI Modern Example
- Document Viewer for Java App Dropwizard UI Modern Example
- Document Viewer for Java Spring UI Example
- GroupDocs.Viewer for .NET samples, plugins and showcase
- Document Viewer for .NET MVC UI Example
Free Online App
Along with full-featured Java library we provide simple but powerful free Apps. You are welcome to view Word, PDF, Excel, PowerPoint documents with free to use online GroupDocs Viewer App.