Rocky_Bas Ответов: 1

Как распечатать текст в файле tiff с помощью методов windows на языке C#


Привет,

У меня есть требование напечатать какой-то текст в файле tiff , поэтому мне нужна помощь, чтобы найти, есть ли у windows какая-либо функция для такого рода вещей. Я уже использую какую-то стороннюю библиотеку lib, чтобы сделать то же самое, но я хочу посмотреть, можем ли мы сделать то же самое с помощью windows в c#, поскольку я буду печатать один и тот же текст каждый раз во всех TIFF. Будет очень полезно, если кто-нибудь сможет помочь в этом.

заранее спасибо

Что я уже пробовал:

Используется сторонний lib Lead tools который работает но проверяет наличие каких либо методов windows так как требование это просто базовая вещь чтобы написать какой то общий текст в файле tiff

1 Ответов

Рейтинг:
1

OriginalGriff

TIFF-это графический формат файла, поэтому вам нужно загрузить его, получить контекст, нарисовать на нем и сохранить результат:

using (Image i = new Bitmap(@"D:\Test data\MyPic.Tif"))
    {
    using (Graphics g = Graphics.FromImage(i))
        {
        g.DrawString("Test Text", Font, Brushes.Cyan, 100, 100);
        }
    i.Save(@"D:\Test data\MyPic.Edit.tif", ImageFormat.Tiff);
    }


Rocky_Bas

Растровое изображение немного медленное есть ли другой способ сделать то же самое

Rocky_Bas

Это работает, но у меня есть некоторые опасения здесь, Если текст слишком длинный, то текст в конце обрезается. Есть ли какой-нибудь способ, если текст не помещается в строку, то он должен быть напечатан в следующей строке.

OriginalGriff

Проверьте перегрузки DrawString - есть версия, которая указывает прямоугольник вместо точки.

Rocky_Bas

Я не хочу иметь прямоугольник

OriginalGriff

Если у вас нет прямоугольника, то вы не знаете, где строка должна заканчиваться и перезапускаться на новой строке - так что даже если вы "заварите ее сами" с помощью MeasureString (что довольно сложно, если у вас нет непропорционального шрифта и вы не заботитесь о разрывах в середине слов), вам нужна эта информация!

Rocky_Bas

Я использовал приведенный ниже код, но все же он обрезает последнее содержимое, так как оно не подходит

RectangleF rec = новый RectangleF();
rec.X = 85;
запись.Y = 400;

г. DrawRectangles(Ручки.Белый, новый прямоугольник[] { rec });
г. Шнурок(строка.Формат("имя файла: {0}", имя файла), новый шрифт ("Arial", 50, FontStyle.Жирный), Кисти.Красный, rec,
новый StringFormat(StringFormatFlags.LineLimit | StringFormatFlags.NoWrap, 1003) { Trimming = StringTrimming.Никто });

OriginalGriff

Вы не определили прямоугольник - просто задали ему положение (X, Y) в верхнем левом углу. Прямоугольник нуждается либо в двух координатах (X, Y), либо в паре (X, Y) и паре ширина-высота / размер!

Rocky_Bas

Нет, я использовал этот rec в приведенной ниже строке, просто проверьте, или я что-то еще упустил

г. DrawRectangles(Ручки.Белый, новый прямоугольник[] { rec });
г. Шнурок(строка.Формат("имя файла: {0}", имя файла), новый шрифт ("Arial", 50, FontStyle.Жирный), Кисти.Красный, rec,
новый StringFormat(StringFormatFlags.LineLimit | StringFormatFlags.NoWrap, 1003) { Trimming = StringTrimming.Никто });

OriginalGriff

Посмотрите на определение вашей прямой кишки: сколько информации вы на самом деле вкладываете в нее?

Rocky_Bas

Извини, что я тебя не понял.

OriginalGriff

RectangleF rec = новый RectangleF();
rec.X = 85;
rec.Y = 400;

Где устанавливается ширина? Высота?

Rocky_Bas

даже после установки ширины и высоты я получаю ту же проблему.

OriginalGriff

Для меня это прекрасно работает:

            using (Image i = new Bitmap(@"D:\Test data\MyPic.Tif"))
                {
                using (Graphics g = Graphics.FromImage(i))
                    {
                    using (Font font = new System.Drawing.Font("Verdana", 20.0f))
                        {
                        RectangleF rect = new RectangleF(10.0f, 10.0f, 100.0f, 50.0f);
                        g.DrawString("This is Test Text which should be wrapped.", font, Brushes.Black, rect, StringFormat.GenericDefault);
                        }
                    }
                i.Save(@"D:\Test data\MyPic.Edit.tif", ImageFormat.Tiff);
                }

Rocky_Bas

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

OriginalGriff

Так почему же вы указываете, что он не должен обертываться?

новый StringFormat(StringFormatFlags.LineLimit | StringFormatFlags.Без переноса 1003)

Что ты думаешь без переноса был там?