RDLC сообщает о пропорциональном выравнивании изображения - PullRequest
3 голосов
/ 13 февраля 2012

Я работаю над отчетом RDLC, я использую изображение БД и устанавливаю его тип размера на Пропорциональный, если изображение не является точным размером, так как его границы, границы не будут соответствовать ... это нормально, но изображение будет выровнено по верхнему левому краю в соответствии с границами, в то время как мне нужно, чтобы оно было отцентрировано (в PDF), в то время как в IE оно центрировано .., вот примеры изображений. Пожалуйста, мне нужна помощь для этого ..

Это у меня уже есть http://up.g4z4.com/uploads/f1fdee3542.jpg

Это желаемый http://up.g4z4.com/uploads/a3d2ca5b8e.jpg

Однажды я прочитал, что источник изображения или точка регистрации в отчетах RDLC находится в верхнем левом углу, поэтому он выглядит следующим образом ... но тот, кто написал, сказал, что не уверен в этом ... возможно ли это? или это связано с выравниванием по умолчанию, которое нельзя изменить?

Спасибо,

Ответы [ 2 ]

2 голосов
/ 25 июля 2013

Для каждого изображения мы можем узнать его соотношение сторон: ширина / высота или высота / ширина.Предполагая, что ваша ячейка имеет известную ширину и высоту , вы можете определить, будет ли она слишком узкой или слишком короткой.Кроме того, вы можете рассчитать его новую ширину и высоту с помощью следующих формул:

newWidth = высота ячейки * oldwidth / oldheight

newHeight = ширина полосы * oldheight /oldwidth

CellWidth - NewWidth = 2x PaddingLeft

CellHeight - NewHeight = 2x PaddingTop

Итак, все, что вам нужно сделать, это просто разделить результат на 2 и привести его кinteger.

Я реализовал следующие методы получения для каждого изображения в базе данных (на самом деле я извлекаю эти изображения из базы данных sqlite) в событии SubReportProcessing для своего основного отчета. Я просто добавляю все свои изображения в качестве источника данных.

public class ImageModel
{
    public int ImgId { get; set; }
    public byte[] Blob { get; set; }

    public string PaddingLeft
    {
        get
        {
            var img = byteArrayToImage(Blob);
            //cell width and height must be specified in points
            //(cellwidth - cellheight * image aspect ratio) / 2 
            var result = (int)((256.0f - 256.0f * ((float)img.Width / (float)img.Height)) / (float)2) + "pt";
            return result;
        }
    }
    public string PaddingTop
    {
        get
        {
            var img = byteArrayToImage(Blob);
            var result = (int)((256.0f - 256.0f * ((float)img.Height / (float)img.Width)) / (float)2) + "pt";
            return result;

        }
    }

После этой операции теперь я могу установить значение отступа в свойствах изображения следующим образом:

=Fields!PaddingLeft.Value
=Fields!PaddingTop.Value

Надеюсь, это поможет!

Cheers;)

1 голос
/ 15 августа 2012

Я тоже ищу ответ на этот вопрос;Я нашел этот код , который делает трюк (он работает), но он не очень общий (зависит от жестко заданной ширины страницы).Если немного поработать, этот код может работать.

...