📄 pdpage.java
字号:
{
page.removeItem( COSName.BLEED_BOX );
}
else
{
page.setItem( COSName.BLEED_BOX, bleedBox.getCOSArray() );
}
}
/**
* A rectangle, expressed in default user space units, defining
* the intended dimensions of the finished page after trimming.
* The default is the CropBox.
*
* @return The TrimBox attribute.
*/
public PDRectangle getTrimBox()
{
PDRectangle retval = null;
COSArray array = (COSArray)page.getDictionaryObject( COSName.TRIM_BOX );
if( array != null )
{
retval = new PDRectangle( array );
}
else
{
retval = findCropBox();
}
return retval;
}
/**
* This will set the TrimBox for this page.
*
* @param trimBox The new TrimBox for this page.
*/
public void setTrimBox( PDRectangle trimBox )
{
if( trimBox == null )
{
page.removeItem( COSName.TRIM_BOX );
}
else
{
page.setItem( COSName.TRIM_BOX, trimBox.getCOSArray() );
}
}
/**
* A rectangle, expressed in default user space units, defining
* the extent of the page's meaningful content (including potential
* white space) as intended by the page's creator The default isthe CropBox.
*
* @return The ArtBox attribute.
*/
public PDRectangle getArtBox()
{
PDRectangle retval = null;
COSArray array = (COSArray)page.getDictionaryObject( COSName.ART_BOX );
if( array != null )
{
retval = new PDRectangle( array );
}
else
{
retval = findCropBox();
}
return retval;
}
/**
* This will set the ArtBox for this page.
*
* @param artBox The new ArtBox for this page.
*/
public void setArtBox( PDRectangle artBox )
{
if( artBox == null )
{
page.removeItem( COSName.ART_BOX );
}
else
{
page.setItem( COSName.ART_BOX, artBox.getCOSArray() );
}
}
//todo BoxColorInfo
//todo Contents
/**
* A value representing the rotation. This will be null if not set at this level
* The number of degrees by which the page should
* be rotated clockwise when displayed or printed. The value must be a multiple
* of 90.
*
* This will get the rotation at this page and not look up the hierarchy.
* This attribute is inheritable, and findRotation() should probably used.
* This will return null if no rotation is available at this level.
*
* @return The rotation at this level in the hierarchy.
*/
public Integer getRotation()
{
Integer retval = null;
COSNumber value = (COSNumber)page.getDictionaryObject( COSName.ROTATE );
if( value != null )
{
retval = new Integer( value.intValue() );
}
return retval;
}
/**
* This will find the rotation for this page by looking up the hierarchy until
* it finds them.
*
* @return The rotation at this level in the hierarchy.
*/
public int findRotation()
{
int retval = 0;
Integer rotation = getRotation();
if( rotation != null )
{
retval = rotation.intValue();
}
else
{
PDPageNode parent = getParent();
if( parent != null )
{
retval = parent.findRotation();
}
}
return retval;
}
/**
* This will set the rotation for this page.
*
* @param rotation The new rotation for this page.
*/
public void setRotation( int rotation )
{
page.setItem( COSName.ROTATE, new COSInteger( rotation ) );
}
/**
* This will get the contents of the PDF Page, in the case that the contents
* of the page is an array then then the entire array of streams will be
* be wrapped and appear as a single stream.
*
* @return The page content stream.
*
* @throws IOException If there is an error obtaining the stream.
*/
public PDStream getContents() throws IOException
{
return PDStream.createFromCOS( page.getDictionaryObject( COSName.CONTENTS ) );
}
/**
* This will set the contents of this page.
*
* @param contents The new contents of the page.
*/
public void setContents( PDStream contents )
{
page.setItem( COSName.CONTENTS, contents );
}
/**
* This will get a list of PDThreadBead objects, which are article threads in the
* document. This will return an empty list of there are no thread beads.
*
* @return A list of article threads on this page.
*/
public List getThreadBeads()
{
COSArray beads = (COSArray)page.getDictionaryObject( COSName.B );
if( beads == null )
{
beads = new COSArray();
}
List pdObjects = new ArrayList();
for( int i=0; i<beads.size(); i++)
{
COSDictionary beadDic = (COSDictionary)beads.getObject( i );
PDThreadBead bead = null;
//in some cases the bead is null
if( beadDic != null )
{
bead = new PDThreadBead( beadDic );
}
pdObjects.add( bead );
}
return new COSArrayList(pdObjects, beads);
}
/**
* This will set the list of thread beads.
*
* @param beads A list of PDThreadBead objects or null.
*/
public void setThreadBeads( List beads )
{
page.setItem( COSName.B, COSArrayList.converterToCOSArray( beads ) );
}
/**
* Get the metadata that is part of the document catalog. This will
* return null if there is no meta data for this object.
*
* @return The metadata for this object.
*/
public PDMetadata getMetadata()
{
PDMetadata retval = null;
COSStream stream = (COSStream)page.getDictionaryObject( COSName.METADATA );
if( stream != null )
{
retval = new PDMetadata( stream );
}
return retval;
}
/**
* Set the metadata for this object. This can be null.
*
* @param meta The meta data for this object.
*/
public void setMetadata( PDMetadata meta )
{
page.setItem( COSName.METADATA, meta );
}
/**
* Convert this page to an output image.
*
* @return A graphical representation of this page.
*
* @throws IOException If there is an error drawing to the image.
*/
public BufferedImage convertToImage() throws IOException
{
int scaling = 2;
int rotation = findRotation();
PDRectangle mBox = findMediaBox();
int width = (int)(mBox.getWidth());//*2);
int height = (int)(mBox.getHeight());//*2);
if( rotation == 90 || rotation == 270 )
{
int tmp = width;
width = height;
height = tmp;
}
Dimension pageDimension = new Dimension( width, height );
//note we are doing twice as many pixels because
//the default size is not really good resolution,
//so create an image that is twice the size
//and let the client scale it down.
BufferedImage retval =
new BufferedImage( width*scaling, height*scaling, BufferedImage.TYPE_BYTE_INDEXED );
Graphics2D graphics = (Graphics2D)retval.getGraphics();
graphics.setColor( Color.WHITE );
graphics.fillRect(0,0,width*scaling, height*scaling);
graphics.scale( scaling, scaling );
PageDrawer drawer = new PageDrawer();
drawer.drawPage( graphics, this, pageDimension );
return retval;
}
/**
* Get the page actions.
*
* @return The Actions for this Page
*/
public PDPageAdditionalActions getActions()
{
COSDictionary addAct = (COSDictionary) page.getDictionaryObject(COSName.AA);
if (addAct == null)
{
addAct = new COSDictionary();
page.setItem(COSName.AA, addAct);
}
return new PDPageAdditionalActions(addAct);
}
/**
* Set the page actions.
*
* @param actions The actions for the page.
*/
public void setActions( PDPageAdditionalActions actions )
{
page.setItem( COSName.AA, actions );
}
/**
* This will return a list of the Annotations for this page.
*
* @return List of the PDAnnotation objects.
*
* @throws IOException If there is an error while creating the annotations.
*/
public List getAnnotations() throws IOException
{
COSArrayList retval = null;
COSArray annots = (COSArray)page.getDictionaryObject(COSName.ANNOTS);
if (annots == null)
{
annots = new COSArray();
page.setItem(COSName.ANNOTS, annots);
retval = new COSArrayList(new ArrayList(), annots);
}
else
{
List actuals = new ArrayList();
for (int i=0; i < annots.size(); i++)
{
COSBase item = annots.getObject(i);
actuals.add( PDAnnotation.createAnnotation( item ) );
}
retval = new COSArrayList(actuals, annots);
}
return retval;
}
/**
* This will set the list of annotations.
*
* @param annots The new list of annotations.
*/
public void setAnnotations( List annots )
{
page.setItem( COSName.ANNOTS, COSArrayList.converterToCOSArray( annots ) );
}
/**
* {@inheritDoc}
*/
public int print(Graphics graphics, PageFormat pageFormat, int pageIndex)
throws PrinterException
{
int retval = Printable.PAGE_EXISTS;
try
{
PageDrawer drawer = new PageDrawer();
PDRectangle pageSize = findMediaBox();
drawer.drawPage( graphics, this, pageSize.createDimension() );
}
catch( IOException io )
{
throw new PrinterIOException( io );
}
return retval;
}
/**
* {@inheritDoc}
*/
public boolean equals( Object other )
{
return other instanceof PDPage && ((PDPage)other).getCOSObject() == this.getCOSObject();
}
/**
* {@inheritDoc}
*/
public int hashCode()
{
return this.getCOSDictionary().hashCode();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -