HGGitLab

Commit c31a2c93 authored by luoliangyi's avatar luoliangyi

集成pdflib功能

parent 646b33d7
#include "HGPdf.h"
#include "mupdf/pdf.h"
#include "mupdf/fitz.h"
#include "pdflib.h"
struct HGPdfReaderImpl
{
......@@ -29,6 +30,85 @@ struct HGPdfReaderImpl
fz_document *m_pDoc;
};
struct HGPdfImageWriterImpl
{
HGPdfImageWriterImpl()
{
m_pPdf = NULL;
}
~HGPdfImageWriterImpl()
{
if (NULL != m_pPdf)
{
PDF_TRY(m_pPdf)
{
PDF_end_document(m_pPdf, "");
}
PDF_CATCH(m_pPdf)
{
}
PDF_delete(m_pPdf);
m_pPdf = NULL;
}
}
PDF* m_pPdf;
};
#if defined(HG_CMP_MSC)
static WCHAR* GetUnicodeStr(const char* text)
{
int len = ::MultiByteToWideChar(CP_ACP, 0, text, -1, NULL, 0);
WCHAR* pUnicode = new WCHAR[len];
::MultiByteToWideChar(CP_ACP, 0, text, -1, pUnicode, len);
return pUnicode;
}
static uint32_t GetUnicodeStrLen(const WCHAR* pUnicode)
{
return (uint32_t)wcslen(pUnicode);
}
#else
static uint16_t* GetUnicodeStr(const char* text)
{
if (0 == *text)
{
uint16_t* pUnicode = new uint16_t[1];
*pUnicode = 0;
return pUnicode;
}
uint16_t* pUnicode = new uint16_t[strlen(text) + 2];
memset(pUnicode, 0, sizeof(uint16_t) * (strlen(text) + 2));
iconv_t cd = iconv_open("UNICODE//IGNORE", "UTF-8");
if ((iconv_t)-1 != cd)
{
char* inbuf = (char*)text;
size_t inbytes = strlen(text);
char* outbuf = (char*)pUnicode;
size_t outsize = sizeof(uint16_t) * (strlen(text) + 1);
iconv(cd, &inbuf, &inbytes, &outbuf, &outsize);
iconv_close(cd);
}
return pUnicode;
}
static uint32_t GetUnicodeStrLen(const uint16_t* pUnicode)
{
uint32_t i = 0;
while (0 != pUnicode[i])
{
++i;
}
return i;
}
#endif
HGResult HGAPI HGImgFmt_CheckPdfFile(const HGChar* fileName, HGBool* isPdf)
{
if (NULL == fileName || '\0' == *fileName || NULL == isPdf)
......@@ -189,15 +269,109 @@ HGResult HGAPI HGImgFmt_LoadImageFromPdfReader(HGPdfReader reader, HGUInt page,
HGResult HGAPI HGImgFmt_OpenPdfImageWriter(const HGChar* fileName, HGPdfImageWriter* writer)
{
return HGBASE_ERR_NOTIMPL;
if (NULL == fileName || '\0' == *fileName || NULL == writer)
{
return HGBASE_ERR_INVALIDARG;
}
PDF* p = PDF_new();
if (NULL == p)
{
return HGBASE_ERR_OUTOFMEMORY;
}
#if defined(HG_CMP_MSC)
WCHAR* pUnicode = GetUnicodeStr(fileName);
#else
uint16_t* pUnicode = GetUnicodeStr(fileName);
uint16_t* pUnicodeEx = pUnicode + 1;
#endif
PDF_TRY(p)
{
PDF_set_parameter(p, "compatibility", "1.4");
PDF_set_parameter(p, "errorpolicy", "return");
PDF_set_parameter(p, "hypertextencoding", "host");
#if defined(HG_CMP_MSC)
if (-1 == PDF_begin_document(p, (const char*)pUnicode, (int)(GetUnicodeStrLen(pUnicode) * sizeof(WCHAR)), ""))
#else
if (-1 == PDF_begin_document(p, (const char*)pUnicodeEx, (int)(GetUnicodeStrLen(pUnicodeEx) * sizeof(uint16_t)), ""))
#endif
{
delete[] pUnicode;
PDF_delete(p);
return HGBASE_ERR_FAIL;
}
}
PDF_CATCH(p)
{
delete[] pUnicode;
PDF_delete(p);
return HGBASE_ERR_FAIL;
}
delete[] pUnicode;
HGPdfImageWriterImpl* pdfImageWriterImpl = new HGPdfImageWriterImpl;
pdfImageWriterImpl->m_pPdf = p;
*writer = (HGPdfImageWriter)pdfImageWriterImpl;
return HGBASE_ERR_OK;
}
HGResult HGAPI HGImgFmt_ClosePdfImageWriter(HGPdfImageWriter writer)
{
return HGBASE_ERR_NOTIMPL;
if (NULL == writer)
{
return HGBASE_ERR_INVALIDARG;
}
HGPdfImageWriterImpl* pdfImageWriterImpl = (HGPdfImageWriterImpl*)writer;
delete pdfImageWriterImpl;
return HGBASE_ERR_OK;
}
HGResult HGAPI HGImgFmt_SaveJpegImageToPdfImageWriter(HGPdfImageWriter writer, HGImage image, const HGJpegSaveInfo* info)
{
return HGBASE_ERR_NOTIMPL;
if (NULL == writer || NULL == image)
{
return HGBASE_ERR_INVALIDARG;
}
HGBuffer buffer = NULL;
HGResult ret = HGImgFmt_SaveJpegImageToBuffer(image, info, &buffer);
if (HGBASE_ERR_OK != ret)
{
return ret;
}
HGByte* imgBuf = NULL;
HGBase_GetBufferData(buffer, &imgBuf);
HGUSize size = 0;
HGBase_GetBufferSize(buffer, &size);
HGPdfImageWriterImpl* pdfImageWriterImpl = (HGPdfImageWriterImpl*)writer;
PDF_TRY(pdfImageWriterImpl->m_pPdf)
{
PDF_create_pvf(pdfImageWriterImpl->m_pPdf, "virtual_file", 0, imgBuf, size, "");
}
PDF_CATCH(pdfImageWriterImpl->m_pPdf)
{
return HGBASE_ERR_OUTOFMEMORY;
}
int img = PDF_load_image(pdfImageWriterImpl->m_pPdf, "auto", "virtual_file", 0, "page 1");
if (-1 != img)
{
PDF_begin_page_ext(pdfImageWriterImpl->m_pPdf, 0.0, 0.0, "");
PDF_fit_image(pdfImageWriterImpl->m_pPdf, img, 0.0, 0.0, "adjustpage");
PDF_end_page_ext(pdfImageWriterImpl->m_pPdf, "");
PDF_close_image(pdfImageWriterImpl->m_pPdf, img);
}
PDF_delete_pvf(pdfImageWriterImpl->m_pPdf, "virtual_file", 0);
HGBase_DestroyBuffer(buffer);
return HGBASE_ERR_OK;
}
\ No newline at end of file
......@@ -113,15 +113,15 @@
<PrecompiledHeader>NotUsing</PrecompiledHeader>
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
<AdditionalIncludeDirectories>../../third_party/libjpeg/windows/include;../../third_party/libnsbmp/windows/include;../../third_party/libpng/windows/include;../../third_party/zlib/windows/include;../../third_party/libtiff/windows/include;../../third_party/mupdf/windows/include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<DisableSpecificWarnings>5045;%(DisableSpecificWarnings)</DisableSpecificWarnings>
<AdditionalIncludeDirectories>../../third_party/libjpeg/windows/include;../../third_party/libnsbmp/windows/include;../../third_party/libpng/windows/include;../../third_party/zlib/windows/include;../../third_party/libtiff/windows/include;../../third_party/mupdf/windows/include;../../third_party/pdflib/windows/include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<DisableSpecificWarnings>4075;4098;%(DisableSpecificWarnings)</DisableSpecificWarnings>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<EnableUAC>false</EnableUAC>
<ModuleDefinitionFile>HGImgFmt.def</ModuleDefinitionFile>
<AdditionalDependencies>../../release/lib/windows/x86/HGBase.lib;../../third_party/libjpeg/windows/lib/x86/jpeg.lib;../../third_party/libnsbmp/windows/lib/x86/libnsbmp.lib;../../third_party/libpng/windows/lib/x86/libpng16.lib;../../third_party/zlib/windows/lib/x86/zlib.lib;../../third_party/libtiff/windows/lib/x86/tiff.lib;../../third_party/mupdf/windows/lib/x86/libmupdf.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalDependencies>../../release/lib/windows/x86/HGBase.lib;../../third_party/libjpeg/windows/lib/x86/jpeg.lib;../../third_party/libnsbmp/windows/lib/x86/libnsbmp.lib;../../third_party/libpng/windows/lib/x86/libpng16.lib;../../third_party/zlib/windows/lib/x86/zlib.lib;../../third_party/libtiff/windows/lib/x86/tiff.lib;../../third_party/mupdf/windows/lib/x86/libmupdf.lib;../../third_party/pdflib/windows/lib/x86/pdflib.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
......@@ -135,7 +135,7 @@
<PrecompiledHeader>NotUsing</PrecompiledHeader>
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<AdditionalIncludeDirectories>../../third_party/libjpeg/windows/include;../../third_party/libnsbmp/windows/include;../../third_party/libpng/windows/include;../../third_party/zlib/windows/include;../../third_party/libtiff/windows/include;../../third_party/mupdf/windows/include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>../../third_party/libjpeg/windows/include;../../third_party/libnsbmp/windows/include;../../third_party/libpng/windows/include;../../third_party/zlib/windows/include;../../third_party/libtiff/windows/include;../../third_party/mupdf/windows/include;../../third_party/pdflib/windows/include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
......@@ -144,7 +144,7 @@
<GenerateDebugInformation>true</GenerateDebugInformation>
<EnableUAC>false</EnableUAC>
<ModuleDefinitionFile>HGImgFmt.def</ModuleDefinitionFile>
<AdditionalDependencies>../../release/lib/windows/x86/HGBase.lib;../../third_party/libjpeg/windows/lib/x86/jpeg.lib;../../third_party/libnsbmp/windows/lib/x86/libnsbmp.lib;../../third_party/libpng/windows/lib/x86/libpng16.lib;../../third_party/zlib/windows/lib/x86/zlib.lib;../../third_party/libtiff/windows/lib/x86/tiff.lib;../../third_party/mupdf/windows/lib/x86/libmupdf.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalDependencies>../../release/lib/windows/x86/HGBase.lib;../../third_party/libjpeg/windows/lib/x86/jpeg.lib;../../third_party/libnsbmp/windows/lib/x86/libnsbmp.lib;../../third_party/libpng/windows/lib/x86/libpng16.lib;../../third_party/zlib/windows/lib/x86/zlib.lib;../../third_party/libtiff/windows/lib/x86/tiff.lib;../../third_party/mupdf/windows/lib/x86/libmupdf.lib;../../third_party/pdflib/windows/lib/x86/pdflib.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
<PostBuildEvent>
<Command>copy $(OutDir)HGImgFmt.lib $(ProjectDir)..\..\release\lib\windows\x86\
......@@ -162,14 +162,16 @@ copy $(ProjectDir)..\*.h $(ProjectDir)..\..\release\include\imgfmt\</Command>
<PrecompiledHeader>NotUsing</PrecompiledHeader>
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
<AdditionalIncludeDirectories>../../third_party/libjpeg/windows/include;../../third_party/libnsbmp/windows/include;../../third_party/libpng/windows/include;../../third_party/zlib/windows/include;../../third_party/libtiff/windows/include;../../third_party/mupdf/windows/include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>../../third_party/libjpeg/windows/include;../../third_party/libnsbmp/windows/include;../../third_party/libpng/windows/include;../../third_party/zlib/windows/include;../../third_party/libtiff/windows/include;../../third_party/mupdf/windows/include;../../third_party/pdflib/windows/include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<DisableSpecificWarnings>4075;4098;%(DisableSpecificWarnings)</DisableSpecificWarnings>
<WholeProgramOptimization>false</WholeProgramOptimization>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<EnableUAC>false</EnableUAC>
<ModuleDefinitionFile>HGImgFmt.def</ModuleDefinitionFile>
<AdditionalDependencies>../../release/lib/windows/x64/HGBase.lib;../../third_party/libjpeg/windows/lib/x64/jpeg.lib;../../third_party/libnsbmp/windows/lib/x64/libnsbmp.lib;../../third_party/libpng/windows/lib/x64/libpng16.lib;../../third_party/zlib/windows/lib/x64/zlib.lib;../../third_party/libtiff/windows/lib/x64/tiff.lib;../../third_party/mupdf/windows/lib/x64/libmupdf.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalDependencies>../../release/lib/windows/x64/HGBase.lib;../../third_party/libjpeg/windows/lib/x64/jpeg.lib;../../third_party/libnsbmp/windows/lib/x64/libnsbmp.lib;../../third_party/libpng/windows/lib/x64/libpng16.lib;../../third_party/zlib/windows/lib/x64/zlib.lib;../../third_party/libtiff/windows/lib/x64/tiff.lib;../../third_party/mupdf/windows/lib/x64/libmupdf.lib;../../third_party/pdflib/windows/lib/x64/pdflib.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
......@@ -183,7 +185,7 @@ copy $(ProjectDir)..\*.h $(ProjectDir)..\..\release\include\imgfmt\</Command>
<PrecompiledHeader>NotUsing</PrecompiledHeader>
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<AdditionalIncludeDirectories>../../third_party/libjpeg/windows/include;../../third_party/libnsbmp/windows/include;../../third_party/libpng/windows/include;../../third_party/zlib/windows/include;../../third_party/libtiff/windows/include;../../third_party/mupdf/windows/include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>../../third_party/libjpeg/windows/include;../../third_party/libnsbmp/windows/include;../../third_party/libpng/windows/include;../../third_party/zlib/windows/include;../../third_party/libtiff/windows/include;../../third_party/mupdf/windows/include;../../third_party/pdflib/windows/include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
......@@ -192,7 +194,7 @@ copy $(ProjectDir)..\*.h $(ProjectDir)..\..\release\include\imgfmt\</Command>
<GenerateDebugInformation>true</GenerateDebugInformation>
<EnableUAC>false</EnableUAC>
<ModuleDefinitionFile>HGImgFmt.def</ModuleDefinitionFile>
<AdditionalDependencies>../../release/lib/windows/x64/HGBase.lib;../../third_party/libjpeg/windows/lib/x64/jpeg.lib;../../third_party/libnsbmp/windows/lib/x64/libnsbmp.lib;../../third_party/libpng/windows/lib/x64/libpng16.lib;../../third_party/zlib/windows/lib/x64/zlib.lib;../../third_party/libtiff/windows/lib/x64/tiff.lib;../../third_party/mupdf/windows/lib/x64/libmupdf.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalDependencies>../../release/lib/windows/x64/HGBase.lib;../../third_party/libjpeg/windows/lib/x64/jpeg.lib;../../third_party/libnsbmp/windows/lib/x64/libnsbmp.lib;../../third_party/libpng/windows/lib/x64/libpng16.lib;../../third_party/zlib/windows/lib/x64/zlib.lib;../../third_party/libtiff/windows/lib/x64/tiff.lib;../../third_party/mupdf/windows/lib/x64/libmupdf.lib;../../third_party/pdflib/windows/lib/x64/pdflib.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
<PostBuildEvent>
<Command>copy $(OutDir)HGImgFmt.lib $(ProjectDir)..\..\release\lib\windows\x64\
......
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment