Старые песни о PDF

Обсуждение извечных проблем кларионовских (и не только) отчетов

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7323
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Старые песни о PDF

Сообщение Игорь Столяров »

Привет всем !

Заранее извиняюсь, что поднимаю заюзанную тему ...
Но тут попросили посмотреть и переделать малой кровью чужую старую программу ... :(

Удалось ли современной науке победить кракозябры при экспорте отчётов напрямую в PDF ?
Про ScanMode - знаю, но что-то этот режим у меня падает на больших отчётах (больше 10 листов). :(

Заранее спасибо. :)
За теми кто отстал - не возвращаться. (С) Кодекс
kreator
✯ Ветеран ✯
Сообщения: 4960
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 6 раз
Поблагодарили: 19 раз

Старые песни о PDF

Сообщение kreator »

Пока другого варианта, кроме ScanMode, нет. Видел, что падает. Но не всегда, принцип не понял. Не могу сказать, что от количества и/или размера страниц.
Пытался посмотреть, что не так без ScanMode. Сложилось впечатление, что проблема типа в юникоде. Потому что, Total Commander'ом файлл просматривается нормально. Ну, т.е. кракозябр нет. Как-будто просто метки в файле не стоит о кодировке. Или не та стоит.
Была ещё мысль сравнить файлы, которые создаёт Кларион и какой-нибудь драйвер PDF принтера. Но что-то руки не дошли. Да и подумал - может в юникоде заработает.
We are hard at work… for you. :)
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7323
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Старые песни о PDF

Сообщение Игорь Столяров »

Падает где-то внутри конвертера WMF -> PNG .NET компоненты .... :(
Причём после перезагрузки компьютера, какое-то время работает, а потом входит в ступор.
Похоже, что калечный вызов компоненты из ClaRunExt.

Вообще ситуация минорная. Получается, что из Clarion, без использования
офисного пакета или внешних компонент нельзя сформировать хоть какой-то документ
общепринятого формата для обмена отчётами ... (пачку WMF файлов я таковым не считаю). :(
За теми кто отстал - не возвращаться. (С) Кодекс
kreator
✯ Ветеран ✯
Сообщения: 4960
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 6 раз
Поблагодарили: 19 раз

Старые песни о PDF

Сообщение kreator »

Посмотрел я PDF, который формирует Кларион. В Инете определитель кодировки показывает, что это банальная кодировка 1252. Поэтому есть два варианта. Если есть какой-нибудь тег с кодировкой в файле PDF, надо добавить 1251 кодировку. Если такого нет, и текст должен быть в unicode, нужно найти, где формируется текст и конвертнуть его в Unicode. А сначала надо найти время для проверки моей теории :D .
We are hard at work… for you. :)
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7323
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Старые песни о PDF

Сообщение Игорь Столяров »

kreator писал(а): 07 Сентябрь 2017, 20:42В Инете определитель кодировки показывает, что это банальная кодировка 1252
Это есть и в спецификации PDF ... Для текста задаётся шрифт, а в описании шрифта его кодировка ...
Я попробовал просто ручками перебить на юникод пару строк - всё поехало, совсем другое отображение. :(
В этом случае еще нужно добавлять таблицы отображения геометрии для каждого символа шрифта, а это уже пипец. :(

В принципе, ситуацию спас бы какой-нибудь адекватный конвертер WMF -> BMP ... В дельфях - это пара строк кода.
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
RaFaeL
✯ Ветеран ✯
Сообщения: 1376
Зарегистрирован: 24 Март 2009, 17:59
Откуда: НН
Благодарил (а): 7 раз
Поблагодарили: 1 раз
Контактная информация:

Старые песни о PDF

Сообщение RaFaeL »

Есть же конвертер WMF -> PDF
Image2PDF.dll который
Чем не подходит?
Еще есть библиотеки работы с PDF от Tracker Software, я выкладывал. там вроде тоже есть конвертация с wmf, но не пробовал, пока пользуюсь тем что выше
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7323
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Старые песни о PDF

Сообщение Игорь Столяров »

RaFaeL писал(а): 07 Сентябрь 2017, 21:34Есть же конвертер WMF -> PDF
Image2PDF.dll который
Спасибо - нашел ...
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
RaFaeL
✯ Ветеран ✯
Сообщения: 1376
Зарегистрирован: 24 Март 2009, 17:59
Откуда: НН
Благодарил (а): 7 раз
Поблагодарили: 1 раз
Контактная информация:

Старые песни о PDF

Сообщение RaFaeL »

Код: Выделить всё

      I2PDF_License(SELF.PDFG.License)
      I2PDF_SetProducer(SELF.PDFG.Producer)
      I2PDF_SetCreationDate()
      I2PDF_DeleteImagesOnConvert()
      case SELF.PDFG.Typ
      of 0
        I2PDF_MetaToNativePDF()
        I2PDF_EmbedFonts()
        I2PDF_SetDPI(0)
        I2PDF_ForceCodepage(1251)
      of 1
        I2PDF_SetDPI(150)
        My1ClaRunExt &= NEW ClaRunExtClass
      end
      loop I=1 to records(SELF.PreviewQueue)
        GET(SELF.PreviewQueue,I)
        LOC:GetFromName = clip(SELF.PreviewQueue)
        LOC:FileName2 = clip(SELF.PreviewQueue)&'.wmf'
        copy(LOC:GetFromFile,LOC:FileName2)
        if SELF.PDFG.Typ
          err#=My1ClaRunExt.ImageToPNG(LOC:FileName2,clip(SELF.PreviewQueue)&'.png')
          remove(LOC:FileName2)
          LOC:FileName2=clip(SELF.PreviewQueue)&'.png'
        end
        a#=I2PDF_AddImage(LOC:FileName2)
      end
      if SELF.PDFG.Typ
        Dispose(My1ClaRunExt)
      end
      b#=I2PDF_MakePDF(SELF.PDFG.Filename,choose(SELF.PDFG.RunPDF=1,1,0),LOC:ErrorText,256)
Но сразу говорю, у него есть ограничение - не более 200 (вроде бы) объектов одного типа на файл wmf. Самый критичный тип это Линия, если в первичке все рисуется линиями, то быстро упретесь. Переделывал на боксы, и все равно уперся на многострочных больших таблицах. Так что лучше смотреть сразу второй вариант
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7323
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Старые песни о PDF

Сообщение Игорь Столяров »

RaFaeL писал(а): 07 Сентябрь 2017, 21:54Так что лучше смотреть сразу второй вариант
Ну тогда мы возвращаемся к началу.
Потому что, были бы растровые картинки с листами отчёта - а вставить их в PDF проблем-то нет ...
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
RaFaeL
✯ Ветеран ✯
Сообщения: 1376
Зарегистрирован: 24 Март 2009, 17:59
Откуда: НН
Благодарил (а): 7 раз
Поблагодарили: 1 раз
Контактная информация:

Старые песни о PDF

Сообщение RaFaeL »

Под вторым вариантом имел в виду библиотеки и шаблон для клариона от Tracker Software
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7323
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Старые песни о PDF

Сообщение Игорь Столяров »

Спасибо. Понял ... 200 линий - это не о чём, можно даже не начинать.
У меня есть отчёты, где ReportDesigner падает, приходится линий 100 дорисовывать через Create(). :)
За теми кто отстал - не возвращаться. (С) Кодекс
Yufil
Ветеран движения
Сообщения: 1277
Зарегистрирован: 16 Май 2006, 14:34
Контактная информация:

Старые песни о PDF

Сообщение Yufil »

Есть ещё List&Label, у него без проблем. Пример выкладывал тока-тока...
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7323
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Старые песни о PDF

Сообщение Игорь Столяров »

Посмотрел всех. :) Пока в SV не решили проблему с кракозябрами в PDF,
остановится на том, что бы тупо печатать отчёт на принтер "Microsoft Print to PDF".

Плюсы:
- Полноценный русский PDF с текстом;
- Самая высокая скорость экспорта больших отчётов;
- Прекрасное качество, нет ограничений на объекты (ну или пока они не известны);
- Нет зависимости от сторонних компонент, не увеличивается размер программы;
- Работает стабильно, не используется глючный интерфейс Clarion -> .NET;
- Тривиальная реализация (20 строк кода);

Минусы:
- Работает только в Windows10. :) Ну и фиг с ним, все там будем ... :)
За теми кто отстал - не возвращаться. (С) Кодекс
zmi
Новичок
Сообщения: 20
Зарегистрирован: 26 Октябрь 2017, 21:51

Старые песни о PDF

Сообщение zmi »

В настоящий момент используем I2PDF. И все бы хорошо, но в режиме фоновой безоконной обработки библиотека периодически валит программу и дальнейшую обработку. Файл не передается - клиент не доволен.:)
Я так понял, что придется пробовать вариант PDF-принтера...
Возникает ряд вопросов: по определению принтера, назначению имени файла и чтобы без окон.
Игорь Столяров, можно эти 20 строк кода - в студию?
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7323
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Старые песни о PDF

Сообщение Игорь Столяров »

Привет !

Да, в общем-то, ничего военного здесь нет ...
Можно начать с простой переустановки принтера перед СОЗДАНИЕМ отчёта:

Код: Выделить всё

   ! Сохранили параметры печати
   ....

   ! Переустановили параметры печати на PDF принтер Windows 10
   Printer{PropPrint:Device} = 'Microsoft Print to PDF'
   Printer{PropPrint:PrintToFile} = True
   Printer{PropPrint:PrintToName} = 'полное имя файла.pdf'
   
   Report_MyExportPDF()   ! Создали отчёт
   
   ! Восстановили параметры печати
   ....
   
   ! Открыли для просмотра (по умолчанию Win10 использует для просмотра PDF броузер EDGE)
   If Exist('полное имя файла.pdf') then Run('полное имя файла.pdf').
И далее уже по вкусу и в контексте решаемой Вами задачи ... :)
Кстати, экспорт в XPS выполняет аналогично. Только принтер: 'Microsoft XPS Document Writer'
За теми кто отстал - не возвращаться. (С) Кодекс
Ответить