Страницы

Поиск по вопросам

воскресенье, 26 января 2020 г.

iTextSharp, PDF, печать

#c_sharp #pdf #printing #itextsharp


Приветствую, коллеги.
Использую iTextSharp для генерации PDF-документов в своем проекте. Создаю акты и
счета-фактуры для бухгалтерии. 
В документах использую шрифт Tahoma, объявляю базовый шрифт таким образом:
private static void PrepareFonts()
{
    _baseTahoma = BaseFont.CreateFont("c:/windows/fonts/tahoma.ttf", BaseFont.IDENTITY_H,
BaseFont.EMBEDDED);
    _tahomaBold = new Font(_baseTahoma, 10, Font.BOLD);
    _tahoma = new Font(_baseTahoma, 10, Font.NORMAL);
    _tahoma16Bold = new Font(_baseTahoma, 18, Font.BOLD);
    _tahomaSmall = new Font(_baseTahoma, 8, Font.NORMAL);
}

Когда документ готов я запускаю печать файла, находя путь к Adobe Reader в реестре
и далее с помощью аргументов "/p /h" и пути к файлу запускаю на печать:
        RegistryKey adobe = Registry.LocalMachine.OpenSubKey(@"Software\Microsoft\Windows\CurrentVersion\App
Paths\AcroRd32.exe");

        if (adobe != null)
        {
            string path = adobe.GetValue("").ToString();

            GenerateDocuments();

            Process proc = new Process();

            proc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
            proc.StartInfo.Verb = "print";

            string pdfFileName = _invoice.FullName;

            proc.StartInfo.FileName = path;
            proc.StartInfo.Arguments = @"/p /h " + pdfFileName;
            proc.StartInfo.UseShellExecute = false;
            proc.StartInfo.CreateNoWindow = true;

            proc.Start();
            proc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
            if (proc.HasExited == false)
            {
                if (!proc.WaitForExit(5000))
                    proc.Kill();
            }

            proc.EnableRaisingEvents = true;
            proc.Close();
        }

Но напечатанный документ выходит вообще без каких-либо символов и без цифр. Только
линии таблиц есть на бумаге.
В ТЗ на проект написано, что должна использоваться "тихая печать", т.е. документы
создаются и печатаются по одной кнопке, т.е. чтобы не надо было заходить в Adobe Reader
и мухлевать в  "Параметрах печати", в том числе ставить галочку "Print as image".
Так вот если просто открыть документ и поставить "Print as image" в Advanced свойствах,
то все символы есть, а если делается "тихая печать", то их нет.
Кто-нибудь сталкивался с подобным? Как это возможно решать.
P.S. Во втором листинге метод GenerateDocuments как раз генерирует файлы, если Adobe
Reader вообще установлен на компьютере.
Пример файла, который должен быть распечатан по ссылке: http://ge.tt/2WCRmpS/v/0    


Ответы

Ответ 1



Все оказалось просто. Принтер Kyocera, на котором пытаюсь отпечатать, - старая модель. Не очень корректно воспринимает практически все шрифты. На новых моделях принтеров - все отлично, даже без "Print as image".

Комментариев нет:

Отправить комментарий