1
0
mirror of https://github.com/pdf2htmlEX/pdf2htmlEX.git synced 2024-12-22 04:50:09 +00:00

As suggested by Lu Wand, merging the adobe-form branch into the incoming branch

This commit is contained in:
Simon Chenard 2014-12-03 14:32:01 -05:00
commit 9fd1ba37de
12 changed files with 130 additions and 0 deletions

View File

@ -119,6 +119,7 @@ set(PDF2HTMLEX_SRC ${PDF2HTMLEX_SRC}
src/HTMLRenderer/general.cc
src/HTMLRenderer/image.cc
src/HTMLRenderer/font.cc
src/HTMLRenderer/form.cc
src/HTMLRenderer/link.cc
src/HTMLRenderer/outline.cc
src/HTMLRenderer/state.cc

View File

@ -138,6 +138,10 @@ Whether to show outline in the generated HTML
.B \-\-process-annotation <0|1> (Default: 0)
Whether to show annotation in the generated HTML
.TP
.B \-\-process-form <0|1> (Default: 0)
Whether to include text fields and radio buttons in the generated HTML
.TP
.B \-\-printing <0|1> (Default: 1)
Enable printing support. Disabling this option may reduce the size of CSS.

View File

@ -190,4 +190,14 @@
-ms-transform-origin:0% 100%;
-webkit-transform-origin:0% 100%;
}
/* for the forms */
.@CSS_INPUT_TEXT_CN@ {
border: none;
background-color: rgba(255, 255, 255, 0.0);
}
.@CSS_INPUT_RADIO_CN@:hover {
cursor: pointer;
}
/* Base CSS END */

View File

@ -81,5 +81,8 @@
-webkit-animation: swing 1.5s ease-in-out 0.01s infinite alternate none;
animation: swing 1.5s ease-in-out 0.01s infinite alternate none;
}
.@CSS_RADIO_CHECKED_CN@ {
background: no-repeat url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3goQDSYgDiGofgAAAslJREFUOMvtlM9LFGEYx7/vvOPM6ywuuyPFihWFBUsdNnA6KLIh+QPx4KWExULdHQ/9A9EfUodYmATDYg/iRewQzklFWxcEBcGgEplDkDtI6sw4PzrIbrOuedBb9MALD7zv+3m+z4/3Bf7bZS2bzQIAcrmcMDExcTeXy10DAFVVAQDksgFUVZ1ljD3yfd+0LOuFpmnvVVW9GHhkZAQcxwkNDQ2FSCQyRMgJxnVdy7KstKZpn7nwha6urqqfTqfPBAJAuVymlNLXoigOhfd5nmeiKL5TVTV+lmIKwAOA7u5u6Lped2BsbOwjY6yf4zgQQkAIAcedaPR9H67r3uYBQFEUFItFtLe332lpaVkUBOHK3t5eRtf1DwAwODiIubk5DA8PM8bYW1EU+wEgCIJqsCAIQAiB7/u253k2BQDDMJBKpa4mEon5eDx+UxAESJL0uK2t7XosFlvSdf0QAEmlUnlRFJ9Waho2Qghc1/U9z3uWz+eX+Wr+lL6SZfleEAQIggA8z6OpqSknimIvYyybSCReMsZ6TislhCAIAti2Dc/zejVNWwCAavN8339j27YbTg0AGGM3WltbP4WhlRWq6Q/btrs1TVsYHx+vNgqKoqBUKn2NRqPFxsbGJzzP05puUlpt0ukyOI6z7zjOwNTU1OLo6CgmJyf/gA3DgKIoWF1d/cIY24/FYgOU0pp0z/Ityzo8Pj5OTk9PbwHA+vp6zWghDC+VSiuRSOQgGo32UErJ38CO42wdHR09LBQK3zKZDDY2NupmFmF4R0cHVlZWlmRZ/iVJUn9FeWWcCCE4ODjYtG27Z2Zm5juAOmgdGAB2d3cBADs7O8uSJN2SZfl+WKlpmpumaT6Yn58vn/fs6XmbhmHMNjc3tzDGFI7jYJrm5vb29sDa2trPC/9aiqJUy5pOp4f6+vqeJ5PJBAB0dnZe/t8NBajx/z37Df5OGX8d13xzAAAAAElFTkSuQmCC);
}
}
/* Fancy CSS END */

View File

@ -260,7 +260,24 @@ Viewer.prototype = {
this.pre_hide_pages();
},
initialize_radio_button : function() {
var elements = document.getElementsByClassName('ir');
for(var i = 0; i < elements.length; i++) {
var r = elements[i];
r.addEventListener('click', function() {
if(this.className.search("checked") == -1)
this.className += " checked";
else
this.className = "ir";
});
}
},
init_after_loading_content : function() {
this.initialize_radio_button();
this.sidebar = document.getElementById(this.config['sidebar_id']);
this.outline = document.getElementById(this.config['outline_id']);
this.container = document.getElementById(this.config['container_id']);

View File

@ -21,6 +21,10 @@
#include <GfxFont.h>
#include <Annot.h>
// for form.cc
#include <Page.h>
#include <Form.h>
#include "pdf2htmlEX-config.h"
#include "Param.h"
@ -161,6 +165,8 @@ protected:
void process_outline(void);
void process_outline_items(GooList * items);
void process_form(std::ofstream & out);
void set_stream_flags (std::ostream & out);
void dump_css(void);

75
src/HTMLRenderer/form.cc Normal file
View File

@ -0,0 +1,75 @@
/*
* form.cc
*
* Handling Forms
*
* by Simon Chenard
* 2014.07.25
*/
#include <iostream>
#include <sstream>
#include <string>
#include "HTMLRenderer.h"
#include "util/namespace.h"
#include "util/misc.h"
namespace pdf2htmlEX {
using std::ofstream;
using std::cerr;
void HTMLRenderer::process_form(ofstream & out)
{
FormPageWidgets * widgets = cur_catalog->getPage(pageNum)->getFormWidgets();
int num = widgets->getNumWidgets();
for(int i = 0; i < num; i++)
{
FormWidget * w = widgets->getWidget(i);
double x1, y1, x2, y2, width, font_size;
int height;
w->getRect(&x1, &y1, &x2, &y2);
x1 = x1 * param.zoom;
x2 = x2 * param.zoom;
y1 = y1 * param.zoom;
y2 = y2 * param.zoom;
width = x2 - x1;
height = y2 - y1;
if(w->getType() == formText)
{
font_size = height / 2;
out
<< "<input id=\"text-" << pageNum << "-"
<< i << "\" type=\"text\" value=\"\""
<< " style=\"position: absolute; left: " << x1
<< "px; bottom: " << y1 << "px;"
<< " width: " << width << "px; height: " << std::to_string(height)
<< "px; line-height: " << std::to_string(height) << "px; font-size: "
<< font_size << "px;\" class=\""
<< CSS::INPUT_TEXT_CN << "\" />" << endl;
}
if(w->getType() == formButton)
{
width += 3;
height += 3;
out
<< "<div id=\"cb-" << pageNum << "-" << i << "\""
<< " style=\"position: absolute; left: " << x1
<< "px; bottom: " << y1 << "px;"
<< " width: " << width << "px; height: "
<< std::to_string(height) << "px; background-size: cover;\" class=\""
<< CSS::INPUT_RADIO_CN << "\"></div>" << endl;
}
}
}
}

View File

@ -239,6 +239,10 @@ void HTMLRenderer::endPage() {
html_text_page.dump_css(f_css.fs);
html_text_page.clear();
// process form
if(param.process_form)
process_form(*f_curpage);
// process links before the page is closed
cur_doc->processLinks(this, pageNum);
@ -380,6 +384,7 @@ void HTMLRenderer::pre_process(PDFDoc * doc)
void HTMLRenderer::post_process(void)
{
dump_css();
// close files if they opened
if (param.process_outline)
{

View File

@ -38,6 +38,7 @@ struct Param
int process_nontext;
int process_outline;
int process_annotation;
int process_form;
int correct_text_visibility;
int printing;
int fallback;

View File

@ -34,3 +34,6 @@ set(CSS_WIDTH_CN "w") # Width
set(CSS_BOTTTOM_CN "y") # Y
set(CSS_CSS_DRAW_CN "d") # Draw
set(CSS_LINK_CN "l") # Link
set(CSS_INPUT_TEXT_CN "it") # Text input
set(CSS_INPUT_RADIO_CN "ir") # Radio button
set(CSS_RADIO_CHECKED_CN "checked") # Show picture of checked out radio button

View File

@ -164,6 +164,7 @@ void parse_options (int argc, char **argv)
.add("process-nontext", &param.process_nontext, 1, "render graphics in addition to text")
.add("process-outline", &param.process_outline, 1, "show outline in HTML")
.add("process-annotation", &param.process_annotation, 0, "show annotation in HTML")
.add("process-form", &param.process_form, 0, "include text fields and radio buttons")
.add("printing", &param.printing, 1, "enable printing support")
.add("fallback", &param.fallback, 0, "output in fallback mode")
.add("tmp-file-size-limit", &param.tmp_file_size_limit, -1, "Maximum size (in KB) used by temporary files, -1 for no limit.")

View File

@ -56,6 +56,10 @@ const char * const BOTTOM_CN = "@CSS_BOTTTOM_CN@";
const char * const CSS_DRAW_CN = "@CSS_CSS_DRAW_CN@";
const char * const LINK_CN = "@CSS_LINK_CN@";
const char * const INPUT_TEXT_CN = "@CSS_INPUT_TEXT_CN@";
const char * const INPUT_RADIO_CN = "@CSS_INPUT_RADIO_CN@";
const char * const RADIO_CHECKED_CN = "@CSS_RADIO_CHECKED_CN@";
}
}