webkit, gtk3 및 cairo를 사용하여 웹 페이지를 PDF로 저장하고 싶습니다. 완성 된 WebKitWebView (보이는 부분 만)를 gtk3 및 카이로로 PDF로
효과 : 보이는 부분 (창에 표시)이 pdf에 정확하게 인쇄됩니다.
작동하지 않지만 작동해야합니다. 보이지 않는 부분 (아래로 스크롤 할 때)은 해당 pdf에도 인쇄되어야합니다 . 어떤 아이디어? 컴파일
#include <gtk/gtk.h>
#include <webkit/webkit.h>
#include <cairo-pdf.h>
static void save_as_pdf (GtkWidget *widget, const char *filename)
{
GtkAllocation allocation;
printf("Saving PDF to file %s\n", filename);
gtk_widget_get_allocation(GTK_WIDGET(widget), &allocation);
printf("height: %d width: %d\n", allocation.height, allocation.width);
cairo_surface_t *surface = cairo_pdf_surface_create(filename, allocation.width, allocation.height);
cairo_t *cr = cairo_create(surface);
gtk_widget_draw(widget, cr);
cairo_destroy(cr);
cairo_surface_destroy(surface);
}
static void notifyProgressCb(WebKitWebView* webView, GParamSpec* pspec, GtkWidget* window)
{
float progress = webkit_web_view_get_progress(webView);
printf("\x1b[1G\t\x1b[1G%f", progress * 100); fflush(stdout);
if (progress == 1.0)
save_as_pdf(window, "test.pdf");
}
int main (int argc, char *argv[])
{
GtkWidget *window;
WebKitWebView *webView;
gtk_init (&argc, &argv);
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_window_set_default_size(GTK_WINDOW(window), 1024, 768);
webView = WEBKIT_WEB_VIEW(webkit_web_view_new());
gtk_container_set_resize_mode(GTK_CONTAINER(webView), GTK_RESIZE_PARENT);
gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(webView));
g_signal_connect(webView, "notify::progress", G_CALLBACK(notifyProgressCb), webView);
webkit_web_view_load_uri(webView, "http://www.heise.de");
g_signal_connect (window, "destroy", G_CALLBACK (gtk_main_quit), NULL);
gtk_widget_show_all (window);
gtk_main();
return 0;
}
:
내 코드의
GCC
pkg-config --cflags --libs gtk+-3.0
pkg-config --libs --cflags webkitgtk-3.0
yourfile.c
당신의 코드가 webkitgtk 2.0.3로 잘 여기에 페도라 19 일을, 전체 페이지가 저장됩니다. "파일을 test.pdf 파일로 저장, 높이 : 5781 너비 : 1225." http://people.gnome.org/~klember/test.pdf – kalev
@kalev 흠, 흥미 롭습니다. 열린 창에 완전한 웹 사이트가 표시됩니까 (예 : 스크롤 할 필요가 없음)? 아마도 당신은 더 큰 화면을 가지고 있고 완벽한 웹 사이트는 창문에 들어 맞을 것입니다. – btwotch