mirror of
https://github.com/ONLYOFFICE/core.git
synced 2026-04-07 13:55:33 +08:00
fix GetInfo
This commit is contained in:
@ -23,7 +23,6 @@
|
|||||||
"_Open",
|
"_Open",
|
||||||
"_Close",
|
"_Close",
|
||||||
"_GetErrorCode",
|
"_GetErrorCode",
|
||||||
"_GetSize",
|
|
||||||
"_GetInfo",
|
"_GetInfo",
|
||||||
"_GetPixmap",
|
"_GetPixmap",
|
||||||
"_GetGlyphs",
|
"_GetGlyphs",
|
||||||
|
|||||||
@ -38,10 +38,10 @@
|
|||||||
return self["AscViewer"]["baseUrl"] + name;
|
return self["AscViewer"]["baseUrl"] + name;
|
||||||
return name;
|
return name;
|
||||||
}
|
}
|
||||||
|
|
||||||
var FS = undefined;
|
var FS = undefined;
|
||||||
|
|
||||||
//desktop_fetch
|
//desktop_fetch
|
||||||
|
|
||||||
//polyfill
|
//polyfill
|
||||||
|
|
||||||
@ -141,48 +141,37 @@
|
|||||||
if (!this.nativeFile)
|
if (!this.nativeFile)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
var _size = Module["_GetSize"](this.nativeFile);
|
var _info = Module["_GetInfo"](this.nativeFile);
|
||||||
if (!_size)
|
if (_info == 0)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
var _pages = Module["HEAP32"][_size >> 2];
|
var lenArray = new Int32Array(Module["HEAP8"].buffer, _info, 4);
|
||||||
var _buffer = new Int32Array(Module["HEAP8"].buffer, _size, 1 + 3 * _pages);
|
if (lenArray == null)
|
||||||
|
return false;
|
||||||
|
|
||||||
var _cur = 1;
|
var len = lenArray[0];
|
||||||
|
len -= 4;
|
||||||
|
if (len <= 0)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
var buffer = new Uint8Array(Module["HEAP8"].buffer, _info + 4, len);
|
||||||
|
var reader = new CBinaryReader(buffer, 0, len);
|
||||||
|
|
||||||
|
var _pages = reader.readInt();
|
||||||
for (var i = 0; i < _pages; i++)
|
for (var i = 0; i < _pages; i++)
|
||||||
{
|
{
|
||||||
this.pages.push({
|
var rec = {};
|
||||||
"W" : _buffer[_cur++],
|
rec["W"] = reader.readInt();
|
||||||
"H" : _buffer[_cur++],
|
rec["H"] = reader.readInt();
|
||||||
"Dpi" : _buffer[_cur++],
|
rec["Dpi"] = reader.readInt();
|
||||||
fonts : [],
|
rec.fonts = [];
|
||||||
text : null
|
rec.text = null;
|
||||||
});
|
this.pages.push(rec);
|
||||||
}
|
|
||||||
Module["_free"](_size);
|
|
||||||
|
|
||||||
var _info = Module["_GetInfo"](this.nativeFile);
|
|
||||||
if (_info)
|
|
||||||
{
|
|
||||||
var lenArray = new Int32Array(Module["HEAP8"].buffer, _info, 4);
|
|
||||||
if (lenArray)
|
|
||||||
{
|
|
||||||
var len = lenArray[0];
|
|
||||||
len -= 4;
|
|
||||||
if (len > 0)
|
|
||||||
{
|
|
||||||
var buffer = new Uint8Array(Module["HEAP8"].buffer, _info + 4, len);
|
|
||||||
var reader = new CBinaryReader(buffer, 0, len);
|
|
||||||
|
|
||||||
while (reader.isValid())
|
|
||||||
{
|
|
||||||
this.info = reader.readString();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Module["_free"](_info);
|
|
||||||
}
|
}
|
||||||
|
var json_info = reader.readString();
|
||||||
|
this.info = JSON.parse(json_info);
|
||||||
|
|
||||||
|
Module["_free"](_info);
|
||||||
return this.pages.length > 0;
|
return this.pages.length > 0;
|
||||||
};
|
};
|
||||||
CFile.prototype["close"] = function()
|
CFile.prototype["close"] = function()
|
||||||
@ -213,12 +202,12 @@
|
|||||||
self.drawingFileCurrentPageIndex = pageIndex;
|
self.drawingFileCurrentPageIndex = pageIndex;
|
||||||
var retValue = Module["_GetPixmap"](this.nativeFile, pageIndex, width, height, backgroundColor === undefined ? 0xFFFFFF : backgroundColor);
|
var retValue = Module["_GetPixmap"](this.nativeFile, pageIndex, width, height, backgroundColor === undefined ? 0xFFFFFF : backgroundColor);
|
||||||
self.drawingFileCurrentPageIndex = -1;
|
self.drawingFileCurrentPageIndex = -1;
|
||||||
|
|
||||||
if (this.pages[pageIndex].fonts.length > 0)
|
if (this.pages[pageIndex].fonts.length > 0)
|
||||||
{
|
{
|
||||||
// ждем загрузки шрифтов для этой страницы
|
// ждем загрузки шрифтов для этой страницы
|
||||||
Module["_free"](retValue);
|
Module["_free"](retValue);
|
||||||
retValue = null;
|
retValue = null;
|
||||||
}
|
}
|
||||||
return retValue;
|
return retValue;
|
||||||
};
|
};
|
||||||
@ -375,7 +364,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
self["AscViewer"]["CheckStreamId"] = function(data, status) {
|
self["AscViewer"]["CheckStreamId"] = function(data, status) {
|
||||||
var lenArray = new Int32Array(Module["HEAP8"].buffer, data, 4);
|
var lenArray = new Int32Array(Module["HEAP8"].buffer, data, 4);
|
||||||
var len = lenArray[0];
|
var len = lenArray[0];
|
||||||
len -= 4;
|
len -= 4;
|
||||||
|
|
||||||
@ -402,11 +391,11 @@
|
|||||||
{
|
{
|
||||||
self.fontStreams[fileId] = self.fontStreams[fileId] || {};
|
self.fontStreams[fileId] = self.fontStreams[fileId] || {};
|
||||||
self.fontStreams[fileId].pages = self.fontStreams[fileId].pages || [];
|
self.fontStreams[fileId].pages = self.fontStreams[fileId].pages || [];
|
||||||
addToArrayAsDictionary(self.fontStreams[fileId].pages, self.drawingFileCurrentPageIndex);
|
addToArrayAsDictionary(self.fontStreams[fileId].pages, self.drawingFileCurrentPageIndex);
|
||||||
|
|
||||||
if (self.drawingFile)
|
if (self.drawingFile)
|
||||||
{
|
{
|
||||||
addToArrayAsDictionary(self.drawingFile.pages[self.drawingFileCurrentPageIndex].fonts, fileId);
|
addToArrayAsDictionary(self.drawingFile.pages[self.drawingFileCurrentPageIndex].fonts, fileId);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (fileStatus != 2)
|
if (fileStatus != 2)
|
||||||
@ -447,10 +436,10 @@
|
|||||||
|
|
||||||
var memoryBuffer = fileId.toUtf8();
|
var memoryBuffer = fileId.toUtf8();
|
||||||
var pointer = Module["_malloc"](memoryBuffer.length);
|
var pointer = Module["_malloc"](memoryBuffer.length);
|
||||||
Module.HEAP8.set(memoryBuffer, pointer);
|
Module.HEAP8.set(memoryBuffer, pointer);
|
||||||
Module["HEAP8"][status] = (fileStatus == 0) ? 1 : 0;
|
Module["HEAP8"][status] = (fileStatus == 0) ? 1 : 0;
|
||||||
return pointer;
|
return pointer;
|
||||||
};
|
};
|
||||||
|
|
||||||
function fontToMemory(file, isCheck)
|
function fontToMemory(file, isCheck)
|
||||||
{
|
{
|
||||||
@ -468,7 +457,7 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var stream_index = file.GetStreamIndex();
|
var stream_index = file.GetStreamIndex();
|
||||||
var streams = AscFonts.getFontStreams();
|
var streams = AscFonts.getFontStreams();
|
||||||
|
|
||||||
var stream = AscFonts.getFontStream(stream_index);
|
var stream = AscFonts.getFontStream(stream_index);
|
||||||
@ -481,7 +470,7 @@
|
|||||||
|
|
||||||
Module["_SetFontBinary"](idPointer, streamPointer, stream.size);
|
Module["_SetFontBinary"](idPointer, streamPointer, stream.size);
|
||||||
|
|
||||||
Module["_free"](streamPointer);
|
Module["_free"](streamPointer);
|
||||||
Module["_free"](idPointer);
|
Module["_free"](idPointer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -5,6 +5,7 @@
|
|||||||
#include "../../../../../common/Base64.h"
|
#include "../../../../../common/Base64.h"
|
||||||
#include "../../../../../common/File.h"
|
#include "../../../../../common/File.h"
|
||||||
#include "drawingfile.h"
|
#include "drawingfile.h"
|
||||||
|
#include "serialize.h"
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
#define WASM_EXPORT __declspec(dllexport)
|
#define WASM_EXPORT __declspec(dllexport)
|
||||||
@ -102,27 +103,31 @@ WASM_EXPORT void Close (CGraphicsFileDrawing* pGraphics)
|
|||||||
delete pGraphics;
|
delete pGraphics;
|
||||||
NSFonts::NSApplicationFontStream::SetGlobalMemoryStorage(NULL);
|
NSFonts::NSApplicationFontStream::SetGlobalMemoryStorage(NULL);
|
||||||
}
|
}
|
||||||
WASM_EXPORT int* GetSize (CGraphicsFileDrawing* pGraphics)
|
WASM_EXPORT BYTE* GetInfo (CGraphicsFileDrawing* pGraphics)
|
||||||
{
|
{
|
||||||
|
NSWasm::CData oRes;
|
||||||
|
oRes.SkipLen();
|
||||||
|
|
||||||
int pages_count = pGraphics->GetPagesCount();
|
int pages_count = pGraphics->GetPagesCount();
|
||||||
int* buffer = new int[pages_count * 3 + 1];
|
oRes.AddInt(pages_count);
|
||||||
int buffer_index = 0;
|
|
||||||
buffer[buffer_index++] = pages_count;
|
|
||||||
for (int page = 0; page < pages_count; ++page)
|
for (int page = 0; page < pages_count; ++page)
|
||||||
{
|
{
|
||||||
int nW = 0;
|
int nW = 0;
|
||||||
int nH = 0;
|
int nH = 0;
|
||||||
int nDpi = 0;
|
int nDpi = 0;
|
||||||
pGraphics->GetPageInfo(page, nW, nH, nDpi);
|
pGraphics->GetPageInfo(page, nW, nH, nDpi);
|
||||||
buffer[buffer_index++] = nW;
|
oRes.AddInt(nW);
|
||||||
buffer[buffer_index++] = nH;
|
oRes.AddInt(nH);
|
||||||
buffer[buffer_index++] = nDpi;
|
oRes.AddInt(nDpi);
|
||||||
}
|
}
|
||||||
return buffer;
|
std::wstring wsInfo = pGraphics->GetInfo();
|
||||||
}
|
std::string sInfo = U_TO_UTF8(wsInfo);
|
||||||
WASM_EXPORT BYTE* GetInfo (CGraphicsFileDrawing* pGraphics)
|
oRes.WriteString((BYTE*)sInfo.c_str(), sInfo.length());
|
||||||
{
|
|
||||||
return pGraphics->GetInfo();
|
oRes.WriteLen();
|
||||||
|
BYTE* bRes = oRes.GetBuffer();
|
||||||
|
oRes.ClearWithoutAttack();
|
||||||
|
return bRes;
|
||||||
}
|
}
|
||||||
WASM_EXPORT BYTE* GetPixmap(CGraphicsFileDrawing* pGraphics, int nPageIndex, int nRasterW, int nRasterH, int nBackgroundColor)
|
WASM_EXPORT BYTE* GetPixmap(CGraphicsFileDrawing* pGraphics, int nPageIndex, int nRasterW, int nRasterH, int nBackgroundColor)
|
||||||
{
|
{
|
||||||
@ -187,12 +192,14 @@ int main()
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
int* size = GetSize(test);
|
BYTE* info = GetInfo(test);
|
||||||
int pages_count = *size;
|
DWORD nLength = GetLength(info);
|
||||||
|
nLength -= 4;
|
||||||
|
int pages_count = GetLength(info + 4);
|
||||||
int test_page = 0;
|
int test_page = 0;
|
||||||
int width = size[test_page * 3 + 1];
|
int width = GetLength(info + test_page * 12 + 8);
|
||||||
int height = size[test_page * 3 + 2];
|
int height = GetLength(info + test_page * 12 + 12);
|
||||||
std::cout << "Page " << test_page << " width " << width << " height " << height << " dpi " << size[test_page * 3 + 3] << std::endl;
|
std::cout << "Page " << test_page << " width " << width << " height " << height << " dpi " << GetLength(info + test_page * 12 + 16) << std::endl;
|
||||||
|
|
||||||
BYTE* res = NULL;
|
BYTE* res = NULL;
|
||||||
if (pages_count > 0)
|
if (pages_count > 0)
|
||||||
@ -207,9 +214,8 @@ int main()
|
|||||||
resFrame->SaveFile(NSFile::GetProcessDirectory() + L"/res.png", _CXIMAGE_FORMAT_PNG);
|
resFrame->SaveFile(NSFile::GetProcessDirectory() + L"/res.png", _CXIMAGE_FORMAT_PNG);
|
||||||
resFrame->ClearNoAttack();
|
resFrame->ClearNoAttack();
|
||||||
|
|
||||||
BYTE* info = GetInfo(test);
|
nLength = GetLength(info + pages_count * 12 + 8);
|
||||||
DWORD nLength = GetLength(info + 4);
|
std::cout << "json "<< std::string((char*)(info + pages_count * 12 + 12), nLength);
|
||||||
std::cout << "json "<< std::string((char*)(info + 8), nLength);
|
|
||||||
|
|
||||||
std::cout << std::endl;
|
std::cout << std::endl;
|
||||||
BYTE* pLinks = GetLinks(test, test_page);
|
BYTE* pLinks = GetLinks(test, test_page);
|
||||||
@ -268,7 +274,6 @@ int main()
|
|||||||
RELEASEARRAYOBJECTS(pPdfData);
|
RELEASEARRAYOBJECTS(pPdfData);
|
||||||
RELEASEARRAYOBJECTS(pLinks);
|
RELEASEARRAYOBJECTS(pLinks);
|
||||||
RELEASEARRAYOBJECTS(pStructure);
|
RELEASEARRAYOBJECTS(pStructure);
|
||||||
RELEASEARRAYOBJECTS(size);
|
|
||||||
RELEASEARRAYOBJECTS(info);
|
RELEASEARRAYOBJECTS(info);
|
||||||
RELEASEARRAYOBJECTS(res);
|
RELEASEARRAYOBJECTS(res);
|
||||||
RELEASEOBJECT(resFrame);
|
RELEASEOBJECT(resFrame);
|
||||||
|
|||||||
@ -110,7 +110,7 @@ public:
|
|||||||
{
|
{
|
||||||
return pReader->GetStructure();
|
return pReader->GetStructure();
|
||||||
}
|
}
|
||||||
BYTE* GetInfo()
|
std::wstring GetInfo()
|
||||||
{
|
{
|
||||||
return pReader->GetInfo();
|
return pReader->GetInfo();
|
||||||
}
|
}
|
||||||
|
|||||||
@ -85,7 +85,7 @@ public:
|
|||||||
bool bIsDarkMode = false);
|
bool bIsDarkMode = false);
|
||||||
|
|
||||||
// Common methods for viewer
|
// Common methods for viewer
|
||||||
virtual unsigned char* GetInfo() = 0;
|
virtual std::wstring GetInfo() = 0;
|
||||||
#ifdef BUILDING_WASM_MODULE
|
#ifdef BUILDING_WASM_MODULE
|
||||||
virtual unsigned char* GetStructure() = 0;
|
virtual unsigned char* GetStructure() = 0;
|
||||||
virtual unsigned char* GetLinks(int nPageIndex) = 0;
|
virtual unsigned char* GetLinks(int nPageIndex) = 0;
|
||||||
|
|||||||
@ -98,11 +98,11 @@ void CDjVuFile::DrawPageOnRenderer(IRenderer* pRenderer, int nPageIndex, bool* p
|
|||||||
if (m_pImplementation)
|
if (m_pImplementation)
|
||||||
m_pImplementation->DrawPageOnRenderer(pRenderer, nPageIndex, pBreak);
|
m_pImplementation->DrawPageOnRenderer(pRenderer, nPageIndex, pBreak);
|
||||||
}
|
}
|
||||||
BYTE* CDjVuFile::GetInfo()
|
std::wstring CDjVuFile::GetInfo()
|
||||||
{
|
{
|
||||||
if (m_pImplementation)
|
if (m_pImplementation)
|
||||||
return m_pImplementation->GetInfo();
|
return m_pImplementation->GetInfo();
|
||||||
return NULL;
|
return L"";
|
||||||
}
|
}
|
||||||
void CDjVuFile::ConvertToPdf(const std::wstring& wsDstPath)
|
void CDjVuFile::ConvertToPdf(const std::wstring& wsDstPath)
|
||||||
{
|
{
|
||||||
|
|||||||
@ -70,7 +70,7 @@ public:
|
|||||||
virtual int GetPagesCount();
|
virtual int GetPagesCount();
|
||||||
virtual void GetPageInfo(int nPageIndex, double* pdWidth, double* pdHeight, double* pdDpiX, double* pdDpiY);
|
virtual void GetPageInfo(int nPageIndex, double* pdWidth, double* pdHeight, double* pdDpiX, double* pdDpiY);
|
||||||
virtual void DrawPageOnRenderer(IRenderer* pRenderer, int nPageIndex, bool* pBreak);
|
virtual void DrawPageOnRenderer(IRenderer* pRenderer, int nPageIndex, bool* pBreak);
|
||||||
virtual BYTE* GetInfo();
|
virtual std::wstring GetInfo();
|
||||||
|
|
||||||
void ConvertToPdf(const std::wstring& path);
|
void ConvertToPdf(const std::wstring& path);
|
||||||
|
|
||||||
|
|||||||
@ -258,33 +258,25 @@ void CDjVuFileImplementation::ConvertToPdf(const std::wstring& wsDstPath)
|
|||||||
|
|
||||||
oPdf.SaveToFile(wsDstPath);
|
oPdf.SaveToFile(wsDstPath);
|
||||||
}
|
}
|
||||||
BYTE* CDjVuFileImplementation::GetInfo()
|
std::wstring CDjVuFileImplementation::GetInfo()
|
||||||
{
|
{
|
||||||
NSWasm::CData oRes;
|
std::wstring sRes = L"{";
|
||||||
oRes.SkipLen();
|
|
||||||
|
|
||||||
std::string sRes = "{";
|
|
||||||
|
|
||||||
double nW = 0;
|
double nW = 0;
|
||||||
double nH = 0;
|
double nH = 0;
|
||||||
double nDpi = 0;
|
double nDpi = 0;
|
||||||
GetPageInfo(0, &nW, &nH, &nDpi, &nDpi);
|
GetPageInfo(0, &nW, &nH, &nDpi, &nDpi);
|
||||||
sRes += "\"PageSize\":\"";
|
sRes += L"\"PageSize\":\"";
|
||||||
std::string version = std::to_string(nW);
|
std::wstring size = std::to_wstring(nW);
|
||||||
sRes += version.substr(0, version.length() - 4);
|
sRes += size.substr(0, size.length() - 4);
|
||||||
sRes += "x";
|
sRes += L"x";
|
||||||
version = std::to_string(nH);
|
size = std::to_wstring(nH);
|
||||||
sRes += version.substr(0, version.length() - 4);
|
sRes += size.substr(0, size.length() - 4);
|
||||||
sRes += "\",\"NumberOfPages\":";
|
sRes += L"\",\"NumberOfPages\":";
|
||||||
sRes += std::to_string(GetPagesCount());
|
sRes += std::to_wstring(GetPagesCount());
|
||||||
sRes += "}";
|
sRes += L"}";
|
||||||
|
|
||||||
oRes.WriteString((BYTE*)sRes.c_str(), sRes.length());
|
return sRes;
|
||||||
|
|
||||||
oRes.WriteLen();
|
|
||||||
BYTE* bRes = oRes.GetBuffer();
|
|
||||||
oRes.ClearWithoutAttack();
|
|
||||||
return bRes;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef BUILDING_WASM_MODULE
|
#ifdef BUILDING_WASM_MODULE
|
||||||
|
|||||||
@ -77,7 +77,7 @@ public:
|
|||||||
void GetPageInfo(int nPageIndex, double* pdWidth, double* pdHeight, double* pdDpiX, double* pdDpiY) const;
|
void GetPageInfo(int nPageIndex, double* pdWidth, double* pdHeight, double* pdDpiX, double* pdDpiY) const;
|
||||||
void DrawPageOnRenderer(IRenderer* pRenderer, int nPageIndex, bool* pBreak);
|
void DrawPageOnRenderer(IRenderer* pRenderer, int nPageIndex, bool* pBreak);
|
||||||
void ConvertToPdf(const std::wstring& wsDstPath);
|
void ConvertToPdf(const std::wstring& wsDstPath);
|
||||||
BYTE* GetInfo();
|
std::wstring GetInfo();
|
||||||
|
|
||||||
#ifdef BUILDING_WASM_MODULE
|
#ifdef BUILDING_WASM_MODULE
|
||||||
BYTE* GetStructure();
|
BYTE* GetStructure();
|
||||||
|
|||||||
@ -47,6 +47,7 @@
|
|||||||
#include "lib/xpdf/GlobalParams.h"
|
#include "lib/xpdf/GlobalParams.h"
|
||||||
#include "lib/xpdf/ErrorCodes.h"
|
#include "lib/xpdf/ErrorCodes.h"
|
||||||
#include "lib/xpdf/ImageOutputDev.h"
|
#include "lib/xpdf/ImageOutputDev.h"
|
||||||
|
#include "lib/xpdf/TextString.h"
|
||||||
#include "Src/RendererOutputDev.h"
|
#include "Src/RendererOutputDev.h"
|
||||||
|
|
||||||
#ifdef BUILDING_WASM_MODULE
|
#ifdef BUILDING_WASM_MODULE
|
||||||
@ -57,7 +58,6 @@
|
|||||||
#include "lib/goo/GList.h"
|
#include "lib/goo/GList.h"
|
||||||
#include "../DesktopEditor/common/StringExt.h"
|
#include "../DesktopEditor/common/StringExt.h"
|
||||||
#include <vector>
|
#include <vector>
|
||||||
//#include <fstream>
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
namespace PdfReader
|
namespace PdfReader
|
||||||
@ -435,94 +435,86 @@ return 0;
|
|||||||
// return wsXml;
|
// return wsXml;
|
||||||
return L"";
|
return L"";
|
||||||
}
|
}
|
||||||
#define DICT_LOOKUP(info, obj1, name) \
|
#define DICT_LOOKUP(sName, wsName) \
|
||||||
if (info.dictLookup(name, &obj1)->isString())\
|
if (info.dictLookup(sName, &obj1)->isString())\
|
||||||
{\
|
{\
|
||||||
char* str = obj1.getString()->getCString();\
|
TextString* s = new TextString(obj1.getString());\
|
||||||
int length = obj1.getString()->getLength();\
|
sRes += L"\"";\
|
||||||
if (str && length > 0)\
|
sRes += wsName;\
|
||||||
{\
|
sRes += L"\":\"";\
|
||||||
sRes += "\"";\
|
sRes += NSStringExt::CConverter::GetUnicodeFromUTF32(s->getUnicode(), s->getLength());\
|
||||||
sRes += name;\
|
sRes += L"\",";\
|
||||||
sRes += "\":\"";\
|
delete s;\
|
||||||
sRes += std::string(str, length);\
|
|
||||||
sRes += "\",";\
|
|
||||||
}\
|
|
||||||
}\
|
}\
|
||||||
|
|
||||||
#define DICT_LOOKUP_DATE(info, obj1, name) \
|
#define DICT_LOOKUP_DATE(sName, wsName) \
|
||||||
if (info.dictLookup(name, &obj1)->isString())\
|
if (info.dictLookup(sName, &obj1)->isString())\
|
||||||
{\
|
{\
|
||||||
char* str = obj1.getString()->getCString();\
|
char* str = obj1.getString()->getCString();\
|
||||||
int length = obj1.getString()->getLength();\
|
int length = obj1.getString()->getLength();\
|
||||||
if (str && length > 21)\
|
if (str && length > 21)\
|
||||||
{\
|
{\
|
||||||
std::string sNoDate = std::string(str, length);\
|
TextString* s = new TextString(obj1.getString());\
|
||||||
std::string sDate = sNoDate.substr(2, 4) + '-' + sNoDate.substr(6, 2) + '-' + sNoDate.substr(8, 2) + 'T' +\
|
std::wstring sNoDate = NSStringExt::CConverter::GetUnicodeFromUTF32(s->getUnicode(), s->getLength());\
|
||||||
sNoDate.substr(10, 2) + ':' + sNoDate.substr(12, 2) + ':' + sNoDate.substr(14, 2) + ".000+" +\
|
std::wstring sDate = sNoDate.substr(2, 4) + L'-' + sNoDate.substr(6, 2) + L'-' + sNoDate.substr(8, 2) + L'T' +\
|
||||||
sNoDate.substr(17, 2) + ':' + sNoDate.substr(20, 2);\
|
sNoDate.substr(10, 2) + L':' + sNoDate.substr(12, 2) + L':' + sNoDate.substr(14, 2) + L".000+" +\
|
||||||
sRes += "\"";\
|
sNoDate.substr(17, 2) + L':' + sNoDate.substr(20, 2);\
|
||||||
sRes += name;\
|
sRes += L"\"";\
|
||||||
sRes += "\":\"";\
|
sRes += wsName;\
|
||||||
|
sRes += L"\":\"";\
|
||||||
sRes += sDate;\
|
sRes += sDate;\
|
||||||
sRes += "\",";\
|
sRes += L"\",";\
|
||||||
|
delete s;\
|
||||||
}\
|
}\
|
||||||
}\
|
}\
|
||||||
|
|
||||||
BYTE* CPdfReader::GetInfo()
|
std::wstring CPdfReader::GetInfo()
|
||||||
{
|
{
|
||||||
if (!m_pInternal->m_pPDFDocument)
|
if (!m_pInternal->m_pPDFDocument)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
std::string sRes = "{";
|
std::wstring sRes = L"{";
|
||||||
|
|
||||||
Object info, obj1;
|
Object info, obj1;
|
||||||
m_pInternal->m_pPDFDocument->getDocInfo(&info);
|
m_pInternal->m_pPDFDocument->getDocInfo(&info);
|
||||||
if (info.isDict())
|
if (info.isDict())
|
||||||
{
|
{
|
||||||
DICT_LOOKUP(info, obj1, "Title");
|
DICT_LOOKUP("Title", L"Title");
|
||||||
DICT_LOOKUP(info, obj1, "Author");
|
DICT_LOOKUP("Author", L"Author");
|
||||||
DICT_LOOKUP(info, obj1, "Subject");
|
DICT_LOOKUP("Subject", L"Subject");
|
||||||
DICT_LOOKUP(info, obj1, "Keywords");
|
DICT_LOOKUP("Keywords", L"Keywords");
|
||||||
DICT_LOOKUP(info, obj1, "Creator");
|
DICT_LOOKUP("Creator", L"Creator");
|
||||||
DICT_LOOKUP(info, obj1, "Producer");
|
DICT_LOOKUP("Producer", L"Producer");
|
||||||
|
|
||||||
DICT_LOOKUP_DATE(info, obj1, "CreationDate");
|
DICT_LOOKUP_DATE("CreationDate", L"CreationDate");
|
||||||
DICT_LOOKUP_DATE(info, obj1, "ModDate");
|
DICT_LOOKUP_DATE("ModDate", L"ModDate");
|
||||||
}
|
}
|
||||||
|
|
||||||
info.free();
|
info.free();
|
||||||
obj1.free();
|
obj1.free();
|
||||||
|
|
||||||
std::string version = std::to_string(GetVersion());
|
std::wstring version = std::to_wstring(GetVersion());
|
||||||
sRes += "\"Version\":";
|
sRes += L"\"Version\":";
|
||||||
sRes += version.substr(0, version.length() - 5);
|
sRes += version.substr(0, version.length() - 5);
|
||||||
double nW = 0;
|
double nW = 0;
|
||||||
double nH = 0;
|
double nH = 0;
|
||||||
double nDpi = 0;
|
double nDpi = 0;
|
||||||
GetPageInfo(0, &nW, &nH, &nDpi, &nDpi);
|
GetPageInfo(0, &nW, &nH, &nDpi, &nDpi);
|
||||||
sRes += ",\"PageSize\":\"";
|
sRes += L",\"PageSize\":\"";
|
||||||
version = std::to_string(nW);
|
version = std::to_wstring(nW);
|
||||||
sRes += version.substr(0, version.length() - 4);
|
sRes += version.substr(0, version.length() - 4);
|
||||||
sRes += "x";
|
sRes += L"x";
|
||||||
version = std::to_string(nH);
|
version = std::to_wstring(nH);
|
||||||
sRes += version.substr(0, version.length() - 4);
|
sRes += version.substr(0, version.length() - 4);
|
||||||
sRes += "\",\"NumberOfPages\":";
|
sRes += L"\",\"NumberOfPages\":";
|
||||||
sRes += std::to_string(GetPagesCount());
|
sRes += std::to_wstring(GetPagesCount());
|
||||||
sRes += ",\"FastWebView\":";
|
sRes += L",\"FastWebView\":";
|
||||||
sRes += m_pInternal->m_pPDFDocument->isLinearized() ? "true" : "false";
|
sRes += m_pInternal->m_pPDFDocument->isLinearized() ? L"true" : L"false";
|
||||||
sRes += ",\"Tagged\":";
|
sRes += L",\"Tagged\":";
|
||||||
sRes += m_pInternal->m_pPDFDocument->getStructTreeRoot()->isDict() ? "true" : "false";
|
sRes += m_pInternal->m_pPDFDocument->getStructTreeRoot()->isDict() ? L"true" : L"false";
|
||||||
sRes += "}";
|
sRes += L"}";
|
||||||
|
|
||||||
NSWasm::CData oRes;
|
return sRes;
|
||||||
oRes.SkipLen();
|
|
||||||
oRes.WriteString((BYTE*)sRes.c_str(), sRes.length());
|
|
||||||
oRes.WriteLen();
|
|
||||||
|
|
||||||
BYTE* bRes = oRes.GetBuffer();
|
|
||||||
oRes.ClearWithoutAttack();
|
|
||||||
return bRes;
|
|
||||||
}
|
}
|
||||||
#ifdef BUILDING_WASM_MODULE
|
#ifdef BUILDING_WASM_MODULE
|
||||||
void getBookmars(PDFDoc* pdfDoc, OutlineItem* pOutlineItem, NSWasm::CData& out, int level)
|
void getBookmars(PDFDoc* pdfDoc, OutlineItem* pOutlineItem, NSWasm::CData& out, int level)
|
||||||
|
|||||||
@ -84,7 +84,7 @@ namespace PdfReader
|
|||||||
virtual int GetPagesCount();
|
virtual int GetPagesCount();
|
||||||
virtual void GetPageInfo(int nPageIndex, double* pdWidth, double* pdHeight, double* pdDpiX, double* pdDpiY);
|
virtual void GetPageInfo(int nPageIndex, double* pdWidth, double* pdHeight, double* pdDpiX, double* pdDpiY);
|
||||||
virtual void DrawPageOnRenderer(IRenderer* pRenderer, int nPageIndex, bool* pBreak);
|
virtual void DrawPageOnRenderer(IRenderer* pRenderer, int nPageIndex, bool* pBreak);
|
||||||
virtual BYTE* GetInfo();
|
virtual std::wstring GetInfo();
|
||||||
|
|
||||||
int GetError();
|
int GetError();
|
||||||
double GetVersion();
|
double GetVersion();
|
||||||
|
|||||||
@ -180,7 +180,7 @@ void CXpsFile::DrawPageOnRenderer(IRenderer* pRenderer, int nPageIndex, bool* pB
|
|||||||
|
|
||||||
m_pInternal->m_pDocument->DrawPage(nPageIndex, pRenderer, pBreak);
|
m_pInternal->m_pDocument->DrawPage(nPageIndex, pRenderer, pBreak);
|
||||||
}
|
}
|
||||||
BYTE* CXpsFile::GetInfo()
|
std::wstring CXpsFile::GetInfo()
|
||||||
{
|
{
|
||||||
return m_pInternal->m_pDocument->GetInfo();
|
return m_pInternal->m_pDocument->GetInfo();
|
||||||
}
|
}
|
||||||
|
|||||||
@ -65,7 +65,7 @@ public:
|
|||||||
virtual int GetPagesCount();
|
virtual int GetPagesCount();
|
||||||
virtual void GetPageInfo(int nPageIndex, double* pdWidth, double* pdHeight, double* pdDpiX, double* pdDpiY);
|
virtual void GetPageInfo(int nPageIndex, double* pdWidth, double* pdHeight, double* pdDpiX, double* pdDpiY);
|
||||||
virtual void DrawPageOnRenderer(IRenderer* pRenderer, int nPageIndex, bool* pBreak);
|
virtual void DrawPageOnRenderer(IRenderer* pRenderer, int nPageIndex, bool* pBreak);
|
||||||
virtual BYTE* GetInfo();
|
virtual std::wstring GetInfo();
|
||||||
|
|
||||||
#ifndef DISABLE_PDF_CONVERTATION
|
#ifndef DISABLE_PDF_CONVERTATION
|
||||||
void ConvertToPdf(const std::wstring& wsDstPath);
|
void ConvertToPdf(const std::wstring& wsDstPath);
|
||||||
|
|||||||
@ -347,11 +347,10 @@ namespace XPS
|
|||||||
m_mStaticResources.insert(std::pair<std::wstring, CStaticResource*>(wsPath, pStaticResource));
|
m_mStaticResources.insert(std::pair<std::wstring, CStaticResource*>(wsPath, pStaticResource));
|
||||||
return pStaticResource;
|
return pStaticResource;
|
||||||
}
|
}
|
||||||
BYTE* CDocument::GetInfo()
|
std::wstring CDocument::GetInfo()
|
||||||
{
|
{
|
||||||
XmlUtils::CXmlLiteReader oReader;
|
XmlUtils::CXmlLiteReader oReader;
|
||||||
NSWasm::CData oRes;
|
std::wstring sRes = L"{";
|
||||||
oRes.SkipLen();
|
|
||||||
|
|
||||||
if (oReader.FromStringA(m_wsPath->readXml(L"_rels/.rels")) && oReader.ReadNextNode() && L"Relationships" == oReader.GetName())
|
if (oReader.FromStringA(m_wsPath->readXml(L"_rels/.rels")) && oReader.ReadNextNode() && L"Relationships" == oReader.GetName())
|
||||||
{
|
{
|
||||||
@ -376,46 +375,40 @@ namespace XPS
|
|||||||
oReader.Clear();
|
oReader.Clear();
|
||||||
if (oReader.FromStringA(m_wsPath->readXml(wsCoreFile)) && oReader.ReadNextNode() && oReader.GetName() == L"cp:coreProperties")
|
if (oReader.FromStringA(m_wsPath->readXml(wsCoreFile)) && oReader.ReadNextNode() && oReader.GetName() == L"cp:coreProperties")
|
||||||
{
|
{
|
||||||
std::string sRes = "{";
|
|
||||||
while (oReader.ReadNextNode())
|
while (oReader.ReadNextNode())
|
||||||
{
|
{
|
||||||
std::string sName = oReader.GetNameA();
|
std::wstring sName = oReader.GetName();
|
||||||
if (sName == "dc:title")
|
if (sName == L"dc:title")
|
||||||
sName = "Title";
|
sName = L"Title";
|
||||||
else if (sName == "dc:subject")
|
else if (sName == L"dc:subject")
|
||||||
sName = "Subject";
|
sName = L"Subject";
|
||||||
else if (sName == "dc:creator")
|
else if (sName == L"dc:creator")
|
||||||
sName = "Creator";
|
sName = L"Creator";
|
||||||
else if (sName == "dcterms:created")
|
else if (sName == L"dcterms:created")
|
||||||
sName = "CreationDate";
|
sName = L"CreationDate";
|
||||||
else if (sName == "dcterms:modified")
|
else if (sName == L"dcterms:modified")
|
||||||
sName = "ModDate";
|
sName = L"ModDate";
|
||||||
|
|
||||||
sRes += "\"";
|
sRes += L"\"";
|
||||||
sRes += sName;
|
sRes += sName;
|
||||||
sRes += "\":\"";
|
sRes += L"\":\"";
|
||||||
sRes += oReader.GetText2A();
|
sRes += oReader.GetText2();
|
||||||
sRes += "\",";
|
sRes += L"\",";
|
||||||
}
|
}
|
||||||
|
|
||||||
int nW = 0;
|
|
||||||
int nH = 0;
|
|
||||||
GetPageSize(0, nW, nH);
|
|
||||||
sRes += "\"PageSize\":\"";
|
|
||||||
sRes += std::to_string(nW);
|
|
||||||
sRes += "x";
|
|
||||||
sRes += std::to_string(nH);
|
|
||||||
sRes += "\",\"NumberOfPages\":";
|
|
||||||
sRes += std::to_string(GetPageCount());
|
|
||||||
sRes += "}";
|
|
||||||
|
|
||||||
oRes.WriteString((BYTE*)sRes.c_str(), sRes.length());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
oRes.WriteLen();
|
int nW = 0;
|
||||||
BYTE* bRes = oRes.GetBuffer();
|
int nH = 0;
|
||||||
oRes.ClearWithoutAttack();
|
GetPageSize(0, nW, nH);
|
||||||
return bRes;
|
sRes += L"\"PageSize\":\"";
|
||||||
|
sRes += std::to_wstring(nW);
|
||||||
|
sRes += L"x";
|
||||||
|
sRes += std::to_wstring(nH);
|
||||||
|
sRes += L"\",\"NumberOfPages\":";
|
||||||
|
sRes += std::to_wstring(GetPageCount());
|
||||||
|
sRes += L"}";
|
||||||
|
|
||||||
|
return sRes;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -57,7 +57,7 @@ namespace XPS
|
|||||||
void DrawPage(int nPageIndex, IRenderer* pRenderer, bool* pbBreak);
|
void DrawPage(int nPageIndex, IRenderer* pRenderer, bool* pbBreak);
|
||||||
void Close();
|
void Close();
|
||||||
CStaticResource* GetStaticResource(const wchar_t* wsPath);
|
CStaticResource* GetStaticResource(const wchar_t* wsPath);
|
||||||
BYTE* GetInfo();
|
std::wstring GetInfo();
|
||||||
|
|
||||||
#ifdef BUILDING_WASM_MODULE
|
#ifdef BUILDING_WASM_MODULE
|
||||||
struct CDocumentStructure
|
struct CDocumentStructure
|
||||||
|
|||||||
Reference in New Issue
Block a user