xamarin 如何使用syncfusion pdf获取剩余页面大小

sdnqo3pr  于 2023-09-28  发布在  其他
关注(0)|答案(2)|浏览(99)

我创建PDF使用synfusion PDF插件的xamarin形式和发生了什么,如果我打印我的PDF,然后有很多剩余的空间在页面上,所以我如何可以得到PDF页面的剩余空间使用synfusion PDF

wz3gfoph

wz3gfoph1#

我们可以通过PdfLayoutResult获取PDF文档页面中的空白区域。请参考下面的代码片段了解更多细节,
C#:

//Create a text element with the text and font
PdfTextElement textElement = new PdfTextElement(text, font);
PdfLayoutFormat layoutFormat = new PdfLayoutFormat();
layoutFormat.Layout = PdfLayoutType.Paginate;

//Draw the paragraph
PdfLayoutResult result = textElement.Draw(page, new RectangleF(0, 0, 
page.GetClientSize().Width, page.GetClientSize().Height), layoutFormat);

//Get the blank space of PDF using PdfLayoutResult and page height 
float blankSpaceHeight = page.GetClientSize().Height - result.Bounds.Bottom;

我们已经创建了相同的样本,可以从下面的链接下载,
Sample to get the remaining page size of PDF document

xkftehaa

xkftehaa2#

我们可以得到空白页循环像素从最后一行页到第一行页和比较颜色与白色。如果与白色不同,则返回该位置。例如:

static float GetHeightFromPdfPage(Stream streamData, int pageIndex)
{
    // Convert last page to image
    var image = ConvertPageToImage(streamData, pageIndex);
    // Loop from last positionx to first position of image
    // Return if detect any color in (A, B, G) is different from than white color
    for (int y = image.Height - 1; y >= 0; y --)
    {
        for (int x = 0; x < image.Width; x++)
        {
            var colorPixel = image.GetPixel(x, y);
            if (colorPixel.A != System.Drawing.Color.White.A || colorPixel.B != System.Drawing.Color.White.B || colorPixel.G != System.Drawing.Color.White.G)
            {
                return y;
            }
        }
    }
    return 0;
}

static Bitmap ConvertPageToImage(Stream streamData, int pageIndex)
{
    var loadedDocument = new PdfLoadedDocument(streamData);
    var page = loadedDocument.Pages[pageIndex];

    PdfRenderer pdfExportImage = new PdfRenderer();
    pdfExportImage.Load(streamData);
    var skBitmap = pdfExportImage.ExportAsImage(pageIndex, page.Size, true);
    using (var ms = new MemoryStream())
    {
        skBitmap.Encode(ms, SKEncodedImageFormat.Png, 100);
        return new Bitmap(ms);
    }
}

相关问题