123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212 |
- /* ====================================================================
- 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.hwmf.record;
-
- import java.io.IOException;
-
- import org.apache.poi.hwmf.draw.HwmfGraphics;
- import org.apache.poi.util.HexDump;
- import org.apache.poi.util.IOUtils;
- import org.apache.poi.util.LittleEndianConsts;
- import org.apache.poi.util.LittleEndianInputStream;
-
- /**
- * The MetafileEscapes specifies printer driver functionality that
- * might not be directly accessible through WMF records
- */
- public class HwmfEscape implements HwmfRecord {
-
- public enum EscapeFunction {
- /** Notifies the printer driver that the application has finished writing to a page. */
- NEWFRAME(0x0001),
- /** Stops processing the current document. */
- ABORTDOC(0x0002),
- /** Notifies the printer driver that the application has finished writing to a band. */
- NEXTBAND(0x0003),
- /** Sets color table values. */
- SETCOLORTABLE(0x0004),
- /** Gets color table values. */
- GETCOLORTABLE(0x0005),
- /** Causes all pending output to be flushed to the output device. */
- FLUSHOUT(0x0006),
- /** Indicates that the printer driver SHOULD print text only, and no graphics. */
- DRAFTMODE(0x0007),
- /** Queries a printer driver to determine whether a specific escape function is supported on the output device it drives. */
- QUERYESCSUPPORT(0x0008),
- /** Sets the application-defined function that allows a print job to be canceled during printing. */
- SETABORTPROC(0x0009),
- /** Notifies the printer driver that a new print job is starting. */
- STARTDOC(0x000A),
- /** Notifies the printer driver that the current print job is ending. */
- ENDDOC(0x000B),
- /** Retrieves the physical page size currently selected on an output device. */
- GETPHYSPAGESIZE(0x000C),
- /** Retrieves the offset from the upper-left corner of the physical page where the actual printing or drawing begins. */
- GETPRINTINGOFFSET(0x000D),
- /** Retrieves the scaling factors for the x-axis and the y-axis of a printer. */
- GETSCALINGFACTOR(0x000E),
- /** Used to embed an enhanced metafile format (EMF) metafile within a WMF metafile. */
- META_ESCAPE_ENHANCED_METAFILE(0x000F),
- /** Sets the width of a pen in pixels. */
- SETPENWIDTH(0x0010),
- /** Sets the number of copies. */
- SETCOPYCOUNT(0x0011),
- /** Sets the source, such as a particular paper tray or bin on a printer, for output forms. */
- SETPAPERSOURCE(0x0012),
- /** This record passes through arbitrary data. */
- PASSTHROUGH(0x0013),
- /** Gets information concerning graphics technology that is supported on a device. */
- GETTECHNOLOGY(0x0014),
- /** Specifies the line-drawing mode to use in output to a device. */
- SETLINECAP(0x0015),
- /** Specifies the line-joining mode to use in output to a device. */
- SETLINEJOIN(0x0016),
- /** Sets the limit for the length of miter joins to use in output to a device. */
- SETMITERLIMIT(0x0017),
- /** Retrieves or specifies settings concerning banding on a device, such as the number of bands. */
- BANDINFO(0x0018),
- /** Draws a rectangle with a defined pattern. */
- DRAWPATTERNRECT(0x0019),
- /** Retrieves the physical pen size currently defined on a device. */
- GETVECTORPENSIZE(0x001A),
- /** Retrieves the physical brush size currently defined on a device. */
- GETVECTORBRUSHSIZE(0x001B),
- /** Enables or disables double-sided (duplex) printing on a device. */
- ENABLEDUPLEX(0x001C),
- /** Retrieves or specifies the source of output forms on a device. */
- GETSETPAPERBINS(0x001D),
- /** Retrieves or specifies the paper orientation on a device. */
- GETSETPRINTORIENT(0x001E),
- /** Retrieves information concerning the sources of different forms on an output device. */
- ENUMPAPERBINS(0x001F),
- /** Specifies the scaling of device-independent bitmaps (DIBs). */
- SETDIBSCALING(0x0020),
- /** Indicates the start and end of an encapsulated PostScript (EPS) section. */
- EPSPRINTING(0x0021),
- /** Queries a printer driver for paper dimensions and other forms data. */
- ENUMPAPERMETRICS(0x0022),
- /** Retrieves or specifies paper dimensions and other forms data on an output device. */
- GETSETPAPERMETRICS(0x0023),
- /** Sends arbitrary PostScript data to an output device. */
- POSTSCRIPT_DATA(0x0025),
- /** Notifies an output device to ignore PostScript data. */
- POSTSCRIPT_IGNORE(0x0026),
- /** Gets the device units currently configured on an output device. */
- GETDEVICEUNITS(0x002A),
- /** Gets extended text metrics currently configured on an output device. */
- GETEXTENDEDTEXTMETRICS(0x0100),
- /** Gets the font kern table currently defined on an output device. */
- GETPAIRKERNTABLE(0x0102),
- /** Draws text using the currently selected font, background color, and text color. */
- EXTTEXTOUT(0x0200),
- /** Gets the font face name currently configured on a device. */
- GETFACENAME(0x0201),
- /** Sets the font face name on a device. */
- DOWNLOADFACE(0x0202),
- /** Queries a printer driver about the support for metafiles on an output device. */
- METAFILE_DRIVER(0x0801),
- /** Queries the printer driver about its support for DIBs on an output device. */
- QUERYDIBSUPPORT(0x0C01),
- /** Opens a path. */
- BEGIN_PATH(0x1000),
- /** Defines a clip region that is bounded by a path. The input MUST be a 16-bit quantity that defines the action to take. */
- CLIP_TO_PATH(0x1001),
- /** Ends a path. */
- END_PATH(0x1002),
- /** The same as STARTDOC specified with a NULL document and output filename, data in raw mode, and a type of zero. */
- OPEN_CHANNEL(0x100E),
- /** Instructs the printer driver to download sets of PostScript procedures. */
- DOWNLOADHEADER(0x100F),
- /** The same as ENDDOC. See OPEN_CHANNEL. */
- CLOSE_CHANNEL(0x1010),
- /** Sends arbitrary data directly to a printer driver, which is expected to process this data only when in PostScript mode. */
- POSTSCRIPT_PASSTHROUGH(0x1013),
- /** Sends arbitrary data directly to the printer driver. */
- ENCAPSULATED_POSTSCRIPT(0x1014),
- /** Sets the printer driver to either PostScript or GDI mode. */
- POSTSCRIPT_IDENTIFY(0x1015),
- /** Inserts a block of raw data into a PostScript stream. The input MUST be
- a 32-bit quantity specifying the number of bytes to inject, a 16-bit quantity specifying the
- injection point, and a 16-bit quantity specifying the page number, followed by the bytes to
- inject. */
- POSTSCRIPT_INJECTION(0x1016),
- /** Checks whether the printer supports a JPEG image. */
- CHECKJPEGFORMAT(0x1017),
- /** Checks whether the printer supports a PNG image */
- CHECKPNGFORMAT(0x1018),
- /** Gets information on a specified feature setting for a PostScript printer driver. */
- GET_PS_FEATURESETTING(0x1019),
- /** Enables applications to write documents to a file or to a printer in XML Paper Specification (XPS) format. */
- MXDC_ESCAPE(0x101A),
- /** Enables applications to include private procedures and other arbitrary data in documents. */
- SPCLPASSTHROUGH2(0x11D8);
-
- int flag;
- EscapeFunction(int flag) {
- this.flag = flag;
- }
-
- static EscapeFunction valueOf(int flag) {
- for (EscapeFunction hs : values()) {
- if (hs.flag == flag) return hs;
- }
- return null;
- }
- }
-
- /**
- * A 16-bit unsigned integer that defines the escape function. The
- * value MUST be from the MetafileEscapes enumeration.
- */
- private EscapeFunction escapeFunction;
- /**
- * A 16-bit unsigned integer that specifies the size, in bytes, of the
- * EscapeData field.
- */
- private int byteCount;
- /**
- * An array of bytes of size ByteCount.
- */
- private byte escapeData[];
-
- @Override
- public HwmfRecordType getWmfRecordType() {
- return HwmfRecordType.escape;
- }
-
- @Override
- public int init(LittleEndianInputStream leis, long recordSize, int recordFunction) throws IOException {
- escapeFunction = EscapeFunction.valueOf(leis.readUShort());
- byteCount = leis.readUShort();
- escapeData = IOUtils.toByteArray(leis,byteCount);
-
- return 2*LittleEndianConsts.SHORT_SIZE+byteCount;
- }
-
- @Override
- public void draw(HwmfGraphics ctx) {
-
- }
-
- public String toString() {
- StringBuilder sb = new StringBuilder();
- sb.append("escape - function: "+escapeFunction+"\n");
- sb.append(HexDump.dump(escapeData, 0, 0));
- return sb.toString();
- }
- }
|