singlepagedocumentviewport.java
来自「Java生成PDF Java生成PDF Java生成PDF」· Java 代码 · 共 405 行 · 第 1/2 页
JAVA
405 行
} } public void redraw(Object o) { if (o==getPage()) { pagepanel.setPage(getPage(), pagepanel.getView(), pagepanel.getDPI()); } else if (o instanceof PDFAnnotation) { pagepanel.redrawAnnotation((PDFAnnotation)o); } } /** * Subclass to handle all the events we're listning for */ private class Listener implements PagePanelListener, AdjustmentListener, MouseWheelListener, ComponentListener, KeyListener, MouseListener { public void componentHidden(ComponentEvent e) { } public void componentShown(ComponentEvent e) { } public void componentMoved(ComponentEvent e) { } public void mouseReleased(MouseEvent event) { } public void mouseClicked(MouseEvent event) { } public void mouseExited(MouseEvent event) { } public void mouseEntered(MouseEvent event) { } public void keyPressed(KeyEvent e) { } public void keyTyped(KeyEvent e) { } public void mousePressed(MouseEvent event) { requestFocusInWindow(); } public void keyReleased(KeyEvent e) { int code = e.getKeyCode(); if (code==e.VK_LEFT) { getDocumentPanel().runAction(PDFAction.named("PrevPage")); } else if (code==e.VK_RIGHT) { getDocumentPanel().runAction(PDFAction.named("NextPage")); } } public void componentResized(ComponentEvent e) { if (pagepanel.getPage()!=null) { updateScrollBarExtent(pagepanel.getView(), pagepanel.getDPI()); if (fullimage) { updateFullImagePosition(); } else { redrawPartialImage(pagepanel.getPage(), sbh.getValue(), sbv.getValue(), pagepanel.getDPI()); } } } public void mouseWheelMoved(MouseWheelEvent e) { if (e.getScrollType() == MouseWheelEvent.WHEEL_UNIT_SCROLL) { sbv.setValue(sbv.getValue() + e.getUnitsToScroll()); } } public void adjustmentValueChanged(AdjustmentEvent e) { // On scrollbar setValue if (fullimage) { updateFullImagePosition(); } else { redrawPartialImage(pagepanel.getPage(), sbh.getValue(), sbv.getValue(), pagepanel.getDPI()); } } public void pageUpdated(PagePanelEvent e) { if (e.getType()=="redrawn") { PagePanel pagepanel = e.getPagePanel(); Rectangle2D viewpos = pagepanel.getView(); Rectangle2D fullpos = PagePanel.getFullPageView(pagepanel.getPage()); fullimage = PagePanel.equalsRectangle2D(viewpos, fullpos); updateScrollBarExtent(viewpos, pagepanel.getDPI()); if (fullimage) { updateFullImagePosition(); } else { pagepanel.setLocation(0, 0); } } } } /** * Update the range of the scrollbars * @param position the current position being displayed * @param dpi the DPI of the image */ private void updateScrollBarExtent(Rectangle2D position, float dpi) { int viewwidth = (int)(viewport.getWidth()/dpi*72); int viewheight = (int)(viewport.getHeight()/dpi*72); Rectangle2D fullsize = PagePanel.getFullPageView(pagepanel.getPage()); sbh.setMaximum((int)fullsize.getWidth()); if (viewwidth+sbh.getValue() > sbh.getMaximum()) sbh.setValue(sbh.getMaximum()-viewwidth); sbh.setVisibleAmount(viewwidth); sbv.setMaximum((int)fullsize.getHeight()); if (viewheight+sbv.getValue() > sbv.getMaximum()) sbv.setValue(sbv.getMaximum()-viewheight); sbv.setVisibleAmount(viewheight); } /** * Update the position of the "pagepanel" relative to "viewport" if the full * image is being displayed. */ private void updateFullImagePosition() { float dpi = pagepanel.getDPI(); int viewwidth = viewport.getWidth(); int pagewidth = pagepanel.getWidth(); int viewheight = viewport.getHeight(); int pageheight = pagepanel.getHeight(); int x = viewwidth > pagewidth ? (viewwidth-pagewidth)/2 : (int)(sbh.getValue()*dpi/-72f); int y = viewheight > pageheight ? (viewheight-pageheight)/2 : (int)(sbv.getValue()*dpi/-72f); pagepanel.setLocation(x, y); viewport.repaint(); } /** * Redraw the partial section of image being displayed. * @param page the page being drawn * @param x the X co-ordinate of the left edge, from the getFullPageView box * @param y the Y co-ordinate of the top edge, from the getFullPageView box (0 is top) * @param dpi the DPI of the image */ private void redrawPartialImage(PDFPage page, float x, float y, float dpi) { float width = (viewport.getWidth()==0 ? 300 : viewport.getWidth()) * 72/dpi; float height = (viewport.getHeight()==0 ? 300 : viewport.getHeight()) * 72/dpi; Rectangle2D rect = PagePanel.getFullPageView(page); if (x+width > rect.getWidth()) x = (float)rect.getWidth()-x; if (y+height > rect.getHeight()) y = (float)rect.getHeight()-y; x += rect.getMinX(); y = (float)(rect.getMinY() + rect.getHeight() - y - height); Rectangle2D oldview = pagepanel.getView(); Rectangle2D newview = new Rectangle2D.Float(x, y, width, height); if (page!=pagepanel.getPage() || !PagePanel.equalsRectangle2D(oldview, newview) || Math.abs(dpi - pagepanel.getDPI())>=0.5) { pagepanel.setPage(page, new Rectangle2D.Float(x, y, width, height), dpi); } } /* public static void main(final String args[]) throws Exception { final PDF pdf = new PDF(new PDFReader(new File(args[0]))); final SinglePageDocumentViewport panel = new SinglePageDocumentViewport(); SwingUtilities.invokeLater(new Runnable() { public void run() { JFrame frame = new JFrame("BFO"); frame.getContentPane().add("Center", panel); frame.pack(); frame.setSize(300, 300); frame.setVisible(true); panel.pagepanel.setParser(new PDFParser(pdf)); } }); } */ private FocusTraversalPolicy createFocusTraversalPolicy() { return new FocusTraversalPolicy() { private PDFAnnotation getAnnot(Component comp) { if (comp instanceof JComponent) { return (PDFAnnotation)((JComponent)comp).getClientProperty("pdf.annotation"); } else { return null; } } public Component getComponentAfter(Container root, Component comp) { PDFAnnotation annot = getAnnot(comp); List annots = getPage().getAnnotations(); Map annotcomponents = pagepanel.getAnnotationComponents(); for (int i=0;i<annots.size()-1;i++) { if (annots.get(i)==annot) { return (Component)annotcomponents.get(annots.get(i+1)); } } return null; } public Component getComponentBefore(Container root, Component comp) { PDFAnnotation annot = getAnnot(comp); List annots = getPage().getAnnotations(); Map annotcomponents = pagepanel.getAnnotationComponents(); for (int i=1;i<annots.size();i++) { if (annots.get(i)==annot) { return (Component)annotcomponents.get(annots.get(i-1)); } } return null; } public Component getDefaultComponent(Container root) { return getFirstComponent(root); } public Component getFirstComponent(Container root) { List l = getPage().getAnnotations(); if (l.size()==0) { return null; } else { Map annotcomponents = pagepanel.getAnnotationComponents(); return (Component)annotcomponents.get(l.get(0)); } } public Component getLastComponent(Container root) { List l = getPage().getAnnotations(); if (l.size()==0) { return null; } else { Map annotcomponents = pagepanel.getAnnotationComponents(); return (Component)annotcomponents.get(l.get(l.size()-1)); } } }; }}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?