diff --git a/DesktopEditor/graphics/pro/js/wasm/src/drawingfile.cpp b/DesktopEditor/graphics/pro/js/wasm/src/drawingfile.cpp index 8602c6852b..75616be950 100644 --- a/DesktopEditor/graphics/pro/js/wasm/src/drawingfile.cpp +++ b/DesktopEditor/graphics/pro/js/wasm/src/drawingfile.cpp @@ -974,10 +974,10 @@ int main(int argc, char* argv[]) nPagesCount = READ_INT(pInfo + 4); if (nPagesCount > 0) { - 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 = READ_INT(pInfo + nTestPage * 16 + 8); + nHeight = READ_INT(pInfo + nTestPage * 16 + 12); + int dpi = READ_INT(pInfo + nTestPage * 16 + 16); + int rotate = READ_INT(pInfo + nTestPage * 16 + 20); //nWidth *= 2; //nHeight *= 2; std::cout << "Page " << nTestPage << " width " << nWidth << " height " << nHeight << " dpi " << dpi << " rotate " << rotate << std::endl; diff --git a/PdfFile/PdfFile.cpp b/PdfFile/PdfFile.cpp index 0c0775534b..c06427ced7 100644 --- a/PdfFile/PdfFile.cpp +++ b/PdfFile/PdfFile.cpp @@ -803,7 +803,7 @@ int CPdfFile::GetRotate(int nPageIndex) { if (!m_pInternal->pReader) return 0; - m_pInternal->pReader->GetRotate(nPageIndex); + return m_pInternal->pReader->GetRotate(nPageIndex); } void CPdfFile::DrawPageOnRenderer(IRenderer* pRenderer, int nPageIndex, bool* pBreak) { diff --git a/PdfFile/SrcReader/RendererOutputDev.cpp b/PdfFile/SrcReader/RendererOutputDev.cpp index d7023b9022..e6b2ab28d3 100644 --- a/PdfFile/SrcReader/RendererOutputDev.cpp +++ b/PdfFile/SrcReader/RendererOutputDev.cpp @@ -4836,6 +4836,17 @@ namespace PdfReader *pdDeviceX = dUserX * pMatrix[0] + dUserY * pMatrix[2] + pMatrix[4]; *pdDeviceY = dUserX * pMatrix[1] + dUserY * pMatrix[3] + pMatrix[5]; } + double ClampCoords(double v) + { + // conv_type::upscale = int (double v * 256) + // 2^31 - 2^8 = 8.388.608; - MaxPageSize ~= 8.380.000 + double dMaxCoord = 8380000.0; + if (v > dMaxCoord) + v = dMaxCoord; + else if (v < -dMaxCoord) + v = -dMaxCoord; + return v; + } void RendererOutputDev::DoPath(GfxState *pGState, GfxPath *pPath, double dPageHeight, double *pCTM, GfxClipMatrix* pCTM2) { if (m_bDrawOnlyText) @@ -4873,19 +4884,21 @@ namespace PdfReader GfxSubpath *pSubpath = pPath->getSubpath(nSubPathIndex); int nPointsCount = pSubpath->getNumPoints(); - m_pRenderer->PathCommandMoveTo(PDFCoordsToMM(pSubpath->getX(0) + dShiftX), PDFCoordsToMM(pSubpath->getY(0) + dShiftY)); + m_pRenderer->PathCommandMoveTo(PDFCoordsToMM(ClampCoords(pSubpath->getX(0) + dShiftX)), PDFCoordsToMM(ClampCoords(pSubpath->getY(0) + dShiftY))); int nCurPointIndex = 1; while (nCurPointIndex < nPointsCount) { if (pSubpath->getCurve(nCurPointIndex)) { - m_pRenderer->PathCommandCurveTo(PDFCoordsToMM(pSubpath->getX(nCurPointIndex) + dShiftX), PDFCoordsToMM(pSubpath->getY(nCurPointIndex) + dShiftY), PDFCoordsToMM(pSubpath->getX(nCurPointIndex + 1) + dShiftX), PDFCoordsToMM(pSubpath->getY(nCurPointIndex + 1) + dShiftY), PDFCoordsToMM(pSubpath->getX(nCurPointIndex + 2) + dShiftX), PDFCoordsToMM(pSubpath->getY(nCurPointIndex + 2) + dShiftY)); + m_pRenderer->PathCommandCurveTo(PDFCoordsToMM(ClampCoords(pSubpath->getX(nCurPointIndex) + dShiftX)), PDFCoordsToMM(ClampCoords(pSubpath->getY(nCurPointIndex) + dShiftY)), + PDFCoordsToMM(ClampCoords(pSubpath->getX(nCurPointIndex + 1) + dShiftX)), PDFCoordsToMM(ClampCoords(pSubpath->getY(nCurPointIndex + 1) + dShiftY)), + PDFCoordsToMM(ClampCoords(pSubpath->getX(nCurPointIndex + 2) + dShiftX)), PDFCoordsToMM(ClampCoords(pSubpath->getY(nCurPointIndex + 2) + dShiftY))); nCurPointIndex += 3; } else { - m_pRenderer->PathCommandLineTo(PDFCoordsToMM(pSubpath->getX(nCurPointIndex) + dShiftX), PDFCoordsToMM(pSubpath->getY(nCurPointIndex) + dShiftY)); + m_pRenderer->PathCommandLineTo(PDFCoordsToMM(ClampCoords(pSubpath->getX(nCurPointIndex) + dShiftX)), PDFCoordsToMM(ClampCoords(pSubpath->getY(nCurPointIndex) + dShiftY))); ++nCurPointIndex; } }