fix GetInfo

This commit is contained in:
Kulikova Svetlana
2022-03-11 12:32:46 +03:00
parent a18d19b6f7
commit 328395dfea
15 changed files with 161 additions and 191 deletions

View File

@ -23,7 +23,6 @@
"_Open", "_Open",
"_Close", "_Close",
"_GetErrorCode", "_GetErrorCode",
"_GetSize",
"_GetInfo", "_GetInfo",
"_GetPixmap", "_GetPixmap",
"_GetGlyphs", "_GetGlyphs",

View File

@ -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);
} }

View File

@ -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);

View File

@ -110,7 +110,7 @@ public:
{ {
return pReader->GetStructure(); return pReader->GetStructure();
} }
BYTE* GetInfo() std::wstring GetInfo()
{ {
return pReader->GetInfo(); return pReader->GetInfo();
} }

View File

@ -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;

View File

@ -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)
{ {

View File

@ -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);

View File

@ -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

View File

@ -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();

View File

@ -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)

View File

@ -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();

View File

@ -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();
} }

View File

@ -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);

View File

@ -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;
} }
} }

View File

@ -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