Есть такой код
// Создаем новый PDF документ
PdfDocument document = new PdfDocument();
// Создаем пустую страницу
PdfPage page = document.AddPage();
// Получаем объект XGraphics для "рисования" элементов на странице
XGraphics gfx = XGraphics.FromPdfPage(page);
// картинка
gfx.DrawImage(XImage.FromFile("путь до картинки\\1.jpg"), 110, 10);
// Специальная опция для шрифта. Это чтобы русский текст нормально отображался
XPdfFontOptions options = new XPdfFontOptions(PdfFontEncoding.Unicode, PdfFontEmbedding.Always);
document.Info.Author = "автор";
document.Info.Subject = "тема";
document.Info.Title = "заголовок";
document.Info.Keywords = "ключи";
// Создаем шрифта
XFont font = new XFont("Times New Roman", 40, XFontStyle.Bold, options);
// Рисуем текст. Да да) вы не ослышались. Рисуем текст в указанных координатах
gfx.DrawString("Здесь был водяной знак", font, XBrushes.Black,
new XRect(0, 0, page.Width, page.Height),
XStringFormat.Center);
string filename = "Test.pdf";
// Сохраняем файл под названием Test.pdf
document.Save(filename);
// ... и запускам сразу в программе просмотра pdf файлов
Process.Start(filename);
но после генерации в полях тайтл, автор и т.д появляются такие символы
703>;>2>: 02B>@ B5<0
пример на картинке
Буду благодарен если кто то подскажет как исправить.
У PDFSharp есть проблема с кодировкой при записи метаданных PDF-документа. На официальном форуме PDFSharp было предложено временное решение, но видимо эту ошибку до сих пор не починили. Решение проверено лично, действительно работает.
Небольшой пример по использованию:
1. Создаем класс-хелпер со специальным методом, для перекодирования строки нужным образом.
public static class PdfHelper
{
public static string EncodingHack(string str)
{
var encoding = Encoding.BigEndianUnicode;
var bytes = encoding.GetBytes(str);
var sb = new StringBuilder();
sb.Append((char)254);
sb.Append((char)255);
for(int i = 0; i < bytes.Length; ++i)
{
sb.Append((char)bytes[i]);
}
return sb.ToString();
}
}
2. При записи значений в метаданные, применяем метод преобразования.
document.Info.Author = PdfHelper.EncodingHack("автор");
document.Info.Subject = PdfHelper.EncodingHack("тема");
document.Info.Title = PdfHelper.EncodingHack("заголовок");
document.Info.Keywords = PdfHelper.EncodingHack("ключи");
В принципе, если запись метаданных выполняется в одном месте приложения, можно оформить код преобразования в виде локальной функции или приватного метода класса, в котором PDF создается, это не имеет большого значения. Я отдаю предпочтение именно статическому классу, т.к. позже, в нем можно разместить и другие часто используемые последовательности действий, например определение шрифтов, абзацев, таблиц и прочие полезности, которые можно параметризовать и лень каждый раз писать полностью.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Что произойдет если запустить оба процесса которые описаны ниже:
Я пишу курсовую работу, в которой нужно написать игру по сети для двоих игроковУ меня есть форма, в которую я прописываю IP-адрес удаленного...
Есть база данных, которая лежит на сервере (не локальном), необходимо подключиться к ней через WPF приложениеВ javaFX проблем не было, нужно было...