Hello, i believe i MAY have a solution for you. In our application, we needed pdf pages to fit on height when working in horizontal mode. In this scenario we used PdfViewHorz class as a view class and i modified it's vLayout method like this:
if (m_doc == null || m_w <= m_page_gap || m_h <= m_page_gap) return;
float minScale = 1.0f;
float maxScale = minScale * zoomLevel;
m_scroller.MinZoomFactor = minScale;
m_scroller.MaxZoomFactor = maxScale;
ZoomEnd();
m_scroller.Width = m_w;
m_scroller.Height = m_h;
if (m_pages != null) return;
int cur = 0;
int cnt = m_doc.PageCount;
float maxh = 0;
while (cur < cnt)
{
float h = m_doc.GetPageHeight(cur);
if (maxh < h) maxh = h;
cur++;
}
float scale = ((float)(m_h - m_page_gap)) / maxh;
if (scale < minScale)
scale = minScale;
else if (scale > maxScale)
scale = maxScale;
m_scale = scale;
m_pages = new PDFVPage[cnt];
float left = m_page_gap / 2;
float top = m_page_gap / 2;
m_docw = 0;
m_doch = 0;
if (m_rtol)
{
cur = cnt - 1;
while (cur >= 0)
{
m_pages[cur] = new PDFVPage(m_doc, cur);
m_pages[cur].SetRect(m_layout, left, top, m_scale);
left += m_pages[cur].GetWidth() + m_page_gap;
if (m_doch < m_pages[cur].GetHeight()) m_doch = m_pages[cur].GetHeight();
cur--;
}
}
else
{
cur = 0;
while (cur < cnt)
{
m_pages[cur] = new PDFVPage(m_doc, cur);
m_pages[cur].SetRect(m_layout, left, top, m_scale);
left += m_pages[cur].GetWidth() + m_page_gap;
if (m_doch < m_pages[cur].GetHeight()) m_doch = m_pages[cur].GetHeight();
cur++;
}
}
m_docw = left;
m_doch += m_page_gap;
m_layout.resize(m_docw, m_doch);
m_scroller.UpdateLayout();
For us, this works perfectly. I hope i helped:)
Sincerely, Steven