Add PdfWriter to drawingfile

This commit is contained in:
Svetlana Kulikova
2025-03-03 19:14:08 +03:00
parent 6e6ffbf604
commit 0796745158
7 changed files with 93 additions and 54 deletions

View File

@ -619,10 +619,7 @@ INCLUDEPATH += \
$$PDF_ROOT_DIR/lib/splash \
$$PDF_ROOT_DIR/lib
HEADERS += \
$$PDF_ROOT_DIR/lib/aconf.h \
$$$files($$PDF_ROOT_DIR/lib/*.h)
HEADERS += $$files($$PDF_ROOT_DIR/lib/*.h, true)
SOURCES += $$files($$PDF_ROOT_DIR/lib/*.c, true)
SOURCES += $$files($$PDF_ROOT_DIR/lib/*.cc, true)
@ -644,9 +641,7 @@ SOURCES += \
$$PDF_ROOT_DIR/SrcReader/GfxClip.cpp \
$$PDF_ROOT_DIR/SrcReader/PdfAnnot.cpp \
$$PDF_ROOT_DIR/Resources/BaseFonts.cpp \
$$PDF_ROOT_DIR/Resources/CMapMemory/cmap_memory.cpp \
$$PDF_ROOT_DIR/PdfReader.cpp \
$$PDF_ROOT_DIR/PdfFile.cpp
$$PDF_ROOT_DIR/Resources/CMapMemory/cmap_memory.cpp
HEADERS +=\
$$PDF_ROOT_DIR/Resources/Fontd050000l.h \
@ -670,9 +665,87 @@ HEADERS +=\
$$PDF_ROOT_DIR/SrcReader/MemoryUtils.h \
$$PDF_ROOT_DIR/SrcReader/GfxClip.h \
$$PDF_ROOT_DIR/SrcReader/FontsWasm.h \
$$PDF_ROOT_DIR/SrcReader/PdfAnnot.h \
$$PDF_ROOT_DIR/SrcReader/PdfAnnot.h
DEFINES += CRYPTOPP_DISABLE_ASM
LIBS += -L$$CORE_BUILDS_LIBRARIES_PATH -lCryptoPPLib
# PdfWriter
HEADERS += \
$$PDF_ROOT_DIR/SrcWriter/AcroForm.h \
$$PDF_ROOT_DIR/SrcWriter/Annotation.h \
$$PDF_ROOT_DIR/SrcWriter/Catalog.h \
$$PDF_ROOT_DIR/SrcWriter/Consts.h \
$$PDF_ROOT_DIR/SrcWriter/Destination.h \
$$PDF_ROOT_DIR/SrcWriter/Document.h \
$$PDF_ROOT_DIR/SrcWriter/Encodings.h \
$$PDF_ROOT_DIR/SrcWriter/Encrypt.h \
$$PDF_ROOT_DIR/SrcWriter/EncryptDictionary.h \
$$PDF_ROOT_DIR/SrcWriter/Field.h \
$$PDF_ROOT_DIR/SrcWriter/Font.h \
$$PDF_ROOT_DIR/SrcWriter/Font14.h \
$$PDF_ROOT_DIR/SrcWriter/FontCidTT.h \
$$PDF_ROOT_DIR/SrcWriter/FontTT.h \
$$PDF_ROOT_DIR/SrcWriter/FontTTWriter.h \
$$PDF_ROOT_DIR/SrcWriter/GState.h \
$$PDF_ROOT_DIR/SrcWriter/Image.h \
$$PDF_ROOT_DIR/SrcWriter/Info.h \
$$PDF_ROOT_DIR/SrcWriter/Objects.h \
$$PDF_ROOT_DIR/SrcWriter/Outline.h \
$$PDF_ROOT_DIR/SrcWriter/Pages.h \
$$PDF_ROOT_DIR/SrcWriter/Pattern.h \
$$PDF_ROOT_DIR/SrcWriter/ResourcesDictionary.h \
$$PDF_ROOT_DIR/SrcWriter/Shading.h \
$$PDF_ROOT_DIR/SrcWriter/Streams.h \
$$PDF_ROOT_DIR/SrcWriter/Types.h \
$$PDF_ROOT_DIR/SrcWriter/Utils.h \
$$PDF_ROOT_DIR/SrcWriter/Metadata.h \
$$PDF_ROOT_DIR/SrcWriter/ICCProfile.h \
$$PDF_ROOT_DIR/SrcWriter/States.h
SOURCES += \
$$PDF_ROOT_DIR/SrcWriter/AcroForm.cpp \
$$PDF_ROOT_DIR/SrcWriter/Annotation.cpp \
$$PDF_ROOT_DIR/SrcWriter/Catalog.cpp \
$$PDF_ROOT_DIR/SrcWriter/Destination.cpp \
$$PDF_ROOT_DIR/SrcWriter/Document.cpp \
$$PDF_ROOT_DIR/SrcWriter/Encrypt.cpp \
$$PDF_ROOT_DIR/SrcWriter/EncryptDictionary.cpp \
$$PDF_ROOT_DIR/SrcWriter/Field.cpp \
$$PDF_ROOT_DIR/SrcWriter/Font.cpp \
$$PDF_ROOT_DIR/SrcWriter/Font14.cpp \
$$PDF_ROOT_DIR/SrcWriter/FontCidTT.cpp \
$$PDF_ROOT_DIR/SrcWriter/FontTT.cpp \
$$PDF_ROOT_DIR/SrcWriter/FontTTWriter.cpp \
$$PDF_ROOT_DIR/SrcWriter/GState.cpp \
$$PDF_ROOT_DIR/SrcWriter/Image.cpp \
$$PDF_ROOT_DIR/SrcWriter/Info.cpp \
$$PDF_ROOT_DIR/SrcWriter/Objects.cpp \
$$PDF_ROOT_DIR/SrcWriter/Outline.cpp \
$$PDF_ROOT_DIR/SrcWriter/Pages.cpp \
$$PDF_ROOT_DIR/SrcWriter/Pattern.cpp \
$$PDF_ROOT_DIR/SrcWriter/ResourcesDictionary.cpp \
$$PDF_ROOT_DIR/SrcWriter/Shading.cpp \
$$PDF_ROOT_DIR/SrcWriter/Streams.cpp \
$$PDF_ROOT_DIR/SrcWriter/Utils.cpp \
$$PDF_ROOT_DIR/SrcWriter/Metadata.cpp \
$$PDF_ROOT_DIR/SrcWriter/States.cpp
# PdfFile
HEADERS += \
$$PDF_ROOT_DIR/PdfFile.h \
$$PDF_ROOT_DIR/PdfWriter.h \
$$PDF_ROOT_DIR/PdfReader.h \
$$PDF_ROOT_DIR/PdfFile.h
$$PDF_ROOT_DIR/PdfEditor.h \
$$PDF_ROOT_DIR/OnlineOfficeBinToPdf.h
SOURCES += \
$$PDF_ROOT_DIR/PdfFile.cpp \
$$PDF_ROOT_DIR/PdfWriter.cpp \
$$PDF_ROOT_DIR/PdfReader.cpp \
$$PDF_ROOT_DIR/PdfEditor.cpp \
$$PDF_ROOT_DIR/OnlineOfficeBinToPdf.cpp
# DocxRenderer
DOCX_RENDERER_ROOT_DIR = $$CORE_ROOT_DIR/DocxRenderer
@ -729,7 +802,6 @@ HEADERS += \
../wasm/src/Text.h
SOURCES += \
../wasm/src/pdfwriter.cpp \
../wasm/src/HTMLRendererText.cpp \
../wasm/src/drawingfile.cpp \
../wasm/src/drawingfile_test.cpp

View File

@ -146,9 +146,9 @@ CFile.prototype["isNeedPassword"] = function()
return this._isNeedPassword;
};
CFile.prototype["addPDF"] = function()
CFile.prototype["addPDF"] = function(arrayBuffer, password)
{
return this._addPDF();
return this._addPDF(arrayBuffer, password);
};
// INFO DOCUMENT

View File

@ -127,8 +127,8 @@ CFile.prototype._addPDF = function(buffer, password)
return false;
let data = new Uint8Array(buffer);
let stream = Module["_malloc"](data.length);
Module["HEAP8"].set(data, stream);
let stream2 = Module["_malloc"](data.length);
Module["HEAP8"].set(data, stream2);
let passwordPtr = 0;
if (password)
@ -138,11 +138,11 @@ CFile.prototype._addPDF = function(buffer, password)
Module["HEAP8"].set(passwordBuf, passwordPtr);
}
let bRes = Module["_addPDF"](this.nativeFile, stream, data.length, passwordPtr);
let bRes = Module["_AddPDF"](this.nativeFile, stream2, data.length, passwordPtr);
if (bRes == 1)
this.stream.push(stream);
this.stream.push(stream2);
else
this._free(stream);
Module["_free"](stream2);
if (passwordPtr)
Module["_free"](passwordPtr);

View File

@ -247,14 +247,12 @@ void CDjVuFileImplementation::DrawPageOnRenderer(IRenderer* pRenderer, int nPag
long lRendererType = c_nUnknownRenderer;
pRenderer->get_Type(&lRendererType);
#ifndef BUILDING_WASM_MODULE
if (c_nPDFWriter == lRendererType)
{
XmlUtils::CXmlNode oText = ParseText(pPage);
CreatePdfFrame(pRenderer, pPage, nPageIndex, oText);
}
else
#endif
{
XmlUtils::CXmlNode oText = ParseText(pPage);
CreateFrame(pRenderer, pPage, nPageIndex, oText);

View File

@ -38,33 +38,9 @@
#include "lib/xpdf/PDFDoc.h"
#include "Resources/BaseFonts.h"
#ifndef BUILDING_WASM_MODULE
#include "PdfEditor.h"
#include "OnlineOfficeBinToPdf.h"
#include "SrcWriter/Document.h"
#else
class CPdfEditor
{
public:
int GetError() { return 0; }
void Close() {}
bool EditPage(int nPageIndex, bool bSet = true) { return false; }
bool SplitPage(int nPageIndex) { return false; }
bool DeletePage(int nPageIndex) { return false; }
bool AddPage(int nPageIndex) { return false; }
bool EditAnnot(int nPageIndex, int nID) { return false; }
bool DeleteAnnot(int nID, Object* oAnnots = NULL) { return false; }
bool EditWidgets(IAdvancedCommand* pCommand) { return false; }
int GetPagesCount() { return 0; }
void GetPageInfo(int nPageIndex, double* pdWidth, double* pdHeight, double* pdDpiX, double* pdDpiY) {}
int GetRotate(int nPageIndex) { return 0; }
bool IsEditPage() { return false; }
void ClearPage() {}
void AddShapeXML(const std::string& sXML) {}
void EndMarkedContent() {}
bool IsBase14(const std::wstring& wsFontName, bool& bBold, bool& bItalic, std::wstring& wsFontPath) { return false; }
};
#endif // BUILDING_WASM_MODULE
class CPdfFile_Private
{
@ -130,7 +106,6 @@ void CPdfFile::RotatePage(int nRotate)
// Применение поворота страницы для writer
m_pInternal->pWriter->PageRotate(nRotate);
}
#ifndef BUILDING_WASM_MODULE
bool CPdfFile::EditPdf(const std::wstring& wsDstFile)
{
if (wsDstFile.empty() || !m_pInternal->pReader)
@ -174,6 +149,7 @@ bool CPdfFile::MergePages(const std::wstring& wsPath, const std::wstring& wsPass
if (m_pInternal->pReader->AddFromFile(wsPath, wsPassword))
return m_pInternal->pEditor->MergePages(m_pInternal->pReader->GetLastPDFDocument(), arrPageIndex, unLength);
return false;
}
bool CPdfFile::MovePage(int nPageIndex, int nPos)
{
@ -187,7 +163,6 @@ HRESULT CPdfFile::ChangePassword(const std::wstring& wsPath, const std::wstring&
m_pInternal->pWriter = new CPdfWriter(m_pInternal->pAppFonts, false, this, false);
return _ChangePassword(wsPath, wsPassword, m_pInternal->pReader, m_pInternal->pWriter);
}
#endif // BUILDING_WASM_MODULE
// ------------------------------------------------------------------------
@ -526,26 +501,20 @@ void CPdfFile::AddMetaData(const std::wstring& sMetaName, BYTE* pMetaData, DWORD
}
HRESULT CPdfFile::OnlineWordToPdf(const std::wstring& wsSrcFile, const std::wstring& wsDstFile, CConvertFromBinParams* pParams)
{
#ifndef BUILDING_WASM_MODULE
if (!m_pInternal->pWriter || !NSOnlineOfficeBinToPdf::ConvertBinToPdf(this, wsSrcFile, wsDstFile, false, pParams))
return S_FALSE;
#endif
return S_OK;
}
HRESULT CPdfFile::OnlineWordToPdfFromBinary(const std::wstring& wsSrcFile, const std::wstring& wsDstFile, CConvertFromBinParams* pParams)
{
#ifndef BUILDING_WASM_MODULE
if (!m_pInternal->pWriter || !NSOnlineOfficeBinToPdf::ConvertBinToPdf(this, wsSrcFile, wsDstFile, true, pParams))
return S_FALSE;
#endif
return S_OK;
}
HRESULT CPdfFile::AddToPdfFromBinary(BYTE* pBuffer, unsigned int nLen, CConvertFromBinParams* pParams)
{
#ifndef BUILDING_WASM_MODULE
if (!m_pInternal->pEditor || !NSOnlineOfficeBinToPdf::AddBinToPdf(this, pBuffer, nLen, pParams))
return S_FALSE;
#endif
return S_OK;
}
HRESULT CPdfFile::DrawImageWith1bppMask(IGrObject* pImage, NSImages::CPixJbig2* pMaskBuffer, const unsigned int& unMaskWidth, const unsigned int& unMaskHeight, const double& dX, const double& dY, const double& dW, const double& dH)

View File

@ -90,7 +90,6 @@ public:
virtual void Close();
// --- EDIT ---
#ifndef BUILDING_WASM_MODULE
// Переходит в режим редактирования. Pdf уже должен быть открыт на чтение - LoadFromFile/LoadFromMemory
bool EditPdf(const std::wstring& wsDstFile = L"");
// Манипуляции со страницами возможны в режиме редактирования
@ -101,7 +100,6 @@ public:
bool SplitPages(const int* arrPageIndex, unsigned int unLength);
bool MergePages(const std::wstring& wsPath, const std::wstring& wsPassword = L"", const int* arrPageIndex = NULL, unsigned int unLength = 0);
HRESULT ChangePassword(const std::wstring& wsPath, const std::wstring& wsPassword = L"");
#endif
// --- READER ---

View File

@ -180,9 +180,11 @@ namespace XPS
IFolder::CBuffer* buffer = NULL;
m_wsRoot->readFileWithChunks(wsPath, buffer);
if (!buffer)
return false;
int nBase64BufferLen = NSBase64::Base64EncodeGetRequiredLength(buffer->Size);
BYTE* pbBase64Buffer = new BYTE[nBase64BufferLen + 64];
if (true == NSBase64::Base64Encode(buffer->Buffer, buffer->Size, pbBase64Buffer, &nBase64BufferLen))
if (TRUE == NSBase64::Base64Encode(buffer->Buffer, buffer->Size, pbBase64Buffer, &nBase64BufferLen))
{
pRenderer->put_BrushType(c_BrushTypeTexture);
pRenderer->put_BrushTexturePath(L"data:," + NSFile::CUtf8Converter::GetUnicodeStringFromUTF8(pbBase64Buffer, nBase64BufferLen));