Redact Do&Undo

This commit is contained in:
Svetlana Kulikova
2025-08-20 14:54:02 +03:00
parent 2a6c50db89
commit d092b88d9b
21 changed files with 208 additions and 41 deletions

View File

@ -1225,6 +1225,7 @@ bool CWidgetsInfo::Read(NSOnlineOfficeBinToPdf::CBufferReader* pReader, IMetafil
CRedact::CRedact() : IAdvancedCommand(AdvancedCommandType::Redact) {}
CRedact::~CRedact() {}
int CRedact::GetFlag() const { return m_nFlag; }
void CRedact::GetBounds(double& dX1, double& dY1, double& dX2, double& dY2)
{
dX1 = m_dX1;
@ -1233,13 +1234,18 @@ void CRedact::GetBounds(double& dX1, double& dY1, double& dX2, double& dY2)
dY2 = m_dY2;
}
const std::vector<double>& CRedact::GetQuadPoints() { return m_arrQuadPoints; }
BYTE* CRedact::GetRender(LONG& nLen)
{
nLen = m_nRenderLen;
return m_pRender;
}
bool CRedact::Read(NSOnlineOfficeBinToPdf::CBufferReader* pReader, IMetafileToRenderter* pCorrector)
{
int n = pReader->ReadInt();
m_arrQuadPoints.reserve(n);
for (int i = 0; i < n; ++i)
{
for (int j = 0; j < 8; ++j)
for (int j = 0; j < 4; ++j)
m_arrQuadPoints.push_back(pReader->ReadDouble());
}

View File

@ -54,6 +54,8 @@
"_SplitPages",
"_MergePages",
"_UnmergePages",
"_RedactPage",
"_UndoRedact",
"_GetImageBase64",
"_GetImageBase64Len",
"_GetImageBase64Ptr",

View File

@ -701,8 +701,7 @@ HEADERS += \
$$PDF_ROOT_DIR/SrcWriter/Utils.h \
$$PDF_ROOT_DIR/SrcWriter/Metadata.h \
$$PDF_ROOT_DIR/SrcWriter/ICCProfile.h \
$$PDF_ROOT_DIR/SrcWriter/States.h \
$$PDF_ROOT_DIR/SrcWriter/RedactOutputDev.h
$$PDF_ROOT_DIR/SrcWriter/States.h
SOURCES += \
$$PDF_ROOT_DIR/SrcWriter/AcroForm.cpp \
@ -731,8 +730,7 @@ SOURCES += \
$$PDF_ROOT_DIR/SrcWriter/Streams.cpp \
$$PDF_ROOT_DIR/SrcWriter/Utils.cpp \
$$PDF_ROOT_DIR/SrcWriter/Metadata.cpp \
$$PDF_ROOT_DIR/SrcWriter/States.cpp \
$$PDF_ROOT_DIR/SrcWriter/RedactOutputDev.cpp
$$PDF_ROOT_DIR/SrcWriter/States.cpp
# PdfFile

View File

@ -160,6 +160,14 @@ CFile.prototype["UndoMergePages"] = function()
{
return this._UndoMergePages();
};
CFile.prototype["RedactPage"] = function(pageIndex, arrRedactBox, arrayBufferChanges)
{
return this._RedactPage(pageIndex, arrRedactBox, arrayBufferChanges);
};
CFile.prototype["UndoRedact"] = function()
{
return this._UndoRedact();
};
// INFO DOCUMENT
CFile.prototype.getInfo = function()

View File

@ -135,6 +135,17 @@ CFile.prototype._UndoMergePages = function()
return g_native_drawing_file["UnmergePages"]();
};
CFile.prototype._RedactPage = function(pageIndex, box, filler)
{
let dataFiller = (undefined !== filler.byteLength) ? new Float64Array(filler) : filler;
return g_native_drawing_file["RedactPage"](pageIndex, box, dataFiller);
};
CFile.prototype._UndoRedact = function()
{
return g_native_drawing_file["UndoRedact"]();
};
// FONTS
CFile.prototype._isNeedCMap = function()
{

View File

@ -192,6 +192,38 @@ CFile.prototype._UndoMergePages = function()
return Module["_UnmergePages"](this.nativeFile) == 1;
};
CFile.prototype._RedactPage = function(pageIndex, arrRedactBox, arrayBufferChanges)
{
let changesPtr = 0;
let changesLen = 0;
if (arrayBufferChanges)
{
let changes = new Uint8Array(arrayBufferChanges);
changesLen = changes.length;
changesPtr = Module["_malloc"](changesLen);
Module["HEAP8"].set(changes, changesPtr);
}
let memoryBuffer = new Int32Array(arrRedactBox.length);
for (let i = 0; i < arrRedactBox.length; i++)
memoryBuffer[i] = Math.round(arrRedactBox[i] * 10000);
let pointer = Module["_malloc"](memoryBuffer.length * 4);
Module["HEAP32"].set(memoryBuffer, pointer >> 2);
let bRes = Module["_RedactPage"](this.nativeFile, pageIndex, pointer, memoryBuffer.length / 4, changesPtr, changesLen);
changesPtr = 0; // Success or not, changesPtr is either taken or freed
Module["_free"](pointer);
return bRes == 1;
};
CFile.prototype._UndoRedact = function()
{
return Module["_UndoRedact"](this.nativeFile) == 1;
};
// FONTS
CFile.prototype._isNeedCMap = function()
{

View File

@ -178,9 +178,18 @@ WASM_EXPORT int UnmergePages(CDrawingFile* pFile)
{
return pFile->UnmergePages() ? 1 : 0;
}
WASM_EXPORT int RedactPage(CDrawingFile* pFile, int nPageIndex, double* arrRedactBox, int nLengthX4, BYTE* data, int size)
WASM_EXPORT int RedactPage(CDrawingFile* pFile, int nPageIndex, int* arrRedactBox, int nLengthX4, BYTE* data, int size)
{
return pFile->RedactPage(nPageIndex, arrRedactBox, nLengthX4, data, size) ? 1 : 0;
double* arrDRedactBox = new double[nLengthX4 * 4];
for (int i = 0; i < nLengthX4 * 4; ++i)
arrDRedactBox[i] = arrRedactBox[i] / 10000.0;
int nRes = pFile->RedactPage(nPageIndex, arrDRedactBox, nLengthX4, data, size) ? 1 : 0;
delete[] arrDRedactBox;
return nRes;
}
WASM_EXPORT int UndoRedact(CDrawingFile* pFile)
{
return pFile->UndoRedact() ? 1 : 0;
}
WASM_EXPORT void* GetImageBase64(CDrawingFile* pFile, int rId)