B4J Question ABMPage Save as image

jinyistudio

Well-Known Member
Licensed User
Longtime User
Hi

Could i Export ABMPage as a images file or pdf file and save in server side !?
 
Last edited:

DonManfred

Expert
Licensed User
Longtime User
You should prefix your Threadtitle with "[ABMaterial] "
 
Upvote 0

alwaysbusy

Expert
Licensed User
Longtime User
Html2Canvas.js is the only javascript library that can do 'something' like that. I tried it but it gives unreliable results so it will not be integrated in ABMaterial (e.g. it can not work crossdomein, so stuff like Google Maps, special fonts, images on other server are not generated)
 
Upvote 0

jinyistudio

Well-Known Member
Licensed User
Longtime User
Hi
My all data of the abmpage is in same server !
 
Upvote 0

jinyistudio

Well-Known Member
Licensed User
Longtime User
Hi

Do you have a sample code !? :p
 
Upvote 0

jinyistudio

Well-Known Member
Licensed User
Longtime User
Upvote 0

jinyistudio

Well-Known Member
Licensed User
Longtime User
Hi,I have try png and pdf. all is ok!

B4X:
var page = require('webpage').create(),
    system = require('system'),
    address, output, size, pageWidth, pageHeight;

if (system.args.length < 3 || system.args.length > 5) {
    console.log('Usage: rasterize.js URL filename [paperwidth*paperheight|paperformat] [zoom]');
    console.log('  paper (pdf output) examples: "5in*7.5in", "10cm*20cm", "A4", "Letter"');
    console.log('  image (png/jpg output) examples: "1920px" entire page, window width 1920px');
    console.log('                                   "800px*600px" window, clipped to 800x600');
    phantom.exit(1);
} else {
    address = system.args[1];
    output = system.args[2];
    page.viewportSize = { width: 600, height: 600 };
    if (system.args.length > 3 && system.args[2].substr(-4) === ".pdf") {
        size = system.args[3].split('*');
        page.paperSize = size.length === 2 ? { width: size[0], height: size[1], margin: '0px' }
                                           : { format: system.args[3], orientation: 'portrait', margin: '1cm' };
    } else if (system.args.length > 3 && system.args[3].substr(-2) === "px") {
        size = system.args[3].split('*');
        if (size.length === 2) {
            var pageWidth = parseInt(size[0], 10),
                pageHeight = parseInt(size[1], 10);
            page.viewportSize = { width: pageWidth, height: pageHeight };
            page.clipRect = { top: 0, left: 0, width: pageWidth, height: pageHeight };
        } else {
            console.log("size:", system.args[3]);
            var pageWidth = parseInt(system.args[3], 10),
                pageHeight = parseInt(pageWidth * 3/4, 10); // it's as good an assumption as any
            console.log ("pageHeight:",pageHeight);
            page.viewportSize = { width: pageWidth, height: pageHeight };
        }
    }
    if (system.args.length > 4) {
        page.zoomFactor = system.args[4];
    }
    page.open(address, function (status) {
        if (status !== 'success') {
            console.log('Unable to load the address!');
            phantom.exit(1);
        } else {
            window.setTimeout(function () {
                page.render(output);
                phantom.exit();
            }, 2000);
        }
    });
}
 
Upvote 0

jinyistudio

Well-Known Member
Licensed User
Longtime User
Hi, Call it in command line is OK, Why my jshell always give exitcode=1('Unable to load the address!') ?

B4X:
Sub PrintUrlPage (jsNa As String, UrlNa As String, imageNa As String, Size As String)
    Dim arg1 As String=$"${File.DirApp}/www/dnc-node/Script/${jsNa}"$
    Dim arg2 As String=UrlNa
    Dim arg3 As String=$"${File.DirApp}/www/dnc-node/Export/${imageNa}"$
    Dim arg4 As String=Size
    Dim shl As Shell  
    shl.Initialize("shl", $"${File.DirApp}/www/dnc-node/Script/phantomjs"$,Array As String(arg1,arg2,arg3,arg4))
    shl.WorkingDirectory=$"./www/dnc-node/Export"$
    shl.Run(8000) 'set a timeout of 10 seconds
End Sub
 
Last edited:
Upvote 0
Top