java स्क्रॉल करने योग्य फलक में उपयोग के लिए शुद्ध जावा HTML व्यूअर/रेंडरर




html-rendering (6)

आप देशी ब्राउजर को कुछ इस तरह से एक्सेस कर सकते हैं: djproject

कुछ वेब पृष्ठों के लिए, कभी-कभी जाने का एकमात्र तरीका होता है। हमेशा व्यापार बंद रहता है।

मुझे अभी तक एक ब्राउज़र घटक नहीं मिला है जो अच्छी तरह से प्रस्तुत करता है, ओपन सोर्स है, और एक ही समय में पर्याप्त लचीला है। कोबरा करीब आता है लेकिन ऐसे पृष्ठ हैं जो इसे प्रस्तुत नहीं करेंगे और यह कठिन है (असंभव?) चीजों को करने के लिए जैसे कि अपने स्क्रॉल बार, आदि से छुटकारा पाएं ..

शुद्ध जावा एचटीएमएल दर्शक और प्रस्तुतकर्ता क्या उपलब्ध हैं? आवश्यकताएं हैं:

  • इसे Scrollable फलक में रखने के लिए JComponent इंटरफ़ेस को कार्यान्वित करना चाहिए।
  • यह अधिमानतः एक मुफ्त समाधान होना चाहिए; ओपन सोर्स एक प्लस है।
  • मेवेन आर्टिफैक्ट के रूप में इसकी उपलब्धता एक प्लस है।

मैं केवल कुछ घटकों और परियोजनाओं के बारे में जानता हूं, जिनमें से कुछ अब निष्क्रिय हैं:


वाह हैफरब्लूज़, मैंने कभी नहीं सोचा था कि मुझे जावाएफएक्स के बारे में कुछ पसंद आएगा। लेकिन ब्राउज़र कार्यान्वयन वास्तव में अच्छा है। उन लोगों के लिए (मेरे जैसे) जिन्होंने कभी भी पूरी कक्षा (हैफरब्लूज़ के स्निपेट के लिए) से पहले जावाएफएक्स का उपयोग नहीं किया है:

import com.sun.javafx.application.PlatformImpl;

import javafx.embed.swing.JFXPanel;
import javafx.scene.Scene;
import javafx.scene.layout.AnchorPane;
import javafx.scene.web.WebEngine;
import javafx.scene.web.WebView;

public class SwingBrowser extends JFXPanel {
    private static final long serialVersionUID = 1L;

    public SwingBrowser(String url) {
        PlatformImpl.startup(new Runnable() {
            @Override
            public void run() {
                final AnchorPane anchorPane = new AnchorPane();
                WebView webBrowser = new WebView();

                // Set Layout Constraint
                AnchorPane.setTopAnchor(webBrowser, 0.0);
                AnchorPane.setBottomAnchor(webBrowser, 0.0);
                AnchorPane.setLeftAnchor(webBrowser, 0.0);
                AnchorPane.setRightAnchor(webBrowser, 0.0);

                // Add WebView to AnchorPane
                anchorPane.getChildren().add(webBrowser);

                // Create Scene
                final Scene scene = new Scene(anchorPane);

                // Obtain the webEngine to navigate
                final WebEngine webEngine = webBrowser.getEngine();
                webEngine.load(url);

                setScene(scene);
            }
        });
    }
}

यदि आप स्विंग का उपयोग कर रहे हैं, तो आप जावाएफएक्स वेबव्यू एम्बेड कर सकते हैं।

1) स्क्रॉल करने योग्य फलक में रखने के लिए जेकंपोनेंट इंटरफेस को लागू करना चाहिए।

स्विंग में वेबव्यू जोड़ने के लिए आपको इसे JFXPanel में जोड़ना होगा, जो एक JComponent है। WebView को पूर्ण JFXPanel भरने के लिए, मैंने एंकरपैन का उपयोग इस तरह किया:

                final AnchorPane anchorPane = new AnchorPane();
                WebView webBrowser = new WebView();

                //Set Layout Constraint
                AnchorPane.setTopAnchor(webBrowser, 0.0);
                AnchorPane.setBottomAnchor(webBrowser, 0.0);
                AnchorPane.setLeftAnchor(webBrowser, 0.0);
                AnchorPane.setRightAnchor(webBrowser, 0.0);

                //Add WebView to AnchorPane
                anchorPane.getChildren().add(webBrowser);

                //Create Scene
                final Scene scene = new Scene(anchorPane);

                // Obtain the webEngine to navigate
                final WebEngine webEngine = webBrowser.getEngine();
                webEngine.load("http://www.google.com");
                _jfxPanel.setScene(scene);

जब भी आप जावाएफएक्स कोड चलाते हैं, तो इसे Platform.runLater () में चलाने के लिए सुनिश्चित करें।

2) अधिमानतः एक मुफ्त समाधान होना चाहिए; opensource एक प्लस है।

खैर, यह शुद्ध ओरेकल जावा है।

3) मेवेन आर्टिफैक्ट के रूप में उपलब्धता एक प्लस है।

JavaFX और Maven को एकीकृत करने के लिए सलाह के लिए JavaFX (जार फ़ाइल में 'lib` के साथ) के साथ उत्तर मेवेन प्रोजेक्ट देखें।

JavaFX पर Java8 से जावा में पूरी तरह से एकीकृत किया जाएगा।

Additonal पेशेवर: - समर्थन एचटीएमएल 5 और जावास्क्रिप्ट (वेबकिट का उपयोग करता है) - समर्थन मंच इंटरऑपरेबिलिटी - डीओएम के साथ बातचीत करने का समर्थन करता है, जावास्क्रिप्ट चलाता है, वेबव्यू से घटनाओं की अधिसूचना प्राप्त करता है।

विपक्ष: -जावाएफएक्स को स्थापित करने की आवश्यकता है। लेकिन यह v7u6 (अगस्त 2012) के बाद जावा के साथ आता है।

अन्य अनुभव:

मैंने djproject की कोशिश की, लेकिन मंच इंटरऑपरेबिलिटी के साथ बहुत सी समस्याएं थीं। विंडोज़ पर काफी अच्छा काम किया, लेकिन केवल लिनक्स पर बड़े प्रयास के साथ और मैं इसे मैक पर काम नहीं कर सका। प्रत्येक प्लेटफ़ॉर्म के लिए आपको अपने जार का 32 बिट और 64 बिट संस्करण भी बनाना होगा। बहुत सारे प्रयास और एक विशाल जार फ़ाइल के साथ आप संभवतः एक जार में सबकुछ एक साथ विलय कर सकते हैं। लेकिन यह सुविधाजनक होने से बहुत दूर था।

ऊपर वर्णित जावाएफएक्स समाधान की तुलना में, डीजेप्रोजेक्ट एक बड़ा दर्द था।


जावा 8 के बाद से, आप जावाएफएक्स के वेब व्यू घटक का उपयोग कर सकते हैं, जिसका उपयोग स्विंग में भी किया जा सकता है

कोड उतना आसान है जितना:

JFXPanel jfxPanel = new JFXPanel(); // Scrollable JCompenent
Platform.runLater( () -> { // FX components need to be managed by JavaFX
   WebView webView = new WebView();
   webView.getEngine().loadContent( "<html> Hello World!" );
   webView.getEngine().load( "http://www..com/" );
   jfxPanel.setScene( new Scene( webView ) );
});

यह वेबकिट इंजन द्वारा समर्थित है (संस्करण जेआरई पर निर्भर करता है और उचित रूप से अद्यतित है)। लेकिन ध्यान रखें कि यह एक पूर्ण ब्राउज़र नहीं है, इसलिए, एचटीएमएल 5 ऑडियो / वीडियो के समर्थन पर भरोसा न करें। अन्यथा, यह आपके ब्राउज़र के रूप में एचटीएमएल + सीएसएस + जेएस के रूप में अच्छा चलाता है।

तकनीकी रूप से, अंतर्निहित इंजन सी ++ है, मूल जावा नहीं। लेकिन यह ओरेकल के आधिकारिक जेआरई में बंडल किया गया है, इसके लिए कोई पुस्तकालय की आवश्यकता नहीं है, शून्य कॉन्फ़िगरेशन है, जावा एफएक्स के रूप में क्रॉस-प्लेटफ़ॉर्म के रूप में है, और इसे सक्रिय रूप से अपडेट और रखरखाव किया जाता है।

अधिकांश उपयोग मामलों के लिए मूल जावा के रूप में अच्छा, मुझे लगता है?

नीचे दी गई जानकारी पुरानी है, यह देखते हुए कि अब हमारे पास जावा में वेबव्यू है।

Cobra/Lobo , CSSBox , और फ्लाइंग सॉसर , सभी शुद्ध जावा का प्रयास किया। अन्य या तो मूल या वाणिज्यिक हैं।

सामग्री: फ्लाई (स्ट्रिंग के रूप में) पर जेनरेट किया गया सरल HTML, एम्बेडेड सीएसएस 2.1, कोई जेएस नहीं।

लघु कहानी: फ्लाइंग सॉसर का उपयोग करने के लिए सबसे आसान है और प्रस्तुत करना सबसे सही है, लेकिन आपके पास सामग्री पर पूर्ण नियंत्रण है। अन्यथा एक मूल समाधान की तलाश करें।

लम्बी कहानी:

सीएसएसबॉक्स अधिक सक्रिय प्रतीत होता है, हालांकि ऐसा लगता है कि कुछ तृतीय पक्ष पुस्तकालयों पर निर्भर करता है। उदाहरण के लिए डेमो nekohtml पर निर्भर करता है जो अपाचे xerces का उपयोग करता है जिसने डिफ़ॉल्ट जावा 1.7 sax पार्सर काम किया है और मेरा प्रोग्राम तोड़ दिया है, लेकिन जब मैं इसे जावा में निर्मित जेरस का उपयोग करने के लिए मजबूर करता हूं तो मुझे क्लासकास्टएक्सप्शन ClassCastException (InlineBox to BlockBox) । अंत में काम करने के लिए यह नहीं मिल सकता है। इसके अलावा अभी भी दस्तावेज़ को मौजूदा BrowserCanvas में बदलने का कोई तरीका नहीं मिला है।

कोबरा अब बनाए रखा नहीं है, इसे 1.7 में काम करने के लिए मैन्युअल रूप से एक असंगतता समस्या को ठीक करना है। मोज़िला राइनो को पकड़ने की भी आवश्यकता है (किसी भी जेएस का उपयोग नहीं) लेकिन यह सब कुछ है। उसके बाद यह काफी चिकनी है, केवल पेंट संदेशों को छिपाने के लिए लॉगर से पूछने की आवश्यकता है। रेंडर सही है और गति उचित है - जब तक दस्तावेज़ सरल है। जब आप कम आम टैग या अधिक जटिल लेआउट का उपयोग शुरू करते हैं, तो कोबरा बहुत जल्दी गिर जाता है।

फ्लाइंग सॉसर के लेखन के रूप में तीनों का सर्वश्रेष्ठ सीएसएस समर्थन है (फरवरी 2011)। सेटअप बहुत आसान है (उदाहरण के लिए cobo या domparser जैसे cssbox जैसे दस्तावेज़ को सेट करने की कोई आवश्यकता नहीं है) में कुछ निर्भरता है - जिसका अर्थ जावास्क्रिप्ट भी नहीं है। लेकिन फ्लाइंग सॉसर आप जो भी खिलाते हैं उसके बारे में बहुत सख्त है। स्रोत एक अच्छी तरह से गठित एक्सएमएल होना चाहिए, उदाहरण के लिए शैली और स्क्रिप्ट को सीडीएटीए में लपेटा जाना पड़ सकता है और यदि आप एचटीएमएल इकाइयों का उपयोग करते हैं तो आपको डीटीडी घोषित करना होगा (इसलिए कोई html5 doctype)। हालांकि अगर आप उस सामग्री को एम्बेड कर रहे हैं जिसे आप नियंत्रित कर सकते हैं तो यह आपकी सबसे अच्छी पसंद हो सकती है।


सीएसएसबॉक्स शायद आप जो खोज रहे हैं: CSSBox


फ्लाइंग सॉसर नौकरी ठीक कर रहा था, लेकिन निम्नलिखित प्रस्तुत पाठ उदाहरण लिनक्स जावा पर मेरे मोबाइल ऐप विकास के लिए एक बड़ा बदलाव था:

Sometimes the period at the end changes line without the text beside .

साथ ही, पाठ JTextPanel के विपरीत चयन योग्य नहीं है।

पार्सर केवल यूटीएफ -8 एन्कोडिंग स्वीकार करता है। पार्सिंग करते समय मैं अपने एन्कोडिंग को मजबूर नहीं कर सका।







html-rendering