git.asbjorn.biz
/
swftools.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
added 'bitmap' option
[swftools.git]
/
lib
/
pdf
/
pdf.cc
diff --git
a/lib/pdf/pdf.cc
b/lib/pdf/pdf.cc
index
285e01b
..
f7fb640
100644
(file)
--- a/
lib/pdf/pdf.cc
+++ b/
lib/pdf/pdf.cc
@@
-6,7
+6,9
@@
#include "GlobalParams.h"
#include "InfoOutputDev.h"
#include "GFXOutputDev.h"
#include "GlobalParams.h"
#include "InfoOutputDev.h"
#include "GFXOutputDev.h"
+#include "FullBitmapOutputDev.h"
#include "BitmapOutputDev.h"
#include "BitmapOutputDev.h"
+#include "DummyOutputDev.h"
#include "../mem.h"
#include "pdf.h"
#define NO_ARGPARSER
#include "../mem.h"
#include "pdf.h"
#define NO_ARGPARSER
@@
-34,12
+36,14
@@
typedef struct _pdf_page_info
typedef struct _pdf_doc_internal
{
int protect;
typedef struct _pdf_doc_internal
{
int protect;
+ int nocopy;
PDFDoc*doc;
Object docinfo;
InfoOutputDev*info;
CommonOutputDev*outputDev;
pdf_page_info_t*pages;
gfxdevice_t* middev;
PDFDoc*doc;
Object docinfo;
InfoOutputDev*info;
CommonOutputDev*outputDev;
pdf_page_info_t*pages;
gfxdevice_t* middev;
+ char*filename;
} pdf_doc_internal_t;
typedef struct _pdf_page_internal
} pdf_doc_internal_t;
typedef struct _pdf_page_internal
@@
-78,7
+82,6
@@
void render2(gfxpage_t*page, gfxdevice_t*dev)
pi->middev->setparameter(pi->middev, "protect", "1");
dev = pi->middev;
}
pi->middev->setparameter(pi->middev, "protect", "1");
dev = pi->middev;
}
- dev->setparameter(dev, "protect", "1");
if(!pi) {
msg("<fatal> pdf_page_render: Parent PDF this page belongs to doesn't exist yet/anymore");
if(!pi) {
msg("<fatal> pdf_page_render: Parent PDF this page belongs to doesn't exist yet/anymore");
@@
-148,6
+151,10
@@
void pdf_doc_destroy(gfxdocument_t*gfx)
free(i->pages); i->pages = 0;
i->docinfo.free();
free(i->pages); i->pages = 0;
i->docinfo.free();
+
+ if(i->filename) {
+ free(i->filename);i->filename=0;
+ }
if(i->info) {
delete i->info;i->info=0;
if(i->info) {
delete i->info;i->info=0;
@@
-188,6
+195,10
@@
gfxpage_t* pdf_doc_getpage(gfxdocument_t*doc, int page)
if(page < 1 || page > doc->num_pages)
return 0;
if(page < 1 || page > doc->num_pages)
return 0;
+ if(di->nocopy) {
+ msg("<error> PDF disallows copying.");
+ return 0;
+ }
gfxpage_t* pdf_page = (gfxpage_t*)malloc(sizeof(gfxpage_t));
pdf_page_internal_t*pi= (pdf_page_internal_t*)malloc(sizeof(pdf_page_internal_t));
gfxpage_t* pdf_page = (gfxpage_t*)malloc(sizeof(gfxpage_t));
pdf_page_internal_t*pi= (pdf_page_internal_t*)malloc(sizeof(pdf_page_internal_t));
@@
-284,10
+295,21
@@
char* pdf_doc_getinfo(gfxdocument_t*doc, const char*name)
static void storeDeviceParameter(const char*name, const char*value)
{
static void storeDeviceParameter(const char*name, const char*value)
{
+ parameter_t*o = device_config;
+ while(o) {
+ if(!strcmp(name, o->name)) {
+ /* overwrite old value */
+ free(o->value);
+ o->value = strdup(value);
+ return;
+ }
+ o = o->next;
+ }
parameter_t*p = new parameter_t();
p->name = strdup(name);
p->value = strdup(value);
p->next = 0;
parameter_t*p = new parameter_t();
p->name = strdup(name);
p->value = strdup(value);
p->next = 0;
+
if(device_config_next) {
device_config_next->next = p;
device_config_next = p;
if(device_config_next) {
device_config_next->next = p;
device_config_next = p;
@@
-300,6
+322,7
@@
static void storeDeviceParameter(const char*name, const char*value)
typedef struct _gfxsource_internal
{
int config_bitmap_optimizing;
typedef struct _gfxsource_internal
{
int config_bitmap_optimizing;
+ int config_full_bitmap_optimizing;
} gfxsource_internal_t;
static void pdf_set_parameter(gfxsource_t*src, const char*name, const char*value)
} gfxsource_internal_t;
static void pdf_set_parameter(gfxsource_t*src, const char*name, const char*value)
@@
-333,6
+356,8
@@
static void pdf_set_parameter(gfxsource_t*src, const char*name, const char*value
storeDeviceParameter("ppmsubpixels", buf);
} else if(!strcmp(name, "poly2bitmap")) {
i->config_bitmap_optimizing = atoi(value);
storeDeviceParameter("ppmsubpixels", buf);
} else if(!strcmp(name, "poly2bitmap")) {
i->config_bitmap_optimizing = atoi(value);
+ } else if(!strcmp(name, "bitmapfonts") || !strcmp(name, "bitmap")) {
+ i->config_full_bitmap_optimizing = atoi(value);
} else if(!strcmp(name, "multiply")) {
multiply = atoi(value);
} else if(!strcmp(name, "help")) {
} else if(!strcmp(name, "multiply")) {
multiply = atoi(value);
} else if(!strcmp(name, "help")) {
@@
-355,7
+380,7
@@
static gfxdocument_t*pdf_open(gfxsource_t*src, const char*filename)
pdf_doc->internal = i;
char*userPassword=0;
pdf_doc->internal = i;
char*userPassword=0;
- filename = strdup(filename);
+ i->filename = strdup(filename);
char*x = 0;
if((x = strchr(filename, '|'))) {
char*x = 0;
if((x = strchr(filename, '|'))) {
@@
-388,8
+413,7
@@
static gfxdocument_t*pdf_open(gfxsource_t*src, const char*filename)
i->protect = 0;
if (i->doc->isEncrypted()) {
if(!i->doc->okToCopy()) {
i->protect = 0;
if (i->doc->isEncrypted()) {
if(!i->doc->okToCopy()) {
- printf("PDF disallows copying.\n");
- return 0;
+ i->nocopy = 1;
}
if(!i->doc->okToChange() || !i->doc->okToAddNotes())
i->protect = 1;
}
if(!i->doc->okToChange() || !i->doc->okToAddNotes())
i->protect = 1;
@@
-416,7
+440,10
@@
static gfxdocument_t*pdf_open(gfxsource_t*src, const char*filename)
}
}
}
}
- if(isrc->config_bitmap_optimizing) {
+ if(isrc->config_full_bitmap_optimizing) {
+ FullBitmapOutputDev*outputDev = new FullBitmapOutputDev(i->info, i->doc);
+ i->outputDev = (CommonOutputDev*)outputDev;
+ } else if(isrc->config_bitmap_optimizing) {
BitmapOutputDev*outputDev = new BitmapOutputDev(i->info, i->doc);
i->outputDev = (CommonOutputDev*)outputDev;
} else {
BitmapOutputDev*outputDev = new BitmapOutputDev(i->info, i->doc);
i->outputDev = (CommonOutputDev*)outputDev;
} else {
@@
-447,6
+474,14
@@
static gfxdocument_t*pdf_open(gfxsource_t*src, const char*filename)
return pdf_doc;
}
return pdf_doc;
}
+
+void pdf_destroy(gfxsource_t*src)
+{
+ if(!src->internal)
+ return;
+ gfxsource_internal_t*i = (gfxsource_internal_t*)src->internal;
+ free(src->internal);src->internal=0;
+}
gfxsource_t*gfxsource_pdf_create()
{
gfxsource_t*gfxsource_pdf_create()
{
@@
-454,6
+489,7
@@
gfxsource_t*gfxsource_pdf_create()
memset(src, 0, sizeof(gfxsource_t));
src->set_parameter = pdf_set_parameter;
src->open = pdf_open;
memset(src, 0, sizeof(gfxsource_t));
src->set_parameter = pdf_set_parameter;
src->open = pdf_open;
+ src->destroy = pdf_destroy;
src->internal = malloc(sizeof(gfxsource_internal_t));
memset(src->internal, 0, sizeof(gfxsource_internal_t));
src->internal = malloc(sizeof(gfxsource_internal_t));
memset(src->internal, 0, sizeof(gfxsource_internal_t));