Two Pilots™    Главная  |  Навигация  |  Программы  |  Скачать  |  Купить  |  Поддержка  |  Издателям  |  OEM

Блог компании Два Пилота

обсуждение разных тем

Архив рубрики 'Для разработчиков программных продуктов'

Изменение размеров страниц в PDF файлах

Август 9, 2010

В библиотеку для создания PDF документов PDF Creator Pilot была добавлена возможность для конвертирования PDF документов с размером страниц А4 в PDF документы с размером страниц А3. После трансформации на новой странице размером А3 помещаются две страницы размера А4 из исходного документа. Чтобы воспользоваться этой функциональностью, необходимо вызвать метод ConvertToA3. Здесь можно загрузить примеры PDF файлов до и после применения этой функции.

Так же для преобразования размеров и ориентации страниц в PDF библиотеке доступны следующие методы:

  • PageHeight - свойство для чтения/установки высоты текущей страницы;
  • PageOrientation - свойство для чтения/установки ориентации текущей страницы;
  • PageResolution - свойство для чтения/установки разрешения (в DPI) текущей страницы;
  • PageRotate – метод, который поворачивает страницу;
  • PageSize - свойство для чтения/установки размера текущей страницы;
  • PageWidth - свойство для чтения/установки ширины текущей страницы.

Артём Голубниченко

Последствия округления

Июль 7, 2010

Лучше всего сразу начать с иллюстрации того, что было ДО неточного округления чисел с плавающей точкой и как это стало выглядеть ПОСЛЕ того, как ошибка была исправлена.

comparing

Проблема проявилась при конвертировании EMF в PDF (или при рисовании на HDC, полученном из PDF). Проблема была с функциями Polyline(To). На вход функции поступал массив точек, координаты которых не значительно отличались друг от друга. И далее для того, чтобы нарисовать набор линий в PDF, необходимо было преобразовать координаты из HDC в координаты для PDF. Для этой цели мы используем функцию LPtoDP. Но функция возвращает целые значения координат, поэтому, например, для двух координат из EMF (160, 74) и (159, 60) функция преобразует их в (1, 1) и (1, 2). В результате чего набор прямых приобретет вид, который представлен на скриншоте слева. Поэтому в данном случае мы перестали использовать эту функцию и получили правильный результат работы функций Polyline(To).

Артём Голубниченко

Как получить путь к системным папкам

Июнь 28, 2010

Когда ваше приложение нуждается в том, чтобы сохранить/загрузить/скопировать какой-нибудь файл в системной папке ни в коем случае не нужно использовать жёстко прописанные пути вроде "C:\Documents and Settings\All Users\Application Data". Во-первых, этот путь может быть изменён в следующих версиях Windows. Во-вторых, пользователь может просто установить ОС на другой диск. :)

Избежать эти неприятности нам поможет WinAPI-функция SHGetFolderPath.

Можно почитать про нее в MSDN.

Кратко: Возвращает путь к определённой системной директории, тип которой указан в идентификаторе CSIDL.

HRESULT SHGetFolderPath( HWND hwndOwner, int nFolder, HANDLE hToken, DWORD dwFlags, LPTSTR pszPath );

Все константы CSIDL можно найти здесь.

С помощью SHGetFolderPath можно найти почти все необходимые папки.

Но среди констант CSIDL вы не найдете папку Tmp юзера. В XP по умолчанию "Documents and Settings\USERNAME\Local Settings\Temp", в Windows 7 – "Users\USERNAME\AppData\Local\Temp".

SHGetFolderPath тут ничем не поможет. Пути в разных версиях Windows сильно отличаются.

Найти путь к этой папке можно в ключе реестра HKEY_CURRENT_USER\Environment. Там есть 2 значения TEMP и TMP (теоретически должны совпадать) – путь к этой самой папке.

Всё очень просто :)

Олег Медведев

Улучшена конвертация EMF2PDF в PDF Creator Pilot.

Март 29, 2010

Недавно в библиотеке PDF Creator Pilot был исправлен баг с заливкой полигонов. В присланном документе фигуры выводились с помощью функции Polygon. Но после вывода они закрашивались неверным цветом – черным. Как оказалось это было связано с тем, что для заливки использовалась кисть со стилем BS_PATTERN. А в свойствах этой кисти поле  lbColor, содержащее цвет кисти, игнорировалось, и цвет заливки нужно было брать из функции SetBkColor. После того, как проблема стала понятной, мы незамедлительно её исправили. В результате получили правильную конвертацию emf2pdf. Чтобы оценить результат исправления, ниже представлена сравнительная картинка (до и после исправления проблемы)

Before and after fixing the problem

Before and after fixing the problem

Так же ниже можно скачать оригинальные pdf и emf файлы:

PDF файл до исправления, PDF файл после исправлени, EMF файл.

Артём Голубниченко

Недокументированные возможности вывода текста в EMF

Январь 26, 2010

До недавнего времени в нашей PDF библиотеке «PDF Creator Pilot» была нерешенная проблема с выводом вертикального текста в EMF файлах. В большей степени это было связано с тем, что EMF-record, выводящая этот текст была недокументированной. Впрочем, сейчас Microsoft выпустила полную документацию по формату EMF, но ещё раньше это появилась на ресурсе www.undocprint.org. Все это вместе и помогло разрешить проблему.

Проблема изначально заключалась в том, что текст по вертикали выводился не совсем корректно. Он очень сильно сжимался, и буквы накладывались друг на друга.  Поэтому изначально было подозрение, что граничный прямоугольник (rclBounds) для вывода текста рассчитывается неверно. Как в последствии оказалось,  в этом и заключалась проблема. Опишу немного технических деталей, которые выяснились при вскрытии проблемы.

Во-первых, из формата  EMF нами была получена необходимая информация по записи EMR_SMALLTEXTOUT (сам текст, rclBounds и т.д.).

Во-вторых, как выяснилось, размеры rclBounds рассчитывались верно. Но загвоздка заключалась в том, что он не был повернут на 90′. Почему на 90′? Потому что когда текст выводится по вертикали, то в структуре LOGFONT, отражающей настройки шрифта,  – это  фиксируется в полях lfEscapement и lfOrientation. И поэтому после того, как это было определено, необходимо ещё и rclBounds также повернуть на 90′. И тогда текст стал выводиться верно.

Резюмируя, скажу, что проблема была в том, что из EMF передается не повернутый на 90′ rclBounds. Поэтому для корректного вывода текста оставалось его только повернуть на нужный угол. Ниже попытаюсь показать это на рисунках (специально выделю rclBounds, чтобы было нагляднее).

Граничные прямоугольники

Граничные прямоугольники

Исправленную версию PDF библиотеки можно загрузить здесь.

Также наглядно можно посмотреть PDF документ до исправления и PDF документ после исправления, соответственно.

Артем Голубниченко
Руководитель проекта Виртуальный Принтер

Layers (Optional Content Groups)

Сентябрь 8, 2009

Слои (наслоения), или более формальное их название – группы с выборочным содержимым, представляют собой совокупность графических элементов, которые пользователь может динамически сделать видимыми или невидимыми при просмотре документа. (Такая возможность является полезной в таких случаях, как CAD рисование, карты или многоязычные документы) С появлением версии PDF 1.5. такая возможность стала доступна и в PDF. Формы, картинки и аннотации так же могут входить в группы с выборочным содержимым.

Прочитать запись полностью »

Создаем свой первый инсталлятор на Windows Installer XML (WiX) v3.0 в Visual Studio.

Февраль 19, 2009

Как создать WiX – проект в Visual Studio

После установки необходимых компонентов для работы WiX в Visual Studio, можно приступать к созданию WiX – проекта.

  1. Выберите в меню File, затем New, затем Project…

  2. В дереве типов проектов выберите WiX, затем WiX Project и назовите его «FirstWixProject».

В результате получите проект FirstWixProject и файл Product.wxs, который содержит начальный вариант кода установки.

Пример:

Прочитать запись полностью »

COM в быту: первые шаги.

Ноябрь 5, 2008

Я буду описывать процесс создания COM компонента на примере Visual Studio 2008 с использованием ATL, язык С++.

Для начала создаем проект Visual C++/ATL как показано на картинке:


Прочитать запись полностью »

PDF Creator – о проекте и процессе разработки

Октябрь 24, 2008

Привет всем!

В этой статье я хочу рассказать об устройстве проекта PDF Creator Pilot, а также о тех средствах, которые мы используем в его разработке и продвижении.

Прочитать запись полностью »

Для чего Вы бы хотели использовать PDF Creator Pilot?

Июнь 17, 2008

Мы пытаемся сделать PDF Creator Pilot наиболее полезным для Вас. Мы добавляем новые возможности, выполняем заявки и исправляем ошибки. Теперь нам нужна Ваша помощь. Пожалуйста, расскажите нам, для чего Вы используете (или хотели бы использовать) PDF Creator Pilot. Эта информация поможет нам сделать PDF Creator Pilot еще лучше для Вас.

Сергей Бобровский
Разработчик PDF Creator