// -*- mode: c++; tab-width: 4; indent-tabs-mode: t; eval: (progn (c-set-style "stroustrup") (c-set-offset 'innamespace 0)); -*-
// vi:set ts=4 sts=4 sw=4 noet :
//
// Copyright 2010 wkhtmltopdf authors
//
// This file is part of wkhtmltopdf.
//
// wkhtmltopdf is free software: you can redistribute it and/or modify
// it under the terms of the GNU Lesser General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// wkhtmltopdf is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public License
// along with wkhtmltopdf. If not, see .
/**
* \page pagesettings Setting
* \section pageImageGlobal Image settings
* The \ref wkhtmltoimage_global_settings structure contains the following settings:
* - \b crop.left left/x coordinate of the window to capture in pixels. E.g. "200"
* - \b crop.top top/y coordinate of the window to capture in pixels. E.g. "200"
* - \b crop.width Width of the window to capture in pixels. E.g. "200"
* - \b crop.height Height of the window to capture in pixels. E.g. "200"
* - \b load.cookieJar Path of file used to load and store cookies.
* - \b load.* Page specific settings related to loading content, see \ref pageLoad.
* - \b web.* See \ref pageWeb.
* - \b transparent When outputting a PNG or SVG, make the white background transparent.
* Must be either "true" or "false"
* - \b in The URL or path of the input file, if "-" stdin is used. E.g. "http://google.com"
* - \b out The path of the output file, if "-" stdout is used, if empty the content is stored
* to a internalBuffer.
* - \b fmt The output format to use, must be either "", "jpg", "png", "bmp" or "svg".
* - \b screenWidth The with of the screen used to render is pixels, e.g "800".
* - \b smartWidth Should we expand the screenWidth if the content does not fit?
* must be either "true" or "false".
* - \b quality The compression factor to use when outputting a JPEG image. E.g. "94".
*/
#include "image_c_bindings_p.hh"
#include "pdf.h"
#include "dllbegin.inc"
using namespace wkhtmltopdf;
void MyImageConverter::warning(const QString & message) {
if (warning_cb) (warning_cb)(reinterpret_cast(this), message.toUtf8().constData());
}
void MyImageConverter::error(const QString & message) {
if (error_cb) (error_cb)(reinterpret_cast(this), message.toUtf8().constData());
}
void MyImageConverter::phaseChanged() {
if (phase_changed) (phase_changed)(reinterpret_cast(this));
}
void MyImageConverter::progressChanged(int progress) {
if (progress_changed) (progress_changed)(reinterpret_cast(this), progress);
}
void MyImageConverter::finished(bool ok) {
if (finished_cb) (finished_cb)(reinterpret_cast(this), ok);
}
MyImageConverter::MyImageConverter(settings::ImageGlobal * gs, const QString * data):
warning_cb(0), error_cb(0), phase_changed(0), progress_changed(0), finished_cb(0),
converter(*gs, data), globalSettings(gs) {
connect(&converter, SIGNAL(warning(const QString &)), this, SLOT(warning(const QString &)));
connect(&converter, SIGNAL(error(const QString &)), this, SLOT(error(const QString &)));
connect(&converter, SIGNAL(phaseChanged()), this, SLOT(phaseChanged()));
connect(&converter, SIGNAL(progressChanged(int)), this, SLOT(progressChanged(int)));
connect(&converter, SIGNAL(finished(bool)), this, SLOT(finished(bool)));
}
MyImageConverter::~MyImageConverter() {
delete globalSettings;
}
CAPI(int) wkhtmltoimage_extended_qt() {
return wkhtmltopdf_extended_qt();
}
CAPI(const char *) wkhtmltoimage_version() {
return "NOT IMPLEMENTED";
}
CAPI(int) wkhtmltoimage_init(int use_graphics) {
return wkhtmltopdf_init(use_graphics);
}
CAPI(int) wkhtmltoimage_deinit() {
return wkhtmltopdf_deinit();
}
CAPI(wkhtmltoimage_global_settings *) wkhtmltoimage_create_global_settings() {
return reinterpret_cast(new settings::ImageGlobal());
}
CAPI(int) wkhtmltoimage_set_global_setting(wkhtmltoimage_global_settings * settings, const char * name, const char * value) {
return reinterpret_cast(settings)->set(name, value);
}
CAPI(int) wkhtmltoimage_get_global_setting(wkhtmltoimage_global_settings * settings, const char * name, char * value, int vs) {
QString res = reinterpret_cast(settings)->get(name);
if (res.isNull()) return 0;
qstrncpy(value, res.toUtf8().constData(), vs);
return 1;
}
CAPI(wkhtmltoimage_converter *) wkhtmltoimage_create_converter(wkhtmltoimage_global_settings * settings, const char * data) {
QString str= QString::fromUtf8(data);
return reinterpret_cast(
new MyImageConverter(reinterpret_cast(settings), &str));
}
CAPI(void) wkhtmltoimage_destroy_converter(wkhtmltoimage_converter * converter) {
delete reinterpret_cast(converter);
}
CAPI(void) wkhtmltoimage_set_warning_callback(wkhtmltoimage_converter * converter, wkhtmltoimage_str_callback cb) {
reinterpret_cast(converter)->warning_cb = cb;
}
CAPI(void) wkhtmltoimage_set_error_callback(wkhtmltoimage_converter * converter, wkhtmltoimage_str_callback cb) {
reinterpret_cast(converter)->error_cb = cb;
}
CAPI(void) wkhtmltoimage_set_phase_changed_callback(wkhtmltoimage_converter * converter, wkhtmltoimage_void_callback cb) {
reinterpret_cast(converter)->phase_changed = cb;
}
CAPI(void) wkhtmltoimage_set_progress_changed_callback(wkhtmltoimage_converter * converter, wkhtmltoimage_int_callback cb) {
reinterpret_cast(converter)->progress_changed = cb;
}
CAPI(void) wkhtmltoimage_set_finished_callback(wkhtmltoimage_converter * converter, wkhtmltoimage_int_callback cb) {
reinterpret_cast(converter)->finished_cb = cb;
}
/*CAPI(void) wkhtmltoimage_begin_conversion(wkhtmltoimage_converter * converter) {
reinterpret_cast(converter)->converter.beginConversion();
}*/
CAPI(int) wkhtmltoimage_convert(wkhtmltoimage_converter * converter) {
return reinterpret_cast(converter)->converter.convert();
}
/*CAPI(void) wkhtmltoimage_cancel(wkhtmltoimage_converter * converter) {
reinterpret_cast(converter)->converter.cancel();
}*/
CAPI(int) wkhtmltoimage_current_phase(wkhtmltoimage_converter * converter) {
return reinterpret_cast(converter)->converter.currentPhase();
}
CAPI(int) wkhtmltoimage_phase_count(wkhtmltoimage_converter * converter) {
return reinterpret_cast(converter)->converter.phaseCount();
}
CAPI(const char *) wkhtmltoimage_phase_description(wkhtmltoimage_converter * converter, int phase) {
return reinterpret_cast(converter)->converter.phaseDescription(phase).toUtf8().constData();
}
CAPI(const char *) wkhtmltoimage_progress_string(wkhtmltoimage_converter * converter) {
return reinterpret_cast(converter)->converter.progressString().toUtf8().constData();
}
CAPI(int) wkhtmltoimage_http_error_code(wkhtmltoimage_converter * converter) {
return reinterpret_cast(converter)->converter.httpErrorCode();
}
CAPI(long) wkhtmltoimage_get_output(wkhtmltoimage_converter * converter, const unsigned char ** d) {
const QByteArray & out = reinterpret_cast(converter)->converter.output();
*d = (const unsigned char*)out.constData();
return out.size();
}