PdfPageRenderer: Refactor using Rect.
This commit is contained in:
@@ -2,6 +2,7 @@
|
|||||||
using System.Drawing;
|
using System.Drawing;
|
||||||
using System.Drawing.Drawing2D;
|
using System.Drawing.Drawing2D;
|
||||||
using System.Drawing.Imaging;
|
using System.Drawing.Imaging;
|
||||||
|
using VAR.PdfTools.Maths;
|
||||||
|
|
||||||
namespace VAR.PdfTools
|
namespace VAR.PdfTools
|
||||||
{
|
{
|
||||||
@@ -9,9 +10,7 @@ namespace VAR.PdfTools
|
|||||||
{
|
{
|
||||||
private PdfDocumentPage _page;
|
private PdfDocumentPage _page;
|
||||||
private PdfTextExtractor _pdfTextExtractor;
|
private PdfTextExtractor _pdfTextExtractor;
|
||||||
|
|
||||||
private const int MaxSize = 10000;
|
|
||||||
|
|
||||||
public PdfTextExtractor Extractor { get { return _pdfTextExtractor; } }
|
public PdfTextExtractor Extractor { get { return _pdfTextExtractor; } }
|
||||||
|
|
||||||
public PdfPageRenderer(PdfDocumentPage page)
|
public PdfPageRenderer(PdfDocumentPage page)
|
||||||
@@ -24,36 +23,24 @@ namespace VAR.PdfTools
|
|||||||
{
|
{
|
||||||
if (_pdfTextExtractor.Elements.Count == 0)
|
if (_pdfTextExtractor.Elements.Count == 0)
|
||||||
{
|
{
|
||||||
|
// Nothing to render
|
||||||
Bitmap emptyBmp = new Bitmap(100, 200, PixelFormat.Format32bppArgb);
|
Bitmap emptyBmp = new Bitmap(100, 200, PixelFormat.Format32bppArgb);
|
||||||
|
using (Graphics gc = Graphics.FromImage(emptyBmp))
|
||||||
|
gc.Clear(Color.White);
|
||||||
return emptyBmp;
|
return emptyBmp;
|
||||||
}
|
}
|
||||||
|
|
||||||
double pageXMin = double.MaxValue;
|
// Calculate page size and scale
|
||||||
double pageYMin = double.MaxValue;
|
Rect pageRect = _pdfTextExtractor.GetRect();
|
||||||
double pageXMax = double.MinValue;
|
int pageWidth = (int)Math.Ceiling(pageRect.XMax - pageRect.XMin);
|
||||||
double pageYMax = double.MinValue;
|
int pageHeight = (int)Math.Ceiling(pageRect.YMax - pageRect.YMin);
|
||||||
|
|
||||||
// Preprocess page to get max size
|
|
||||||
foreach (PdfTextElement textElement in _pdfTextExtractor.Elements)
|
|
||||||
{
|
|
||||||
double textElementXMin = textElement.GetX();
|
|
||||||
double textElementYMax = textElement.GetY();
|
|
||||||
double textElementXMax = textElementXMin + textElement.VisibleWidth;
|
|
||||||
double textElementYMin = textElementYMax - textElement.VisibleHeight;
|
|
||||||
|
|
||||||
if (textElementXMax > pageXMax) { pageXMax = textElementXMax; }
|
|
||||||
if (textElementYMax > pageYMax) { pageYMax = textElementYMax; }
|
|
||||||
if (textElementXMin < pageXMin) { pageXMin = textElementXMin; }
|
|
||||||
if (textElementYMin < pageYMin) { pageYMin = textElementYMin; }
|
|
||||||
}
|
|
||||||
|
|
||||||
// Prepare page image
|
|
||||||
int pageWidth = (int)Math.Ceiling(pageXMax - pageXMin);
|
|
||||||
int pageHeight = (int)Math.Ceiling(pageYMax - pageYMin);
|
|
||||||
int Scale = 10;
|
int Scale = 10;
|
||||||
|
int MaxSize = 10000;
|
||||||
while ((pageWidth * Scale) > MaxSize) { Scale--; }
|
while ((pageWidth * Scale) > MaxSize) { Scale--; }
|
||||||
while ((pageHeight * Scale) > MaxSize) { Scale--; }
|
while ((pageHeight * Scale) > MaxSize && Scale > 1) { Scale--; }
|
||||||
if (Scale <= 0) { Scale = 1; }
|
if (Scale <= 0) { Scale = 1; }
|
||||||
|
|
||||||
|
// Draw page image
|
||||||
Bitmap bmp = new Bitmap(pageWidth * Scale, pageHeight * Scale, PixelFormat.Format32bppArgb);
|
Bitmap bmp = new Bitmap(pageWidth * Scale, pageHeight * Scale, PixelFormat.Format32bppArgb);
|
||||||
using (Graphics gc = Graphics.FromImage(bmp))
|
using (Graphics gc = Graphics.FromImage(bmp))
|
||||||
using (Pen penTextElem = new Pen(Color.Blue))
|
using (Pen penTextElem = new Pen(Color.Blue))
|
||||||
@@ -64,7 +51,7 @@ namespace VAR.PdfTools
|
|||||||
// Draw text elements
|
// Draw text elements
|
||||||
foreach (PdfTextElement textElement in _pdfTextExtractor.Elements)
|
foreach (PdfTextElement textElement in _pdfTextExtractor.Elements)
|
||||||
{
|
{
|
||||||
DrawTextElement(textElement, gc, penTextElem, penCharElem, Scale, pageHeight, pageXMin, pageYMin, Brushes.Black);
|
DrawTextElement(textElement, gc, penTextElem, penCharElem, Scale, pageHeight, pageRect.XMin, pageRect.YMin, Brushes.Black);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return bmp;
|
return bmp;
|
||||||
|
|||||||
Reference in New Issue
Block a user