📄 metado.java
字号:
/*
* $Id: MetaDo.java,v 1.4 2001/12/10 13:53:22 blowagie Exp $
* $Name: $
*
* Copyright 2001 by Paulo Soares.
*
* This library is free software; you can redistribute it and/or modify it
* under the terms of the GNU Library General Public License as published
* by the Free Software Foundation; either version 2 of the License, or any
* later version.
*
* This library is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU Library general Public License for more
* details.
*
* You should have received a copy of the GNU Library General Public License along
* with this library; if not, write to the Free Foundation, Inc., 59 Temple Place,
* Suite 330, Boston, MA 02111-1307 USA.
*
* If you didn't download this code from the following link, you should check if
* you aren't using an obsolete version:
* http://www.lowagie.com/iText/
*
* ir-arch Bruno Lowagie,
* Adolf Baeyensstraat 121
* 9040 Sint-Amandsberg
* BELGIUM
* tel. +32 (0)9 228.10.97
* bruno@lowagie.com
*
*/
package com.lowagie.text.pdf.wmf;
import java.io.*;
import com.lowagie.text.pdf.*;
import com.lowagie.text.*;
import java.awt.Point;
import java.awt.Color;
public class MetaDo {
public static final int META_SETBKCOLOR = 0x0201;
public static final int META_SETBKMODE = 0x0102;
public static final int META_SETMAPMODE = 0x0103;
public static final int META_SETROP2 = 0x0104;
public static final int META_SETRELABS = 0x0105;
public static final int META_SETPOLYFILLMODE = 0x0106;
public static final int META_SETSTRETCHBLTMODE = 0x0107;
public static final int META_SETTEXTCHAREXTRA = 0x0108;
public static final int META_SETTEXTCOLOR = 0x0209;
public static final int META_SETTEXTJUSTIFICATION = 0x020A;
public static final int META_SETWINDOWORG = 0x020B;
public static final int META_SETWINDOWEXT = 0x020C;
public static final int META_SETVIEWPORTORG = 0x020D;
public static final int META_SETVIEWPORTEXT = 0x020E;
public static final int META_OFFSETWINDOWORG = 0x020F;
public static final int META_SCALEWINDOWEXT = 0x0410;
public static final int META_OFFSETVIEWPORTORG = 0x0211;
public static final int META_SCALEVIEWPORTEXT = 0x0412;
public static final int META_LINETO = 0x0213;
public static final int META_MOVETO = 0x0214;
public static final int META_EXCLUDECLIPRECT = 0x0415;
public static final int META_INTERSECTCLIPRECT = 0x0416;
public static final int META_ARC = 0x0817;
public static final int META_ELLIPSE = 0x0418;
public static final int META_FLOODFILL = 0x0419;
public static final int META_PIE = 0x081A;
public static final int META_RECTANGLE = 0x041B;
public static final int META_ROUNDRECT = 0x061C;
public static final int META_PATBLT = 0x061D;
public static final int META_SAVEDC = 0x001E;
public static final int META_SETPIXEL = 0x041F;
public static final int META_OFFSETCLIPRGN = 0x0220;
public static final int META_TEXTOUT = 0x0521;
public static final int META_BITBLT = 0x0922;
public static final int META_STRETCHBLT = 0x0B23;
public static final int META_POLYGON = 0x0324;
public static final int META_POLYLINE = 0x0325;
public static final int META_ESCAPE = 0x0626;
public static final int META_RESTOREDC = 0x0127;
public static final int META_FILLREGION = 0x0228;
public static final int META_FRAMEREGION = 0x0429;
public static final int META_INVERTREGION = 0x012A;
public static final int META_PAINTREGION = 0x012B;
public static final int META_SELECTCLIPREGION = 0x012C;
public static final int META_SELECTOBJECT = 0x012D;
public static final int META_SETTEXTALIGN = 0x012E;
public static final int META_CHORD = 0x0830;
public static final int META_SETMAPPERFLAGS = 0x0231;
public static final int META_EXTTEXTOUT = 0x0a32;
public static final int META_SETDIBTODEV = 0x0d33;
public static final int META_SELECTPALETTE = 0x0234;
public static final int META_REALIZEPALETTE = 0x0035;
public static final int META_ANIMATEPALETTE = 0x0436;
public static final int META_SETPALENTRIES = 0x0037;
public static final int META_POLYPOLYGON = 0x0538;
public static final int META_RESIZEPALETTE = 0x0139;
public static final int META_DIBBITBLT = 0x0940;
public static final int META_DIBSTRETCHBLT = 0x0b41;
public static final int META_DIBCREATEPATTERNBRUSH = 0x0142;
public static final int META_STRETCHDIB = 0x0f43;
public static final int META_EXTFLOODFILL = 0x0548;
public static final int META_DELETEOBJECT = 0x01f0;
public static final int META_CREATEPALETTE = 0x00f7;
public static final int META_CREATEPATTERNBRUSH = 0x01F9;
public static final int META_CREATEPENINDIRECT = 0x02FA;
public static final int META_CREATEFONTINDIRECT = 0x02FB;
public static final int META_CREATEBRUSHINDIRECT = 0x02FC;
public static final int META_CREATEREGION = 0x06FF;
public PdfContentByte cb;
public InputMeta in;
int left;
int top;
int right;
int bottom;
int inch;
MetaState state = new MetaState();
public MetaDo(InputStream in, PdfContentByte cb) {
this.cb = cb;
this.in = new InputMeta(in);
}
public void readAll() throws IOException, DocumentException{
if (in.readInt() != 0x9AC6CDD7) {
throw new DocumentException("Not a placeable windows metafile");
}
in.readWord();
left = in.readShort();
top = in.readShort();
right = in.readShort();
bottom = in.readShort();
inch = in.readWord();
state.setScalingX((float)(right - left) / (float)inch * 72f);
state.setScalingY((float)(bottom - top) / (float)inch * 72f);
in.readInt();
in.readWord();
in.skip(18);
int tsize;
int function;
cb.setLineCap(1);
cb.setLineJoin(1);
for (;;) {
int lenMarker = in.getLength();
tsize = in.readInt();
if (tsize < 3)
break;
function = in.readWord();
switch (function) {
case 0:
break;
case META_CREATEPALETTE:
case META_CREATEREGION:
case META_DIBCREATEPATTERNBRUSH:
state.addMetaObject(new MetaObject());
break;
case META_CREATEPENINDIRECT:
{
MetaPen pen = new MetaPen();
pen.init(in);
state.addMetaObject(pen);
break;
}
case META_CREATEBRUSHINDIRECT:
{
MetaBrush brush = new MetaBrush();
brush.init(in);
state.addMetaObject(brush);
break;
}
case META_CREATEFONTINDIRECT:
{
MetaFont font = new MetaFont();
font.init(in);
state.addMetaObject(font);
break;
}
case META_SELECTOBJECT:
{
int idx = in.readWord();
state.selectMetaObject(idx, cb);
break;
}
case META_DELETEOBJECT:
{
int idx = in.readWord();
state.deleteMetaObject(idx);
break;
}
case META_SAVEDC:
state.saveState(cb);
break;
case META_RESTOREDC:
{
int idx = in.readShort();
state.restoreState(idx, cb);
break;
}
case META_SETWINDOWORG:
state.setOffsetWy(in.readShort());
state.setOffsetWx(in.readShort());
break;
case META_SETWINDOWEXT:
state.setExtentWy(in.readShort());
state.setExtentWx(in.readShort());
break;
case META_MOVETO:
{
int y = in.readShort();
Point p = new Point(in.readShort(), y);
state.setCurrentPoint(p);
break;
}
case META_LINETO:
{
int y = in.readShort();
int x = in.readShort();
Point p = state.getCurrentPoint();
cb.moveTo(state.transformX(p.x), state.transformY(p.y));
cb.lineTo(state.transformX(x), state.transformY(y));
cb.stroke();
state.setCurrentPoint(new Point(x, y));
break;
}
case META_POLYLINE:
{
state.setLineJoinPolygon(cb);
int len = in.readWord();
int x = in.readShort();
int y = in.readShort();
cb.moveTo(state.transformX(x), state.transformY(y));
for (int k = 1; k < len; ++k) {
x = in.readShort();
y = in.readShort();
cb.lineTo(state.transformX(x), state.transformY(y));
}
cb.stroke();
break;
}
case META_POLYGON:
{
if (isNullStrokeFill(false))
break;
int len = in.readWord();
int sx = in.readShort();
int sy = in.readShort();
cb.moveTo(state.transformX(sx), state.transformY(sy));
for (int k = 1; k < len; ++k) {
int x = in.readShort();
int y = in.readShort();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -