<?php // Полная загрузка сервисных книжек, создан 2025-01-05 12:44:55
global $wpdb2;
global $failure;
global $file_hist;
///// echo '<H2><b>Старт загрузки</b></H2><br>';
$failure=FALSE;
//подключаемся к базе
$wpdb2 = include_once 'connection.php'; ; // подключаемся к MySQL
// если не удалось подключиться, и нужно оборвать PHP с сообщением об этой ошибке
if (!empty($wpdb2->error))
{
///// echo '<H2><b>Ошибка подключения к БД, завершение.</b></H2><br>';
$failure=TRUE;
wp_die( $wpdb2->error );
}
$m_size_file=0;
$m_mtime_file=0;
$m_comment='';
/////проверка существования файлов выгрузки из 1С
////файл выгрузки сервисных книжек
$file_hist = ABSPATH.'/_1c_alfa_exchange/AA_hist.csv';
if (!file_exists($file_hist))
{
///// echo '<H2><b>Файл обмена с сервисными книжками не существует.</b></H2><br>';
$m_comment='Файл обмена с сервисными книжками не существует';
$failure=TRUE;
}
/////инициируем таблицу лога
/////если не существует файла то возврат и ничего не делаем
if ($failure){
///включает защиту от SQL инъекций и данные можно передавать как есть, например: $_GET['foo']
///// echo '<H2><b>Попытка вставить запись в лог таблицу</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>$m_mtime_file,'last_size_upload'=>$m_size_file,'comment'=>$m_comment));
wp_die();
///// echo '<H2><b>Возврат в начало.</b></H2><br>';
return $failure;
}
/////проверка лога загрузки, что бы не загружать тоже самое
$masiv_data_file=stat($file_hist); ////передаем в массив свойство файла
$m_size_file=$masiv_data_file[7]; ////получаем размер файла
$m_mtime_file=$masiv_data_file[9]; ////получаем дату модификации файла
////создаем запрос на получение последней удачной загрузки
////выбираем по штампу времени создания (редактирования) файла загрузки AA_hist.csv, $m_mtime_file
///// echo '<H2><b>Размер файла: '.$m_size_file.'</b></H2><br>';
///// echo '<H2><b>Штамп времени файла: '.$m_mtime_file.'</b></H2><br>';
///// echo '<H2><b>Формирование запроса на выборку из лога</b></H2><br>';
////препарируем запрос
$text_zaprosa=$wpdb2->prepare("SELECT * FROM `vin_logs` WHERE `last_mtime_upload` = %s", $m_mtime_file);
$results=$wpdb2->get_results($text_zaprosa);
if ($results)
{ foreach ( $results as $r)
{
////если штамп времени и размер файла совпадают, возврат
if (($r->last_mtime_upload==$m_mtime_file) && ($r->last_size_upload==$m_size_file))
{////echo '<H2><b>Возврат в начало, т.к. найдена запись в логе.</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>$m_mtime_file,'last_size_upload'=>$m_size_file,'comment'=>'Загрузка отменена, новых данных нет, т.к. найдена запись в логе.'));
wp_die();
return $failure;
}
}
}
////если данные новые, пишем в лог запись о начале загрузки
/////echo '<H2><b>Попытка вставить запись о начале загрузки в лог таблицу</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>0, 'last_size_upload'=>$m_size_file, 'comment'=>'Начало загрузки'));
////очищаем таблицу
$clear_tbl_zap=$wpdb2->prepare("TRUNCATE TABLE %s", 'vin_history');
$clear_tbl_zap_repl=str_replace("'","`",$clear_tbl_zap);
$results=$wpdb2->query($clear_tbl_zap_repl);
///// echo '<H2><b>Очистка таблицы сервисных книжек</b></H2><br>';
if (empty($results))
{
///// echo '<H2><b>Ошибка очистки таблицы книжек, завершение.</b></H2><br>';
//// если очистка не удалась, возврат
$failure=TRUE;
wp_die();
return $failure;
}
////загружаем данные
$table='vin_history'; // Имя таблицы для импорта
//$file_hist Имя CSV файла, откуда берется информация // (путь от корня web-сервера)
$delim=';'; // Разделитель полей в CSV файле
$enclosed='"'; // Кавычки для содержимого полей
$escaped='\
жаль что нет бесплатных варинтов работы с PDF и формами PDF для заполнения, обязательное наличие платной версии Acrobat сводит на нет пользу…
Тем не менее, это не сторонний программный продукт, а непосредственно сам Adobe.
А вносить изменения в документ эта компонента позволяет?
(3)
Да, эта компонента позволяет создавать и редактировать PDF документ.
(1)
libreoffice — не?
(2)с этим не поспоришь, продукт качественный, но цена при установке на сервер где 1000 и более пользователей, просто заоблачная
(5) если правильно понял это тот же open office, с ним не нашел варианта заполнения напрямую из макета, только через временные файлы туда сюда гонять и в части pdf — заполнения форм и переменных там тоже не нашел, только текстовки подменять и сохранять как пдф.
А, если в программной части — то только через какие-нить pdftk думаю, есть возможность..https://www.pdflabs.com/tools/pdftk-server/ например
что нужно установить, чтобы в программе создался объект AcroExch.PDDoc??
(9)
Для возможности создания объекта AcroExch.PDDoc необходимо установить «Acrobat Pro DC» (на оф. сайте доступна пробная (бесплатная) версия на 30 дней).
т.е. сом объект можно создать только при установке платной версии Адоба или триальной?
(11)Да, все верно.
В бесплатной версии Acrobat Reader com объект «AcroExch.PDDoc» отсутствует
(11)Что Вы хотите получить из PDF файла? Просто есть другой вариант получения данных, правда набор данных будет ограничен
Зачем Акробат для PDF?
Можно и через офис
(14)
скажи, а как с помощью «Word.Application» получить из pdf файла (который тебе пользователь загрузил, прислал …..)
— количество страниц ?
— формат бумаги ?
— автор создания? и тд и тп
(15)
Зачем для чтения word?
а руками пробовал открыть файл pdf в ворде? что у тебя получается?
нужно выводить 2 страницы из pdf файла на форму для просмотра и пакетная печать pdf файлов из 1С.
(17)
это не решает моих вопросов =)
И вообще разные задачи — распознать, создать, просто получить инфу о файле.
PS: PDF бывает разный — например с рисунками, чертежами и таблицами.
(16) С какой целью?
Я для работы с pdf пользуюсь ActiveX Adobe PDF Reader
желательно страницы выводить раздельно
(19)
(19)
https://w1c.ru/1c-18.html
(21)Ты ж сам прислал код с открытием pdf в word. Я не знаю зачем ты это прислал, это фигня полная
ActiveX Adobe PDF Reader — чтение файла, просмотр файла.
Acrobat Pro DC — чтение файла, создание файла, получения/изменение свойств файла
Чувствуешь разницу?
(22)данная статья не про чтение файла, а про просмотр свойств
(25)
Тогда быстрее xpdf.
Формируешь текстовик и парсишь. Экономия времени на открытие COM-объекта
(26) сторонние продукты конечно удобнее, если заказчик не против (что бывает не часто)
(27)
в состав пакета входит консольная утилита pdfinfo.
Делаешь pdfinfo.exe НашФайл.pdf > ТекстовыйФайл.txt
Потом парсишь.
Утилита бесплатная. Никаких сторонних продуктов.
(28)
ты опять за свое…
как ты таким способом определишь формат бумаги?!
(29)
В комплект входят консольные утилиты, позволяющие:
Получить информацию из заголовка и описание метаданных файла PDF. распаковки PDF, извлечения изображений, шрифтов, преобразования в форматы png, ppm, ps, txt, html.
The ‘Info’ dictionary contains the following values:
title
subject
keywords
author
creator
producer
creation date
modification date
In addition, the following information is printed:
tagged (yes/no)
form (AcroForm / XFA / none)
page count
encrypted flag (yes/no)
print and copy permissions (if encrypted)
page size and rotation
file size
linearized (yes/no)
PDF version
metadata (only if requested)
(30)спасибо. Есть еще утилита Exiftool — она еще мощнее, так как работает с разными файлам (видео, аудио и тд и тп)
(29)
Ну в данном случае это комплект консольных утилит. Каждая размером 1 мб., т.е. можно кинуть в хранилище. Заточены только под работу с PDF.
Это на тему «как быстро и безболезненно, не покупая доп софта решить проблему».
Получить количество страниц просто: считываете файл pdf как текст, далее проходя по строкам ищите вхождение «/Count». Как находите, смотрите следующие цифры после — это и будет количество страниц. Смотреть до конца строки или следующего «/». Проверялось на файлах формата 1.2 и 1.5
(33) делал я так, не все файлы можно разобрать на текстовые строки.
Итог — метод Count не сработает и мы не получим результата
(34) Это как — не все? Пример?
Сейчас проанализировал 1000 первых попавшихся файлов — в некоторых слово /Count не нашлось. Файлы формата 1.4
(36) В 1.5 тоже нет
я проверял метод (который предлагался в (33)) на более чем 10 000 файлов, и из 10 файлов 3-4 определял количество листов, а в остальных нет. Поэтому, имхо, это неверный подход.
Таким способом хорошо WORD файлы определять, но для него в 1С есть отдельная компонента. Так что….