Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Изменение PDF из 1с

Изменение PDF из 1с
Я
   zippygrill
 
22.07.21 - 16:21
Привет!
Дано pdf документ с заполняемыми полями, а ля https://prnt.sc/1ecz2h2
Если заполняемую часть - заполняет человек (да и программно можно обратится и заполнять), то другую часть, там где у меня переменные "v8Отпуск_планПериод_х" надо как то заполнить информацией из 1С.
Согласно документации Adobe, можно по OLE взаимодействовать с файлом https://opensource.adobe.com/dc-acrobat-sdk-docs/acrobatsdk/pdfs/acrobatsdk_iacguide.pdf
Наклепал пока такое. Либо я не нашел, либо вообще нет возможности обратится в pdf чтобы точно попасть в мои переменные (как обычный текст) и устанавливать/заменить значения.

Библиотеки сторонних разработчиков, если есть на уме тоже рассмотрю. Важно чтобы там была возможность менять текст (а не Crop, Merge файлов).


    doc = Новый COMОбъект("AcroExch.PDDoc");
    doc.Open(ИмяВременногоФайла);
    avDoc = doc.OpenAVDoc(ИмяВременногоФайла);
    AcroExch = Новый COMОбъект("AcroExch.App");
    form = Новый COMОбъект("AFormAut.App");
    
    AcroRect = Новый COMОбъект("AcroExch.Rect");
    AcroRect.Left = 35;
    AcroRect.Right = 785;
    AcroRect.Top = 1000;
    AcroRect.Bottom = 22;
    TextSelect = doc.CreateTextSelect(0, AcroRect);
    NumText = TextSelect.GetNumText();
    
    Для i = 0 по NumText -1 цикл
        Сообщить(TextSelect.gettext(i));        
    КонецЦикла;
   zippygrill
 
1 - 22.07.21 - 16:23
pdf еще раз https://prnt.sc/1ed2t6g
   zippygrill
 
2 - 22.07.21 - 16:23
prtn сейчас не работает..
   zippygrill
 
3 - 22.07.21 - 16:25
вполне вероятно что надо сперва выделить текст, потом заменить через ole AcroExch
   sitex
 
4 - 22.07.21 - 17:00
(0) Что мешает это все заполнить в 1С и сохранить в таком же виде в pdf ?
   zippygrill
 
5 - 22.07.21 - 18:30
(4) Из 1с невозможно заполняемые поля сделать в pdf
   sitex
 
6 - 22.07.21 - 18:34
(5) у вас что pdf уже заполннен и его надо дополнить ?
   zippygrill
 
7 - 25.07.21 - 17:24
(6) Да
   Garykom
 
8 - 25.07.21 - 17:28
(0) не проще весь документ заполнять из 1С?
а потом сохранять в готовый PDF
т.е. пусть юзер не в некоем внешнем вьювере PDF заполняет а потом как то данными из 1С дополнять

а вместо этого сделать формочку в 1С и там юзер заполняет а потом дополнять нужными данными из 1С и все программно в PDF!
   zippygrill
 
9 - 25.07.21 - 17:29
(8) Из 1с невозможно заполняемые поля сделать в pdf
   Garykom
 
10 - 25.07.21 - 17:32
(9) нахрен заполняемые полностью готовый PDF уже заполненный
   Garykom
 
11 - 25.07.21 - 17:33
(10)+ цель PDF документа его переносимость и печать причем одинаковая на разных устройствах
или надо заполненные поля потом править? нахрена?
   Garykom
 
12 - 25.07.21 - 17:33
короче убрать эти заполняемые и данные туда хардкорно
   zippygrill
 
13 - 25.07.21 - 17:35
(12) Там суть в том что из 1с сотруднику выгружается заявление на перенос отпуску. в таблице слева, из 1с выгружается его запланированный отпуск, а в таблице справа - он сам должен проставлять на какие дни переносить.
Бл* почему не использовать word - не пойму..выкрутасы какие-то..
   ДедМорроз
 
14 - 25.07.21 - 17:50
Pdf это открытый формат,можно читать и писать как двоичные данные,если что.
И как бы word - это нифига не стандарт,в отличие от pdf.
Другое дело,что заполнять логичнее xml,а уже на его основе генерить печатную форму.
   zippygrill
 
15 - 25.07.21 - 17:53
(14) Пример в студию?
   Garykom
 
16 - 25.07.21 - 17:59
(13) ну так пусть сотрудник все в 1С и делает!
нахрена этот PDF то?
   Garykom
 
17 - 25.07.21 - 18:00
(16)+ Раньше такое с XLS делали и тоже не понимал нахрена
Когда есть HTML что намного удобней
   Garykom
 
18 - 25.07.21 - 18:00
(17)+ в смысле или сразу в 1С делаем, или делаем онлайн формы снаружи 1С для юзеров не имеющих доступа в 1С
и эти онлайн формы связываем с 1С как надо
   zippygrill
 
19 - 20.09.21 - 16:31
апдейт
Короче, удалось через Адобе Акробат Про манипулировать эти заполняемые поля.
И все это происходит на клиенте.
        doc = Новый COMОбъект("AcroExch.PDDoc");
        doc.Open(ИмяВременногоФайла);
        
        
        AcroExchApp = Новый COMОбъект("AcroExch.App");
        AcroExchApp.Hide();
    
            Для i = 1 По 5 Цикл
        Временный = ПолучитьИмяВременногоФайла("pdf");
        ДвоичныеДанныеМакета.Записать(Временный);
        
        AcroExchAVDoc = Новый COMОбъект("AcroExch.AVDoc");
        avDoc = doc.OpenAVDoc(Временный);
        form = Новый COMОбъект("AFormAut.App");
        Fields = form.Fields;
        
        
        Для Каждого Field Из Fields Цикл
            
            ГСЧ = Новый ГенераторСлучайныхЧисел();
            СлЧисло = ГСЧ.СлучайноеЧисло(1);
            Если Лев(Field.Name, 21) = "v8Отпуск_планКолДней_" Тогда
                Field.Value = СлЧисло;
            КонецЕсли;
            Если СтрНайти(Field.Name, "IsReadOnly") > 0  Тогда 
                Field.IsReadOnly = True;
            КонецЕсли;
                КонецЦикла;
                КонецЦикла;
        ResultSave = doc.Save(,Временный);
        doc.Close();
        avDoc.Close(0);
        
        AcroExchApp.CLoseAllDocs();
        AcroExchApp.Exit();



Сейчас уперлись в лицензии Адоба в котором пишут что для серверных автоматизированных процессов нужно отдельное соглашение.
Они (Адобе) уже как месяц не могут понять как нам лицензировать серверную часть Адоб Про с помощью которого через OLE можно это все делать и генерить pdf регламентным заданием..
   hhhh
 
20 - 20.09.21 - 16:59
(19) вам же на клиенте нужно.
   zippygrill
 
21 - 21.09.21 - 09:57
(20) Возможно в будущем, какие то задачи будут на клиенте происходить. Но ближайшая - это с сервера сформировать файлы и отправить по почте.
   ptiz
 
22 - 21.09.21 - 10:05
(21) Может в гугл-док? Сотруднику ссылку отправлять на документ.
   zippygrill
 
23 - 22.09.21 - 13:14
(22) на pdf сотрудник еще должен свой НКЭП ставить, а word не умеет :)
   zippygrill
 
24 - 01.10.21 - 10:08
Привет! Пока пытаемся лицензировать этот Adobe, надо смотреть в другую сторону.
Нашел что Foxit тоже умеет работать с pdf файлами. У них есть разные SDK сборки: .Net, C, C++, Java
Какая из сборок SDK удобнее использовать из самой 1С?

Вот например выдержка как инициализация идет в SDK под .Net https://prnt.sc/1ubocik
   zippygrill
 
25 - 01.10.21 - 10:10
*скрин из SDK для Java
   zippygrill
 
26 - 05.10.21 - 13:25
апну
Оч актуально, какие SDK сборки из 1с использовать (.net, java, c). Что FOxit, что Adobe дают скачивать эти sdk библиотеки. И как я понимаю они интегрируются в твое решение.
А как из 1С то вызвать методы библиотек то..если к ним, что-то я ля "Новый COMОбъект()" нет?
   Kassern
 
27 - 05.10.21 - 13:31
(26) помню как то с pdfками работал, ставил от адоба прогу для этого, причем там надо было проф версию ставить. А далее все верно аля Новый COMОбъект() и смотришь какие методы есть на оф сайте и с ними работаешь
   novichok79
 
28 - 05.10.21 - 13:42
поднимите микросервис на каком-нибудь ЯП, который умеет редактирование PDF.
а вы в сервис кидаете пдфку, поля и их значения, на выходе сервис вам сообщает где на сервере забрать файл.
   zippygrill
 
29 - 05.10.21 - 13:43
(27) в Адоб Про ты когда его ставишь, он на автомате в реестре регистрируется чтобы ты потом работал через COMОбъект(). Это я так делаю в (19) - но, вопрос лицензировании встал.
А еще у Адоб есть Services Api - это  типа библиотека скаченная с сайта с dll - вот это непонятно как использовать https://prnt.sc/1uvlt2d
   zippygrill
 
30 - 05.10.21 - 13:44
ой, не ту ссылку (она от foxit)
 
 
   novichok79
 
31 - 05.10.21 - 13:44
а нельзя в поле HTML документа закинуть документ и потом просто считать значения из DOM документа?
   Kassern
 
32 - 05.10.21 - 13:44
(29) "но, вопрос лицензировании встал" покупайте и делов то)) я не думаю, что аддоб будет бесплатно что-то вообще давать.
   novichok79
 
33 - 05.10.21 - 13:45
ну правда придется PDF переделать в HTML
   novichok79
 
34 - 05.10.21 - 13:45
а то adobe - коммерческая хрень, COM - только Windows, такие себе зависимости
   zippygrill
 
35 - 05.10.21 - 13:47
(32) Мы хотим, а вот Адоб что-то не понимает нас..
   zippygrill
 
36 - 05.10.21 - 13:48
(28) хоть мы ИТ компания - но привлечь к этому другое подразделение как-то не хочется
   Kassern
 
37 - 05.10.21 - 13:53
(35) https://infostart.ru/public/1120021/ вот пример работы с foxit
   Kassern
 
38 - 05.10.21 - 13:54
   novichok79
 
39 - 05.10.21 - 14:00
(36) я к тому, что если там не хайлоад, не будет БД, то любой программер (в т. ч. 1Сник) с помощью quick start мануалов смог бы такое запилить - дернуть библиотеку, получить файлик и сохранить на диск.
имхо, самый дешевый и мультиплатформенный способ.
   novichok79
 
40 - 05.10.21 - 14:01
в публикации с ИС чуваки 499 баксов за полную версию либы - е**анулись в край совсем
   Kassern
 
41 - 05.10.21 - 14:01
(39) ну это вы загнули "любой программер") Сейчас такие программеры, что им мануал дай, ссылку скинь, пример сунь, а выхлопа 0...
   Kassern
 
42 - 05.10.21 - 14:02
(40) для бизнеса 35тыс разово это не такие уж большие бабки, особенно, если библиотека удобная и полностью перекрывает потребности.
   novichok79
 
43 - 05.10.21 - 14:04
(41) судя по нетривиальности задачи для 1С, топикстартер не из таких. на больших проектах чуваки дерут друг у друга код, что в 1С, что не в 1С. проверено лично.
(42) это да, но COM. если вдруг потом захочется переехать на другую ОС? хз, когда мы писали самописки, приходилось как раз микросервисами выкручиваться, чтобы мультиплатформенность и все такое.
   Kassern
 
44 - 05.10.21 - 14:08
(43) а нужна ли она ТС эта мультиплатформенность?) Особенно если уже куплен MS SQL и серверная винда, а это иногда дороже самого сервера выходит)
   Kassern
 
45 - 05.10.21 - 14:09
а так да, можно микросервис поднять, перегонять им PDF в удоборедактируемый формат и сувать его уже 1ске, та его правит и сохраняет уже в PDF, это она сама умеет
   DrZombi
 
46 - 05.10.21 - 14:49
(19) Адоб про платный :)
   DrZombi
 
47 - 05.10.21 - 14:54
(38) (37)  Интересные примерчики :) 
Спасибо :)
   zippygrill
 
48 - 07.10.21 - 09:44
Скачал я короче библиотеки foxit на C++ https://prnt.sc/1v4h31n. В составе есть библиотека скомпилированная уже в виде dll.
Пытаюсь ее использовать через ПодключитьВнешнююКомпоненту() на клиенте - не получается
Пытаюсь через regsvr регистрировать соответствующий разряд - никак. Что за нах?
   ДенисЧ
 
49 - 07.10.21 - 09:46
(48) Странно.. Почему это foxit ничего не знает про 1с?
Непорядок, надо санкции вводить...
   Kassern
 
50 - 07.10.21 - 09:47
(48) а ты уверен что эта библиотека для 1ски писалась?)
   Обработка
 
51 - 07.10.21 - 09:48
Все не читал. Короче извращенцы были и будут всегда.
   zippygrill
 
52 - 07.10.21 - 09:50
(50) Да там 1с и не пахло :)
   zippygrill
 
53 - 07.10.21 - 10:03
(38) Пойду Debenu раскурю..
   novichok79
 
54 - 07.10.21 - 13:24
(48) сделайте уже сервис на питоне или джавке (благо опенсорных либ для работы с pdf там докуа и больше). зачем делать на 1С то, для чего он не предназначен? это как кушать суп вилкой. можно конечно, но очень неудобно.
   novichok79
 
55 - 07.10.21 - 13:24
а у вас там винда, ну возьмите C#
   ДенисЧ
 
56 - 07.10.21 - 13:25
(54) Какой питон, какая джавка?? Голанг же!
   novichok79
 
57 - 07.10.21 - 13:27
(56) ахахахаха. да без проблем.
https://github.com/signintech/pdft
   novichok79
 
58 - 07.10.21 - 13:29
(48) вот кстати есть либа для джавки pdfbox, есть еще openpdf но хз может ли она то, что pdfbox.
даже туториал есть ёпта
https://www.tutorialspoint.com/pdfbox/pdfbox_adding_text.htm
берете spring boot initializer, впиливайте туда это.
https://mvnrepository.com/artifact/org.apache.pdfbox/pdfbox
дебажите, тестите. профит
   zippygrill
 
59 - 08.10.21 - 09:47
https://prnt.sc/1v9k9xn
странная ситуация с кириллицей в этот Debenu. Если курсор ставлю на текст с кириллицей - то его видно. КАк только на другое поле курсор ставлю, текст на кириллице исчезает :)
Где то какая то кодировка или свойство поля надо ставить..
   novichok79
 
60 - 08.10.21 - 18:08
а вы отважные...
 
 
   серый КТУЛХУ
 
61 - 08.10.21 - 19:58
в гуглшит можно и писать из 1с и читать в 1с и раздавать-отбирать права (всякие!) из 1с - по мыло-адресам, на которые автоматом генерится письмо про "вам предоставлен доступ..."
   zippygrill
 
62 - 11.10.21 - 13:05
(61) хорош ваш гуглшит
   zippygrill
 
63 - 11.10.21 - 20:31
Вдруг у кого-то кириллица не будет выводится

            GetNeedAppearances_Result = QP.GetNeedAppearances();
            SetNeedAppearances_Result = QP.SetNeedAppearances(1);
   серый КТУЛХУ
 
64 - 11.10.21 - 23:08
(63): он не мой - он гугля. и (61) доступно всем его юзерам.


Список тем форума
 
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.