Domanda

Sto cercando una libreria Java open source per generare miniature per un determinato URL. Devo raggruppare questa funzionalità, piuttosto che chiamare servizi esterni, come Amazon o websnapr .

http://www.webrenderer.com/ è stato menzionato in questo post: Schermate web generate dal server , ma è una soluzione commerciale.

Spero in una soluzione basata su Java, ma potrebbe essere necessario esaminare l'esecuzione di un processo esterno come khtml2png o l'integrazione di qualcosa come html2ps .

Qualche suggerimento?

È stato utile?

Soluzione

La prima cosa che mi viene in mente è usare AWT per catturare uno screenshot (vedi codice sotto). Potresti guardare a catturare JEditorPane , il JDIC WebBrowser o il controllo SWT Browser (tramite Supporto per l'incorporamento AWT ). Gli ultimi due incorporano browser nativi (IE, Firefox), quindi introducono dipendenze; il supporto HTML JEditorPane si è fermato a HTML 3.2. Può darsi che nessuno di questi funzioni su un sistema senza testa.

import java.awt.Component;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.JLabel;

public class Capture {

    private static final int WIDTH = 128;
    private static final int HEIGHT = 128;

    private BufferedImage image = new BufferedImage(WIDTH, HEIGHT,
            BufferedImage.TYPE_INT_RGB);

    public void capture(Component component) {
        component.setSize(image.getWidth(), image.getHeight());

        Graphics2D g = image.createGraphics();
        try {
            component.paint(g);
        } finally {
            g.dispose();
        }
    }

    private BufferedImage getScaledImage(int width, int height) {
        BufferedImage buffer = new BufferedImage(width, height,
                BufferedImage.TYPE_INT_RGB);
        Graphics2D g = buffer.createGraphics();
        try {
            g.drawImage(image, 0, 0, width, height, null);
        } finally {
            g.dispose();
        }
        return buffer;
    }

    public void save(File png, int width, int height) throws IOException {
        ImageIO.write(getScaledImage(width, height), "png", png);
    }

    public static void main(String[] args) throws IOException {
        JLabel label = new JLabel();
        label.setText("Hello, World!");
        label.setOpaque(true);

        Capture cap = new Capture();
        cap.capture(label);
        cap.save(new File("foo.png"), 64, 64);
    }

}

Altri suggerimenti

Stai essenzialmente chiedendo un motore di rendering completo accessibile da Java. Personalmente, mi risparmierei la seccatura e chiamerei un processo figlio.

Altrimenti, mi sono imbattuto in questo puro browser Java: Lobo

non esisteva un QA / sito Web / servizio di test che ti permettesse di specificare una pagina web che avresti voluto renderizzare in un certo browser (IE, FIREFOX, SAFARI versione x, y, z) e spedirebbero il istantanea di nuovo a te. '

Non ricordo il servizio, forse altri sviluppatori che frequentano ajaxian potrebbero ricordarlo?

Prova a chiamare ImageMagick . So che non è una soluzione Java, ma puoi chiamarla da Java, e c'è anche un front-end Java , anche se ho avuto meno successo con questo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top