diff --git a/DesktopEditor/graphics/pro/js/wasm/js/drawingfile_base.js b/DesktopEditor/graphics/pro/js/wasm/js/drawingfile_base.js index 959c7fc27c..a318123906 100644 --- a/DesktopEditor/graphics/pro/js/wasm/js/drawingfile_base.js +++ b/DesktopEditor/graphics/pro/js/wasm/js/drawingfile_base.js @@ -248,6 +248,7 @@ rec["W"] = reader.readInt(); rec["H"] = reader.readInt(); rec["Dpi"] = reader.readInt(); + rec["Rotate"] = reader.readInt(); rec.fonts = []; rec.text = null; this.pages.push(rec); diff --git a/DesktopEditor/graphics/pro/js/wasm/src/drawingfile.cpp b/DesktopEditor/graphics/pro/js/wasm/src/drawingfile.cpp index 3443c0087d..8602c6852b 100644 --- a/DesktopEditor/graphics/pro/js/wasm/src/drawingfile.cpp +++ b/DesktopEditor/graphics/pro/js/wasm/src/drawingfile.cpp @@ -120,10 +120,12 @@ WASM_EXPORT BYTE* GetInfo (CGraphicsFileDrawing* pGraphics) int nW = 0; int nH = 0; int nDpi = 0; - pGraphics->GetPageInfo(page, nW, nH, nDpi); + int nRotate = 0; + pGraphics->GetPageInfo(page, nW, nH, nDpi, nRotate); oRes.AddInt(nW); oRes.AddInt(nH); oRes.AddInt(nDpi); + oRes.AddInt(nRotate); } std::wstring wsInfo = pGraphics->GetInfo(); std::string sInfo = U_TO_UTF8(wsInfo); @@ -975,12 +977,13 @@ int main(int argc, char* argv[]) nWidth = READ_INT(pInfo + nTestPage * 12 + 8); nHeight = READ_INT(pInfo + nTestPage * 12 + 12); int dpi = READ_INT(pInfo + nTestPage * 12 + 16); + int rotate = READ_INT(pInfo + nTestPage * 12 + 20); //nWidth *= 2; //nHeight *= 2; - std::cout << "Page " << nTestPage << " width " << nWidth << " height " << nHeight << " dpi " << dpi << std::endl; + std::cout << "Page " << nTestPage << " width " << nWidth << " height " << nHeight << " dpi " << dpi << " rotate " << rotate << std::endl; - nLength = READ_INT(pInfo + nPagesCount * 12 + 8); - std::cout << "json "<< std::string((char*)(pInfo + nPagesCount * 12 + 12), nLength) << std::endl;; + nLength = READ_INT(pInfo + nPagesCount * 16 + 8); + std::cout << "json "<< std::string((char*)(pInfo + nPagesCount * 16 + 12), nLength) << std::endl;; } } diff --git a/DesktopEditor/graphics/pro/js/wasm/src/drawingfile.h b/DesktopEditor/graphics/pro/js/wasm/src/drawingfile.h index 4587805248..3940e18f6a 100644 --- a/DesktopEditor/graphics/pro/js/wasm/src/drawingfile.h +++ b/DesktopEditor/graphics/pro/js/wasm/src/drawingfile.h @@ -73,7 +73,7 @@ public: { return pReader->GetPagesCount(); } - void GetPageInfo(int nPageIndex, int& nWidth, int& nHeight, int& nPageDpiX) + void GetPageInfo(int nPageIndex, int& nWidth, int& nHeight, int& nPageDpiX, int& nRotate) { double dPageDpiX, dPageDpiY; double dWidth, dHeight; @@ -84,6 +84,8 @@ public: dHeight = dHeight / 25.4 * 96.0; dPageDpiX = dPageDpiX / 25.4 * 96.0; } + if (nType == 0) + nRotate = ((CPdfFile*)pReader)->GetRotate(nPageIndex); nWidth = dWidth; nHeight = dHeight; nPageDpiX = dPageDpiX; diff --git a/PdfFile/PdfFile.cpp b/PdfFile/PdfFile.cpp index 7e6d407ce0..0c0775534b 100644 --- a/PdfFile/PdfFile.cpp +++ b/PdfFile/PdfFile.cpp @@ -799,6 +799,12 @@ void CPdfFile::GetPageInfo(int nPageIndex, double* pdWidth, double* pdHeight, do #endif m_pInternal->pReader->GetPageInfo(nPageIndex, pdWidth, pdHeight, pdDpiX, pdDpiY); } +int CPdfFile::GetRotate(int nPageIndex) +{ + if (!m_pInternal->pReader) + return 0; + m_pInternal->pReader->GetRotate(nPageIndex); +} void CPdfFile::DrawPageOnRenderer(IRenderer* pRenderer, int nPageIndex, bool* pBreak) { if (!m_pInternal->pReader) diff --git a/PdfFile/PdfFile.h b/PdfFile/PdfFile.h index 6dda1a220e..70d6e841ec 100644 --- a/PdfFile/PdfFile.h +++ b/PdfFile/PdfFile.h @@ -123,6 +123,7 @@ public: virtual std::wstring GetInfo(); virtual BYTE* GetStructure(); virtual BYTE* GetLinks(int nPageIndex); + int GetRotate(int nPageIndex); BYTE* GetWidgets(); BYTE* GetAnnots (int nPageIndex = -1); BYTE* VerifySign (const std::wstring& sFile, ICertificate* pCertificate, int nWidget = -1); diff --git a/PdfFile/PdfReader.cpp b/PdfFile/PdfReader.cpp index bfae694f1c..6ab1d54cd9 100644 --- a/PdfFile/PdfReader.cpp +++ b/PdfFile/PdfReader.cpp @@ -82,7 +82,7 @@ CPdfReader::CPdfReader(NSFonts::IApplicationFonts* pAppFonts) SetCMapFile(NSFile::GetProcessDirectory() + L"/cmap.bin"); #else globalParams->setDrawFormFields(gFalse); - globalParams->setDrawAnnotations(gFalse); + //globalParams->setDrawAnnotations(gFalse); SetCMapMemory(NULL, 0); #endif @@ -351,6 +351,15 @@ void CPdfReader::GetPageInfo(int _nPageIndex, double* pdWidth, double* pdHeight, *pdDpiX = 72.0; *pdDpiY = 72.0; } +int CPdfReader::GetRotate(int _nPageIndex) +{ + int nPageIndex = _nPageIndex + 1; + + if (!m_pPDFDocument) + return 0; + + return m_pPDFDocument->getPageRotate(nPageIndex); +} void CPdfReader::DrawPageOnRenderer(IRenderer* pRenderer, int _nPageIndex, bool* pbBreak) { int nPageIndex = _nPageIndex + 1; @@ -889,6 +898,14 @@ BYTE* CPdfReader::GetButtonIcon(int nRasterW, int nRasterH, int nBackgroundColor if (!pAcroForms || !pPage) return NULL; + int nRotate = m_pPDFDocument->getPageRotate(nPageIndex + 1); + if (nRotate % 180 != 0) + { + int nTemp = nRasterH; + nRasterH = nRasterW; + nRasterW = nTemp; + } + double dPageDpiX, dPageDpiY; double dWidth, dHeight; GetPageInfo(nPageIndex, &dWidth, &dHeight, &dPageDpiX, &dPageDpiY); @@ -1199,15 +1216,10 @@ BYTE* CPdfReader::GetButtonIcon(int nRasterW, int nRasterH, int nBackgroundColor // Создание Gfx GBool crop = gTrue; PDFRectangle box; - int rotate = pPage->getRotate(); - if (rotate >= 360) - rotate -= 360; - else if (rotate < 0) - rotate += 360; - pPage->makeBox(72.0, 72.0, rotate, gFalse, oRendererOut.upsideDown(), -1, -1, -1, -1, &box, &crop); + pPage->makeBox(72.0, 72.0, 0, gFalse, oRendererOut.upsideDown(), -1, -1, -1, -1, &box, &crop); PDFRectangle* cropBox = pPage->getCropBox(); - Gfx* gfx = new Gfx(m_pPDFDocument, &oRendererOut, nPageIndex + 1, pPage->getAttrs()->getResourceDict(), 72.0, 72.0, &box, cropBox ? cropBox : (PDFRectangle *)NULL, rotate, NULL, NULL); + Gfx* gfx = new Gfx(m_pPDFDocument, &oRendererOut, nPageIndex + 1, pPage->getAttrs()->getResourceDict(), 72.0, 72.0, &box, cropBox ? cropBox : (PDFRectangle *)NULL, 0, NULL, NULL); pRenderer->SetCoordTransformOffset(0, bbox[3] * (double)nRasterH / dHeight - nRasterH); gfx->drawForm(&oStrRef, oResourcesDict, m, bbox, gFalse, gFalse, gFalse, gFalse); diff --git a/PdfFile/PdfReader.h b/PdfFile/PdfReader.h index c634b371ba..5022a9b6e9 100644 --- a/PdfFile/PdfReader.h +++ b/PdfFile/PdfReader.h @@ -58,6 +58,7 @@ public: void SetCMapFolder(const std::wstring& sFolder); void SetCMapFile(const std::wstring& sFile); + int GetRotate(int nPageIndex); void GetPageInfo(int nPageIndex, double* pdWidth, double* pdHeight, double* pdDpiX, double* pdDpiY); void DrawPageOnRenderer(IRenderer* pRenderer, int nPageIndex, bool* pBreak); std::wstring GetInfo(); diff --git a/PdfFile/SrcReader/PdfAnnot.cpp b/PdfFile/SrcReader/PdfAnnot.cpp index 6b6f1c9a82..f50d9044e6 100644 --- a/PdfFile/SrcReader/PdfAnnot.cpp +++ b/PdfFile/SrcReader/PdfAnnot.cpp @@ -1852,6 +1852,14 @@ CAnnotAP::CAnnotAP(PDFDoc* pdfDoc, NSFonts::IFontManager* pFontManager, CFontLis m_pRendererOut = NULL; m_pRenderer = NULL; + int nRotate = pdfDoc->getPageRotate(nPageIndex + 1); + if (nRotate % 180 != 0) + { + int nTemp = nRasterH; + nRasterH = nRasterW; + nRasterW = nTemp; + } + Object oAP; if (pField->fieldLookup("AP", &oAP)->isDict()) { @@ -1871,6 +1879,14 @@ CAnnotAP::CAnnotAP(PDFDoc* pdfDoc, NSFonts::IFontManager* pFontManager, CFontLis m_pRendererOut = NULL; m_pRenderer = NULL; + int nRotate = pdfDoc->getPageRotate(nPageIndex + 1); + if (nRotate % 180 != 0) + { + int nTemp = nRasterH; + nRasterH = nRasterW; + nRasterW = nTemp; + } + Object oAnnot, oAP; XRef* xref = pdfDoc->getXRef(); oAnnotRef->fetch(xref, &oAnnot); @@ -1910,18 +1926,8 @@ void CAnnotAP::Init(PDFDoc* pdfDoc, NSFonts::IFontManager* pFontManager, CFontLi { Page* pPage = pdfDoc->getCatalog()->getPage(nPageIndex + 1); - double dWidth, dHeight; - int nRotate = pdfDoc->getPageRotate(nPageIndex + 1); - if (nRotate % 180 == 0) - { - dWidth = pdfDoc->getPageCropWidth(nPageIndex + 1); - dHeight = pdfDoc->getPageCropHeight(nPageIndex + 1); - } - else - { - dHeight = pdfDoc->getPageCropWidth(nPageIndex + 1); - dWidth = pdfDoc->getPageCropHeight(nPageIndex + 1); - } + double dWidth = pdfDoc->getPageCropWidth(nPageIndex + 1); + double dHeight = pdfDoc->getPageCropHeight(nPageIndex + 1); m_dWScale = (double)nRasterW / dWidth; m_dHScale = (double)nRasterH / dHeight; @@ -1962,15 +1968,11 @@ void CAnnotAP::Init(PDFDoc* pdfDoc, NSFonts::IFontManager* pFontManager, CFontLi // Создание Gfx GBool crop = gTrue; PDFRectangle box; - int rotate = pPage->getRotate(); - if (rotate >= 360) - rotate -= 360; - else if (rotate < 0) - rotate += 360; - pPage->makeBox(72.0, 72.0, rotate, gFalse, m_pRendererOut->upsideDown(), -1, -1, -1, -1, &box, &crop); + // Поворот не требуется + pPage->makeBox(72.0, 72.0, 0, gFalse, m_pRendererOut->upsideDown(), -1, -1, -1, -1, &box, &crop); PDFRectangle* cropBox = pPage->getCropBox(); - m_gfx = new Gfx(pdfDoc, m_pRendererOut, nPageIndex + 1, pPage->getAttrs()->getResourceDict(), 72.0, 72.0, &box, crop ? cropBox : (PDFRectangle *)NULL, rotate, NULL, NULL); + m_gfx = new Gfx(pdfDoc, m_pRendererOut, nPageIndex + 1, pPage->getAttrs()->getResourceDict(), 72.0, 72.0, &box, crop ? cropBox : (PDFRectangle *)NULL, 0, NULL, NULL); // Координаты внешнего вида m_nRx1 = (int)round(m_dx1 * m_dWScale) - 1;