📄 svgexport.java
字号:
Graphics2D g2=(Graphics2D)wImage.getGraphics(); //getting the graphics node that will be painted GraphicsNode gn=getGraphicsNode(); //computing the graphics transformation so that the image is scaled to the defined size Dimension canvasSize=getCanvasSize(); gn.setTransform(AffineTransform.getScaleInstance(width/canvasSize.width, height/canvasSize.height)); //painting the image g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); g2.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON); g2.setRenderingHint(RenderingHints.KEY_ALPHA_INTERPOLATION, RenderingHints.VALUE_ALPHA_INTERPOLATION_QUALITY); g2.setRenderingHint(RenderingHints.KEY_COLOR_RENDERING, RenderingHints.VALUE_COLOR_RENDER_QUALITY); g2.setRenderingHint(RenderingHints.KEY_DITHERING, RenderingHints.VALUE_DITHER_DISABLE); g2.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS, RenderingHints.VALUE_FRACTIONALMETRICS_ON); g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BICUBIC); g2.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY); g2.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL, RenderingHints.VALUE_STROKE_PURE); g2.setColor(Color.white); g2.fillRect(0, 0, (int)width, (int)height); gn.paint(g2); //creating the IIOImage IIOImage iioImage=new IIOImage(wImage, null, null); Iterator<ImageWriter> it=ImageIO.getImageWritersByMIMEType("image/tiff"); ImageWriter w=null; while(it.hasNext()) { w=it.next(); if(w instanceof TIFFImageWriter) { break; } } //getting the image writer final ImageWriter writer=w; //writing the image ImageOutputStream out=ImageIO.createImageOutputStream(new File(new URI(fpath))); writer.setOutput(out); //adding the listener to the writer writer.addIIOWriteProgressListener(new IIOWriteProgressListener() { public void imageComplete(ImageWriter wr) { writer.removeIIOWriteProgressListener(this); progressBar.setVisible(false); } public void writeAborted(ImageWriter wr) { writer.removeIIOWriteProgressListener(this); progressBar.setVisible(false); } public void imageProgress(ImageWriter wr, float value) { progressBar.setProgressBarValue(25+3*value/4, 0, 100); if(progressBar.cancelAction()) { writer.abort(); JOptionPane.showMessageDialog( getSVGEditor().getParent(), messageexporterror, labelerror, JOptionPane.WARNING_MESSAGE); } } public void imageStarted(ImageWriter wr, int arg1) {} public void thumbnailComplete(ImageWriter wr) {} public void thumbnailProgress(ImageWriter wr, float arg1) {} public void thumbnailStarted(ImageWriter wr, int arg1, int arg2) {} }); writer.write(null, iioImage, writer.getDefaultWriteParam()); //cleaning up out.flush(); writer.removeAllIIOWriteProgressListeners(); progressBar.setVisible(false); writer.dispose(); out.close(); }catch (Exception ex){ ex.printStackTrace(); progressBar.setVisible(false); SwingUtilities.invokeLater(new Runnable() { public void run() { JOptionPane.showMessageDialog( getSVGEditor().getParent(), messageexporterror, labelerror, JOptionPane.WARNING_MESSAGE); } }); try{ //removing the file that had to be written new File(new URI(fpath)).delete(); }catch (Exception ex2) {} } } }; } break; case PDF_FORMAT : //getting the compression quality res=pdfExportDialog.showExportDialog(frame); if(res==ExportDialog.OK_ACTION) { //initializing the progress bar and showing it progressBar.setIndeterminate(true, true); progressBar.setVisible(true); //getting all information final com.lowagie.text.Rectangle pageSize=pdfExportDialog.getPageSize(); final boolean isPortrait=pdfExportDialog.isPortrait(); final Insets margin=pdfExportDialog.getMargins(); final String title=pdfExportDialog.getTitle(), author=pdfExportDialog.getAuthor(), subject=pdfExportDialog.getSubject(), keywords=pdfExportDialog.getKeywords(), creator=pdfExportDialog.getCreator(); //creating the canvas that will be used to generate the pdf file new ExportCanvas(frame.getScrollPane().getSVGCanvas().getDocument(), progressBar) { /** * whether the pdf document is open or not */ protected boolean pdfDocOpen=false; @Override protected void doWhenRenderingDone() { //setting that the state of the progress bar is indeterminate progressBar.setIndeterminate(true, false); try{ //the output stream used to write the pdf file final BufferedOutputStream out=new BufferedOutputStream( new FileOutputStream(new File(new URI(fpath)))); com.lowagie.text.Rectangle rect=pageSize; //setting if the orientation of the pdf rect=isPortrait?rect:rect.rotate(); //creating the pdf document and the writer final com.lowagie.text.Document pdfDoc=new Document( rect, margin.left, margin.right, margin.top, margin.bottom) { public void open() { super.open(); pdfDocOpen=true; } public void close() { try{super.close();}catch (Exception ex) {} pdfDocOpen=false; } }; //adding meta data pdfDoc.addTitle(title); pdfDoc.addAuthor(author); pdfDoc.addSubject(subject); pdfDoc.addKeywords(keywords); pdfDoc.addCreator(creator); PdfWriter writer=PdfWriter.getInstance(pdfDoc, out); pdfDoc.open(); //getting the pdf graphics PdfContentByte cb=writer.getDirectContent(); final PdfTemplate tp=cb.createTemplate(rect.width(), rect.height()); tp.setWidth(rect.width()); tp.setHeight(rect.height()); Graphics2D g2=tp.createGraphics(rect.width(), rect.height(), new DefaultFontMapper()); g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); g2.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON); g2.setRenderingHint(RenderingHints.KEY_ALPHA_INTERPOLATION, RenderingHints.VALUE_ALPHA_INTERPOLATION_QUALITY); g2.setRenderingHint(RenderingHints.KEY_COLOR_RENDERING, RenderingHints.VALUE_COLOR_RENDER_QUALITY); g2.setRenderingHint(RenderingHints.KEY_DITHERING, RenderingHints.VALUE_DITHER_DISABLE); g2.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS, RenderingHints.VALUE_FRACTIONALMETRICS_ON); g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BICUBIC); g2.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY); g2.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL, RenderingHints.VALUE_STROKE_PURE); //the thread checking the pdf document state Thread thread=new Thread() { @Override public void run() { while(pdfDocOpen) { if(progressBar.cancelAction()) { pdfDocOpen=false; try { tp.reset(); pdfDoc.close(); }catch (Exception ex) {ex.printStackTrace();} try { out.close(); new File(new URI(fpath)).delete(); }catch (Exception ex) {ex.printStackTrace();} break; } try {sleep(500);}catch (Exception ex) {} } progressBar.setVisible(false); } }; thread.start(); //painting getGraphicsNode().paint(g2); g2.dispose(); cb.addTemplate(tp, 0, 0); //closing the document pdfDoc.close(); out.flush(); out.close(); progressBar.setVisible(false); }catch (Exception ex){ ex.printStackTrace(); progressBar.setVisible(false); SwingUtilities.invokeLater(new Runnable() { public void run() { JOptionPane.showMessageDialog( getSVGEditor().getParent(), messageexporterror, labelerror, JOptionPane.WARNING_MESSAGE);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -