Имя: Пароль:
1C
1С v8
Изменение PDF из 1с
0 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));        
    КонецЦикла;
1 zippygrill
 
22.07.21
16:23
pdf еще раз https://prnt.sc/1ed2t6g
2 zippygrill
 
22.07.21
16:23
prtn сейчас не работает..
3 zippygrill
 
22.07.21
16:25
вполне вероятно что надо сперва выделить текст, потом заменить через ole AcroExch
4 sitex
 
naïve
22.07.21
17:00
(0) Что мешает это все заполнить в 1С и сохранить в таком же виде в pdf ?
5 zippygrill
 
22.07.21
18:30
(4) Из 1с невозможно заполняемые поля сделать в pdf
6 sitex
 
naïve
22.07.21
18:34
(5) у вас что pdf уже заполннен и его надо дополнить ?
7 zippygrill
 
25.07.21
17:24
(6) Да
8 Garykom
 
гуру
25.07.21
17:28
(0) не проще весь документ заполнять из 1С?
а потом сохранять в готовый PDF

т.е. пусть юзер не в некоем внешнем вьювере PDF заполняет а потом как то данными из 1С дополнять
а вместо этого сделать формочку в 1С и там юзер заполняет а потом дополнять нужными данными из 1С и все программно в PDF!
9 zippygrill
 
25.07.21
17:29
(8) Из 1с невозможно заполняемые поля сделать в pdf
10 Garykom
 
гуру
25.07.21
17:32
(9) нахрен заполняемые полностью готовый PDF уже заполненный
11 Garykom
 
гуру
25.07.21
17:33
(10)+ цель PDF документа его переносимость и печать причем одинаковая на разных устройствах
или надо заполненные поля потом править? нахрена?
12 Garykom
 
гуру
25.07.21
17:33
короче убрать эти заполняемые и данные туда хардкорно
13 zippygrill
 
25.07.21
17:35
(12) Там суть в том что из 1с сотруднику выгружается заявление на перенос отпуску. в таблице слева, из 1с выгружается его запланированный отпуск, а в таблице справа - он сам должен проставлять на какие дни переносить.
Бл* почему не использовать word - не пойму..выкрутасы какие-то..
14 ДедМорроз
 
25.07.21
17:50
Pdf это открытый формат,можно читать и писать как двоичные данные,если что.
И как бы word - это нифига не стандарт,в отличие от pdf.
Другое дело,что заполнять логичнее xml,а уже на его основе генерить печатную форму.
15 zippygrill
 
25.07.21
17:53
(14) Пример в студию?
16 Garykom
 
гуру
25.07.21
17:59
(13) ну так пусть сотрудник все в 1С и делает!
нахрена этот PDF то?
17 Garykom
 
гуру
25.07.21
18:00
(16)+ Раньше такое с XLS делали и тоже не понимал нахрена
Когда есть HTML что намного удобней
18 Garykom
 
гуру
25.07.21
18:00
(17)+ в смысле или сразу в 1С делаем, или делаем онлайн формы снаружи 1С для юзеров не имеющих доступа в 1С
и эти онлайн формы связываем с 1С как надо
19 zippygrill
 
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 регламентным заданием..
20 hhhh
 
20.09.21
16:59
(19) вам же на клиенте нужно.
21 zippygrill
 
21.09.21
09:57
(20) Возможно в будущем, какие то задачи будут на клиенте происходить. Но ближайшая - это с сервера сформировать файлы и отправить по почте.
22 ptiz
 
21.09.21
10:05
(21) Может в гугл-док? Сотруднику ссылку отправлять на документ.
23 zippygrill
 
22.09.21
13:14
(22) на pdf сотрудник еще должен свой НКЭП ставить, а word не умеет :)
24 zippygrill
 
01.10.21
10:08
Привет! Пока пытаемся лицензировать этот Adobe, надо смотреть в другую сторону.
Нашел что Foxit тоже умеет работать с pdf файлами. У них есть разные SDK сборки: .Net, C, C++, Java
Какая из сборок SDK удобнее использовать из самой 1С?

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

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