poco/PDF/src/PDFException.cpp
2017-09-09 11:14:06 +02:00

272 lines
12 KiB
C++

//
// PDFException.cpp
//
// Library: PDF
// Package: PDFCore
// Module: PDFException
//
// Copyright (c) 2006, Applied Informatics Software Engineering GmbH.
// and Contributors.
//
// SPDX-License-Identifier: BSL-1.0
//
#include "Poco/PDF/PDFException.h"
#include "Poco/Format.h"
#include <string>
#include <typeinfo>
namespace Poco {
namespace PDF {
void HPDF_Error_Handler(HPDF_STATUS error_no, HPDF_STATUS detail_no, void* user_data)
{
switch (error_no)
{
case HPDF_ARRAY_COUNT_ERR:
throw InvalidArgumentException("Internal error. The consistency of the data was lost.");
case HPDF_ARRAY_ITEM_NOT_FOUND:
throw NotFoundException("Internal error. The consistency of the data was lost.");
case HPDF_ARRAY_ITEM_UNEXPECTED_TYPE:
throw InvalidArgumentException("Internal error. The consistency of the data was lost.");
case HPDF_BINARY_LENGTH_ERR:
throw InvalidArgumentException("The length of the data exceeds HPDF_LIMIT_MAX_STRING_LEN.");
case HPDF_CANNOT_GET_PALLET:
throw NotFoundException("Cannot get a pallet data from PNG image.");
case HPDF_DICT_COUNT_ERR:
throw InvalidArgumentException("The count of elements of a dictionary exceeds HPDF_LIMIT_MAX_DICT_ELEMENT");
case HPDF_DICT_ITEM_NOT_FOUND:
throw NotFoundException("Internal error. The consistency of the data was lost.");
case HPDF_DICT_ITEM_UNEXPECTED_TYPE:
throw InvalidArgumentException("Internal error. The consistency of the data was lost.");
case HPDF_DICT_STREAM_LENGTH_NOT_FOUND:
throw NotFoundException("Internal error. The consistency of the data was lost.");
case HPDF_DOC_ENCRYPTDICT_NOT_FOUND:
throw NotFoundException("HPDF_SetPermission() OR HPDF_SetEncryptMode() was called before a password is set.");
case HPDF_DOC_INVALID_OBJECT:
throw IllegalStateException("Internal error. The consistency of the data was lost.");
case HPDF_DUPLICATE_REGISTRATION:
throw IllegalStateException("Tried to register a font that has been registered.");
case HPDF_EXCEED_JWW_CODE_NUM_LIMIT:
throw IllegalStateException("Cannot register a character to the japanese word wrap characters list.");
case HPDF_ENCRYPT_INVALID_PASSWORD:
throw IllegalStateException("Tried to set the owner password to NULL.");
case HPDF_ERR_UNKNOWN_CLASS:
throw InvalidArgumentException("Internal error. The consistency of the data was lost.");
case HPDF_EXCEED_GSTATE_LIMIT:
throw IllegalStateException("The depth of the stack exceeded HPDF_LIMIT_MAX_GSTATE.");
case HPDF_FAILD_TO_ALLOC_MEM:
throw IllegalStateException("Memory allocation failed.");
case HPDF_FILE_IO_ERROR:
throw IOException("File processing failed. (A detailed code is set.)");
case HPDF_FILE_OPEN_ERROR:
throw IOException("Cannot open a file. (A detailed code is set.)");
case HPDF_FONT_EXISTS:
throw IllegalStateException("Tried to load a font that has been registered.");
case HPDF_FONT_INVALID_WIDTHS_TABLE:
throw IllegalStateException("The format of a font-file is invalid. Internal error. The consistency of the data was lost.");
case HPDF_INVALID_AFM_HEADER:
throw IllegalStateException("Cannot recognize a header of an afm file.");
case HPDF_INVALID_ANNOTATION:
throw IllegalStateException("The specified annotation handle is invalid.");
case HPDF_INVALID_BIT_PER_COMPONENT:
throw IllegalStateException("Bit-per-component of a image which was set as mask-image is invalid.");
case HPDF_INVALID_CHAR_MATRICS_DATA:
throw IllegalStateException("Cannot recognize char-matrics-data of an afm file.");
case HPDF_INVALID_COLOR_SPACE:
switch (detail_no)
{
case 1:
throw InvalidArgumentException("The color_space parameter of HPDF_LoadRawImage is invalid.");
case 2:
throw InvalidArgumentException("Color-space of a image which was set as mask-image is invalid.");
case 3:
throw InvalidArgumentException("The function which is invalid in the present color-space was invoked.");
default:
throw PDFException();
}
case HPDF_INVALID_COMPRESSION_MODE:
throw InvalidArgumentException("Invalid value was set when invoking HPDF_SetCommpressionMode().");
case HPDF_INVALID_DATE_TIME:
throw InvalidArgumentException("An invalid date-time value was set.");
case HPDF_INVALID_DESTINATION:
throw InvalidArgumentException("An invalid destination handle was set.");
case HPDF_INVALID_DOCUMENT:
throw InvalidArgumentException("An invalid document handle is set.");
case HPDF_INVALID_DOCUMENT_STATE:
throw IllegalStateException("The function which is invalid in the present state was invoked.");
case HPDF_INVALID_ENCODER:
throw InvalidArgumentException("An invalid encoder handle is set.");
case HPDF_INVALID_ENCODER_TYPE:
throw InvalidArgumentException("A combination between font and encoder is wrong.");
case HPDF_INVALID_ENCODING_NAME:
throw InvalidArgumentException("An Invalid encoding name is specified.");
case HPDF_INVALID_ENCRYPT_KEY_LEN:
throw InvalidArgumentException("The lengh of the key of encryption is invalid.");
case HPDF_INVALID_FONTDEF_DATA:
switch (detail_no)
{
case 1:
throw InvalidArgumentException("An invalid font handle was set.");
case 2:
throw InvalidArgumentException("Unsupported font format.");
default:
throw PDFException();
}
case HPDF_INVALID_FONTDEF_TYPE:
throw IllegalStateException("Internal error. The consistency of the data was lost.");
case HPDF_INVALID_FONT_NAME:
throw NotFoundException("A font which has the specified name is not found.");
case HPDF_INVALID_IMAGE:
throw InvalidArgumentException("Unsupported image format.");
case HPDF_INVALID_JPEG_DATA:
throw InvalidArgumentException("Unsupported image format.");
case HPDF_INVALID_N_DATA:
throw IOException("Cannot read a postscript-name from an afm file.");
case HPDF_INVALID_OBJECT:
switch (detail_no)
{
case 1:
throw IllegalStateException("An invalid object is set.");
case 2:
throw IllegalStateException("Internal error. The consistency of the data was lost.");
default:
throw PDFException();
}
case HPDF_INVALID_OBJ_ID:
throw InvalidArgumentException("Internal error. The consistency of the data was lost.");
case HPDF_INVALID_OPERATION:
switch (detail_no)
{
case 1:
throw IllegalStateException("Invoked HPDF_Image_SetColorMask() against the image-object which was set a mask-image.");
default:
throw PDFException();
}
case HPDF_INVALID_OUTLINE:
throw InvalidArgumentException("An invalid outline-handle was specified.");
case HPDF_INVALID_PAGE:
throw InvalidArgumentException("An invalid page-handle was specified.");
case HPDF_INVALID_PAGES:
throw InvalidArgumentException("An invalid pages-handle was specified. (internel error)");
case HPDF_INVALID_PARAMETER:
throw InvalidArgumentException("An invalid value is set.");
case HPDF_INVALID_PNG_IMAGE:
throw InvalidArgumentException("Invalid PNG image format.");
case HPDF_INVALID_STREAM:
throw InvalidArgumentException("Internal error. The consistency of the data was lost.");
case HPDF_MISSING_FILE_NAME_ENTRY:
throw InvalidArgumentException("Internal error. The \"_FILE_NAME\" entry for delayed loading is missing.");
case HPDF_INVALID_TTC_FILE:
throw InvalidArgumentException("Invalid .TTC file format.");
case HPDF_INVALID_TTC_INDEX:
throw InvalidArgumentException("The index parameter was exceed the number of included fonts");
case HPDF_INVALID_WX_DATA:
throw IOException("Cannot read a width-data from an afm file.");
case HPDF_ITEM_NOT_FOUND:
throw NotFoundException("Internal error. The consistency of the data was lost.");
case HPDF_LIBPNG_ERROR:
throw IOException("An error has returned from PNGLIB while loading an image.");
case HPDF_NAME_INVALID_VALUE:
throw InvalidArgumentException("Internal error. The consistency of the data was lost.");
case HPDF_NAME_OUT_OF_RANGE:
throw InvalidArgumentException("Internal error. The consistency of the data was lost.");
case HPDF_PAGES_MISSING_KIDS_ENTRY:
throw IllegalStateException("Internal error. The consistency of the data was lost.");
case HPDF_PAGE_CANNOT_FIND_OBJECT:
throw NotFoundException("Internal error. The consistency of the data was lost.");
case HPDF_PAGE_CANNOT_GET_ROOT_PAGES:
throw InvalidArgumentException("Internal error. The consistency of the data was lost.");
case HPDF_PAGE_CANNOT_RESTORE_GSTATE:
throw IllegalStateException("There are no graphics-states to be restored.");
case HPDF_PAGE_CANNOT_SET_PARENT:
throw IllegalStateException("Internal error. The consistency of the data was lost.");
case HPDF_PAGE_FONT_NOT_FOUND:
throw NotFoundException("The current font is not set.");
case HPDF_PAGE_INVALID_FONT:
throw InvalidArgumentException("An invalid font-handle was spacified.");
case HPDF_PAGE_INVALID_FONT_SIZE:
throw InvalidArgumentException("An invalid font-size was set.");
case HPDF_PAGE_INVALID_GMODE:
throw InvalidArgumentException("See Graphics mode.");
case HPDF_PAGE_INVALID_INDEX:
throw InvalidArgumentException("Internal error. The consistency of the data was lost.");
case HPDF_PAGE_INVALID_ROTATE_VALUE:
throw InvalidArgumentException("The specified value is not a multiple of 90.");
case HPDF_PAGE_INVALID_SIZE:
throw InvalidArgumentException("An invalid page-size was set.");
case HPDF_PAGE_INVALID_XOBJECT:
throw InvalidArgumentException("An invalid image-handle was set.");
case HPDF_PAGE_OUT_OF_RANGE:
throw RangeException("The specified value is out of range.");
case HPDF_REAL_OUT_OF_RANGE:
throw RangeException("The specified value is out of range.");
case HPDF_STREAM_EOF:
throw IllegalStateException("Unexpected EOF marker was detected.");
case HPDF_STREAM_READLN_CONTINUE:
throw IllegalStateException("Internal error. The consistency of the data was lost.");
case HPDF_STRING_OUT_OF_RANGE:
throw RangeException("The length of the specified text is too long.");
case HPDF_THIS_FUNC_WAS_SKIPPED:
throw IllegalStateException("The execution of a function was skipped because of other errors.");
case HPDF_TTF_CANNOT_EMBEDDING_FONT:
throw IllegalStateException("This font cannot be embedded. (restricted by license)");
case HPDF_TTF_INVALID_CMAP:
throw InvalidArgumentException("Unsupported ttf format. (cannot find unicode cmap.)");
case HPDF_TTF_INVALID_FOMAT:
throw InvalidArgumentException("Unsupported ttf format.");
case HPDF_TTF_MISSING_TABLE:
throw InvalidArgumentException("Unsupported ttf format. (cannot find a necessary table)");
case HPDF_UNSUPPORTED_FONT_TYPE:
throw InvalidArgumentException("Internal error. The consistency of the data was lost.");
case HPDF_UNSUPPORTED_FUNC:
switch (detail_no)
{
case 1:
throw IllegalStateException("The library is not configured to use PNGLIB.");
case 2:
throw IllegalStateException("Internal error. The consistency of the data was lost.");
default:
throw PDFException();
}
case HPDF_UNSUPPORTED_JPEG_FORMAT:
throw InvalidArgumentException("Unsupported JPEG format.");
case HPDF_UNSUPPORTED_TYPE1_FONT:
throw IllegalStateException("Failed to parse .PFB file.");
case HPDF_XREF_COUNT_ERR:
throw IllegalStateException("Internal error. The consistency of the data was lost.");
case HPDF_ZLIB_ERROR:
throw IllegalStateException("An error has occurred while executing a function of Zlib.");
case HPDF_INVALID_PAGE_INDEX:
throw IllegalStateException("An error returned from Zlib.");
case HPDF_INVALID_URI:
throw InvalidArgumentException("An invalid URI was set.");
case HPDF_PAGE_LAYOUT_OUT_OF_RANGE:
throw RangeException("An invalid page-layout was set.");
case HPDF_PAGE_MODE_OUT_OF_RANGE:
throw RangeException("An invalid page-mode was set.");
case HPDF_PAGE_NUM_STYLE_OUT_OF_RANGE:
throw RangeException("An invalid page-num-style was set.");
case HPDF_ANNOT_INVALID_ICON:
throw InvalidArgumentException("An invalid icon was set.");
case HPDF_ANNOT_INVALID_BORDER_STYLE:
throw InvalidArgumentException("An invalid border-style was set.");
case HPDF_PAGE_INVALID_DIRECTION:
throw InvalidArgumentException("An invalid page-direction was set.");
case HPDF_INVALID_FONT:
throw InvalidArgumentException("An invalid font-handle was specified. ");
default:
throw PDFException();
}
}
POCO_IMPLEMENT_EXCEPTION(PDFException, Poco::RuntimeException, "PDF Base Exception")
POCO_IMPLEMENT_EXCEPTION(PDFCreateException, PDFException, "PDF creation failed")
} } // namespace Poco::PDF