mirror of
https://github.com/qpdf/qpdf.git
synced 2024-12-22 10:58:58 +00:00
Add QPDF::processFile that takes an open FILE*
This commit is contained in:
parent
ed6a56a3cd
commit
bc1c4bb578
@ -1,3 +1,8 @@
|
|||||||
|
2012-06-21 Jay Berkenbilt <ejb@ql.org>
|
||||||
|
|
||||||
|
* libqpdf/QPDF.cc: new processFile method that takes an open FILE*
|
||||||
|
instead of a filename.
|
||||||
|
|
||||||
2012-06-20 Jay Berkenbilt <ejb@ql.org>
|
2012-06-20 Jay Berkenbilt <ejb@ql.org>
|
||||||
|
|
||||||
* Add new array mutation routines to QPDFObjectHandle.
|
* Add new array mutation routines to QPDFObjectHandle.
|
||||||
|
@ -52,6 +52,14 @@ class QPDF
|
|||||||
QPDF_DLL
|
QPDF_DLL
|
||||||
void processFile(char const* filename, char const* password = 0);
|
void processFile(char const* filename, char const* password = 0);
|
||||||
|
|
||||||
|
// Parse a PDF from a stdio FILE*. The FILE must be open in
|
||||||
|
// binary mode and must be seekable. It may be open read only.
|
||||||
|
// This works exactly like processFile except that the PDF file is
|
||||||
|
// read from an already opened FILE*. The caller is responsible
|
||||||
|
// for closing the file.
|
||||||
|
QPDF_DLL
|
||||||
|
void processFile(FILE* file, char const* password = 0);
|
||||||
|
|
||||||
// Parse a PDF file loaded into a memory buffer. This works
|
// Parse a PDF file loaded into a memory buffer. This works
|
||||||
// exactly like processFile except that the PDF file is in memory
|
// exactly like processFile except that the PDF file is in memory
|
||||||
// instead of on disk. The description appears in any warning or
|
// instead of on disk. The description appears in any warning or
|
||||||
@ -400,6 +408,7 @@ class QPDF
|
|||||||
public:
|
public:
|
||||||
FileInputSource();
|
FileInputSource();
|
||||||
void setFilename(char const* filename);
|
void setFilename(char const* filename);
|
||||||
|
void setFile(FILE* filep);
|
||||||
virtual ~FileInputSource();
|
virtual ~FileInputSource();
|
||||||
virtual std::string const& getName() const;
|
virtual std::string const& getName() const;
|
||||||
virtual off_t tell();
|
virtual off_t tell();
|
||||||
@ -414,6 +423,7 @@ class QPDF
|
|||||||
|
|
||||||
void destroy();
|
void destroy();
|
||||||
|
|
||||||
|
bool close_file;
|
||||||
std::string filename;
|
std::string filename;
|
||||||
FILE* file;
|
FILE* file;
|
||||||
};
|
};
|
||||||
|
@ -80,6 +80,7 @@ QPDF::InputSource::readLine()
|
|||||||
}
|
}
|
||||||
|
|
||||||
QPDF::FileInputSource::FileInputSource() :
|
QPDF::FileInputSource::FileInputSource() :
|
||||||
|
close_file(false),
|
||||||
file(0)
|
file(0)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
@ -89,10 +90,21 @@ QPDF::FileInputSource::setFilename(char const* filename)
|
|||||||
{
|
{
|
||||||
destroy();
|
destroy();
|
||||||
this->filename = filename;
|
this->filename = filename;
|
||||||
|
this->close_file = true;
|
||||||
this->file = QUtil::fopen_wrapper(std::string("open ") + this->filename,
|
this->file = QUtil::fopen_wrapper(std::string("open ") + this->filename,
|
||||||
fopen(this->filename.c_str(), "rb"));
|
fopen(this->filename.c_str(), "rb"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
QPDF::FileInputSource::setFile(FILE* f)
|
||||||
|
{
|
||||||
|
destroy();
|
||||||
|
this->filename = "stdio FILE";
|
||||||
|
this->close_file = false;
|
||||||
|
this->file = f;
|
||||||
|
this->seek(0, SEEK_SET);
|
||||||
|
}
|
||||||
|
|
||||||
QPDF::FileInputSource::~FileInputSource()
|
QPDF::FileInputSource::~FileInputSource()
|
||||||
{
|
{
|
||||||
destroy();
|
destroy();
|
||||||
@ -101,7 +113,7 @@ QPDF::FileInputSource::~FileInputSource()
|
|||||||
void
|
void
|
||||||
QPDF::FileInputSource::destroy()
|
QPDF::FileInputSource::destroy()
|
||||||
{
|
{
|
||||||
if (this->file)
|
if (this->file && this->close_file)
|
||||||
{
|
{
|
||||||
fclose(this->file);
|
fclose(this->file);
|
||||||
this->file = 0;
|
this->file = 0;
|
||||||
@ -316,6 +328,15 @@ QPDF::processFile(char const* filename, char const* password)
|
|||||||
parse(password);
|
parse(password);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
QPDF::processFile(FILE* filep, char const* password)
|
||||||
|
{
|
||||||
|
FileInputSource* fi = new FileInputSource();
|
||||||
|
this->file = fi;
|
||||||
|
fi->setFile(filep);
|
||||||
|
parse(password);
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
QPDF::processMemoryFile(char const* description,
|
QPDF::processMemoryFile(char const* description,
|
||||||
char const* buf, size_t length,
|
char const* buf, size_t length,
|
||||||
|
@ -200,3 +200,6 @@ qpdf-c set_info_key to null 0
|
|||||||
qpdf-c set-info-key use existing info 0
|
qpdf-c set-info-key use existing info 0
|
||||||
qpdf-c add info to trailer 0
|
qpdf-c add info to trailer 0
|
||||||
qpdf-c called qpdf_init_write_memory 0
|
qpdf-c called qpdf_init_write_memory 0
|
||||||
|
exercise processFile(name) 0
|
||||||
|
exercise processFile(FILE*) 0
|
||||||
|
exercise processMemoryFile 0
|
||||||
|
@ -60,17 +60,29 @@ void runtest(int n, char const* filename)
|
|||||||
{
|
{
|
||||||
QPDF pdf;
|
QPDF pdf;
|
||||||
PointerHolder<char> file_buf;
|
PointerHolder<char> file_buf;
|
||||||
|
FILE* filep = 0;
|
||||||
if (n == 0)
|
if (n == 0)
|
||||||
{
|
{
|
||||||
pdf.setAttemptRecovery(false);
|
pdf.setAttemptRecovery(false);
|
||||||
}
|
}
|
||||||
if (n % 2 == 0)
|
if (n % 2 == 0)
|
||||||
{
|
{
|
||||||
pdf.processFile(filename);
|
if (n % 4 == 0)
|
||||||
|
{
|
||||||
|
QTC::TC("qpdf", "exercise processFile(name)");
|
||||||
|
pdf.processFile(filename);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
QTC::TC("qpdf", "exercise processFile(FILE*)");
|
||||||
|
filep = QUtil::fopen_wrapper(std::string("open ") + filename,
|
||||||
|
fopen(filename, "rb"));
|
||||||
|
pdf.processFile(filep);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// Exercise processMemoryFile
|
QTC::TC("qpdf", "exercise processMemoryFile");
|
||||||
FILE* f = QUtil::fopen_wrapper(std::string("open ") + filename,
|
FILE* f = QUtil::fopen_wrapper(std::string("open ") + filename,
|
||||||
fopen(filename, "rb"));
|
fopen(filename, "rb"));
|
||||||
fseek(f, 0, SEEK_END);
|
fseek(f, 0, SEEK_END);
|
||||||
@ -623,6 +635,10 @@ void runtest(int n, char const* filename)
|
|||||||
QUtil::int_to_string(n));
|
QUtil::int_to_string(n));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (filep)
|
||||||
|
{
|
||||||
|
fclose(filep);
|
||||||
|
}
|
||||||
std::cout << "test " << n << " done" << std::endl;
|
std::cout << "test " << n << " done" << std::endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user